Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160350
  • 博文数量: 126
  • 博客积分: 1073
  • 博客等级: 上尉
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 00:32
文章分类

全部博文(126)

文章存档

2018年(56)

2013年(1)

2012年(8)

2011年(61)

分类: LINUX

2011-01-24 20:43:25

关于linux系统的启动过程和troubleshooting实验的讨论,

 

Linux系统启动过程大致安装按照如下步骤进行(这是一个简述)

第一阶段: BIOS启动引导阶段(BIOS的初始化)

在该过程中实现硬件的初始化以及查找启动介质

选择引导设备,读取和执行引导设备的第一个扇区(MBR

MBR = bootloder(启动设备) + 分区表 + 结束位

512B    446B(grub)         16*4B    2B

 

第二阶段:  GRUB启动引导阶段

Grub的配置文件在/boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda3

#          initrd /initrd-version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server (2.6.18-164.el5)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet crashkernel=128M@16M

        initrd   /initrd-2.6.18-164.el5.img

~                                                                               

~                                                                              

                                                                  "/boot/grub/grub.conf" 17L, 619C 

这个就是grub.conf文件的配置内容 

读取grub的配置文件

关于grub.conf的配置说明

Default=0          

默认情况下从第一个操作系统启动(0为第一个)

Timeout=5         

如果在5s不做任何选择,则按默认系统启动

Splashimage=(hd0,6)/grup/splash.xpm.gz 

系统启动时候的彩色图片

Hiddenmenu        

隐藏菜单

Title  Red hat enterprise linux Server (2.6.18-164.el5)   

描述

Root (hd0,0)        

boot分区所在的位置                

Kernel   /vmlinuz-2.6.18.168-el5  ro  root=LABEL=/1       rhgb  quiet

加载kernel                       以只读的方式挂载根分区

参数  rhgb:使用图形化启动     quiet:提示报错

Initrd  /initrd -2.6.9 -648 .el.img 

加载RAM DISK文件,他会加载所有系统启动时候需要的模块

 

第三阶段: 内核初始化

启动init进程,一切进程的“祖父”,读取/etc/inittab文件。

1.      /etc/inittab

初始化允许级别

系统初始化脚本

对应允许级别的脚本目录

关于init的级别

0                  关机

1                  单用户模式

2                  多用户模式

3                  字符界面

4                  保留给开发人员

5                  图形界面

6                  重启

S s single   备用的单用户模式

Emergency    紧急模式(绕过rc.sysinit.sulogin

2.      /etc/rc.d/rc.sysinit

(1)   /etc/fstab  检查并挂载其他的文件系统

(2)   启用交换分区

(3)   启用磁盘配额

(4)   检查并重新挂载根文件系统

(5)   等等,还有很多。

3.      /etc/rc.d/rc.X.d

X 代表运行级别

运行在/etc/rc.d/rc.X.d中定义的不同运行级别的服务初始化脚本

启动服务==è链接在/etc/init.d/

K:  kill    SStart 

4. /etc/rc.d/rc.local/ 

开机脚本 

 

关于linuxtroubleshooting试验

一.      破解linux系统管理员的密码

首先重启计算机,进入grub选择界面

 

我们已经进入了grub的选择界面了,在这个界面里,下面会有提示教你怎么做,在这里按“e”去编辑这个boot命令行。

 

现在我们进入了grub的编辑模式,我们选择第二个kernel /vmlinuz-2.6.18-164 ro root=LABEL=/ rhgb quiet 这行,按照下面的提示,在按“e”去编辑选中的哪行。

 

现在我们给内核传了一个“1”的参数,表示下次启动进入单用户模式

 

在安回车键,回到这个主界面。

 

已经看到我刚才做的操作,在内核后面已经多了一个“1”的参数。在按照下面的提示按“b”键,计算机将重启进入单用户模式

这个时候将进入单用户模式

 

我们已经入了当用户模式,可以在这里来破解密码。

 

然后reboot重启就ok了,我们根本就不需要知道以前的密码是多少,等到登陆界面,输入刚刚改变的密码就OK了。

 

二. 加密grub

linux系统的密码很简单,因此要加密grup,让用户不能够轻易的破解密码。

因为GRUB支持md5的密码保护。可以生成md5的加密

Grub-md5-crypt 来生成一个md5加密

[root@localhost ~]#

[root@localhost ~]# grub-md5-crypt

Password:

Retype password:

$1$H/acS/$1IO4fc3Kw75LMLZIH5Md8.

[root@localhost ~]#

然后将一个md5的值导入/boot/grub/grub.conf这个文件中

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda3

#          initrd /initrd-version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

password --md5  $1$H/acS/$1IO4fc3Kw75LMLZIH5Md8.

title Red Hat Enterprise Linux Server (2.6.18-164.el5)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet crashkernel=128M@16M

        initrd   /initrd-2.6.18-164.el5.img

~                                                                              

~                                                                               

                                                                  "/boot/grub/grub.conf" 17L, 619C 

我们已经在hiddenmenu下面加上了一行password –md5 xxxxxxxxxxxxxxxxxxx(md5值)

现在我们重启计算机,

再来尝试破解linux管理员的密码,

 

可以看到,现在我们进入了grub的选择界面,但是我们并不可以想刚才那样直接进去编辑grub,而是提示我们这里需输入密码,才可以编辑grub。这个密码就是我们刚才设置的,而且是经过MD5的加密,现在输入“p”,然后输入密码。

 

只有当我们输入密码以后才可以进入grub的编辑界面。

 

现在我们就可以和刚刚一样的去编辑grub了。通过对grub的加密,那么用户就不能够那么轻易的破解linux密码了。

 

三. 修复grub配置文件

我们知道/boot/grub/grub.conf这个文件是Grub的配置文件,这个文件是linux系统启动的核心文件,如果这个文件不小心被用户给损坏了,那么如何去修复grub的配置文件呢。

首先我把系统中的/boot/grub/grub.conf这个文件删除

[root@localhost ~]# cd /boot/grub/

[root@localhost grub]#

[root@localhost grub]# rm -rf grub.conf

[root@localhost grub]# ls

device.map         iso9660_stage1_5    reiserfs_stage1_5     ufs2_stage1_5

e2fs_stage1_5    jfs_stage1_5            splash.xpm.gz           vstafs_stage1_5

fat_stage1_5       menu.lst                    stage1                     xfs_stage1_5

ffs_stage1_5       minix_stage1_5       stage2

[root@localhost grub]#

现在我们重启计算机,

 

可以看到,由于系统中的grub.conf这个文件丢失了,所以重启计算机后,系统就会进入一个grub的编辑界面,在这个界面里面,我们只能够将grub.conf这个文件手动的全部敲出来,从而使系统可以正常工作。

 

我们已经手动敲出grub.conf文件,系统正常启动。但是,进入系统后。一定要把grub.conf文件在手动写出来。不然每次重启时,你都将手动敲出grub.conf。

 

.修复/boot分区下面所有文件

我们知道/boot分区下面有内核文件,RAM DISK文件,还有grub目录,这些文件都是系统启动时候的重要文件,如果这些文件全部都丢失,我们将如何去修复系统呢,如果是这样,我们只能够进入修复模式来修复系统。

首先我们将/boot分区下面的所有文件给删除

[root@localhost ~]#

[root@localhost ~]# rm -rf /boot/*

[root@localhost ~]# cd /boot/

[root@localhost boot]# ls

[root@localhost boot]#

已经删除了/boot下面的所有文件,只能够进入救援模式来修复系统了。

我们可以通过光盘来进入修复系统,当然也可以通过网络来引导进入修复模式,这里我从网络引导进入(由网络引导必须事先配置好服务器)

现在我将系统设置成网络引导,

 

然后输入linux rescue 进入救援模式,

 

然后依次选择,语言,键盘布局,

 

它提示我们系统的所有分区都已经被挂载到/mnt/sysimage里,

如果/etc/fstab文件丢失了,所有分区都不会被读取到。

现在我们就已经进入了救援模式,

首先我们使用df -h命令来查看一下分区的状况,

 

可以看到,这里面所有的东西都是有光盘提供的,并不是真实的系统,而真是的分区全部被挂载到/mnt/sysimage。而且我们的网络资源在修复模式下面也是可以被读取到的。

现在我们进入/mnt/sysimage

 

可以使用chroot /mnt/sysimage 来进入真实的系统,

(可以把由光盘引导进入的系统叫做假系统,通过chroot /mnt/sysimage这个命令得到的是真实的环境)

 

进入到的真系统了,/boot分区里面什么东西都没有了,被我们刚才全部给删除了。

现在我们就开始修复系统,

由于/boot分区中的文件被全部删除了,

首先要恢复内核文件,然后再去恢复grub文件,

因为在chroot环境中,读不到光盘中的文件。只能够退出chroot环境。回到的假系统中。

利用网络资源来修复系统,

 

现在我们将内核的软件包复制到/tmp目录下去,然后重新安装内核。

 

可以看到,重新安装完内核,/boot分区下面的内核文件和RAM DISK文件全部就都恢复回来了。

现在还要来恢复grub目录,我们需要重写grub。

 

OK,grub目录就恢复成功了,

现在我们需要做的事情就是恢复grub.conf文件,

 

现在/boot下面所有的文件都已经修复回来了,

现在在reboot重启系统,系统应该可以正常工作了。

 

五. 修复init脚本

刚才我们只是将/boot分区下面的所有东西给删除了,现在我们将/etc/inittab/etc/rc.d/rc.sysinit/etc/rc.d/rc.loacl给删除,然后将/etc/fstab文件给重名,这些文件都是系统在启动的时候需要读取到的脚本文件,如果将这些文件给删除,那么我们将如何修复系统呢,同样的,我们也只能够通过救援模式来修复系统。

[root@station20 ~]#

[root@station20 ~]# rm -rf /etc/inittab

[root@station20 ~]#

[root@station20 ~]# rm -rf /etc/rc.d/rc.sysinit

[root@station20 ~]#

[root@station20 ~]# rm -rf /etc/rc.d/rc.local

[root@station20 ~]#

[root@station20 ~]# mv /etc/fstab /etc/fstab.bak

[root@station20 ~]#

 

看到这个提示与上面不同,上面还可以读取到分区,而且还挂载在/mnt/sysimage下面。由于/etc/fstab文件丢失,将读取不到任何分区。所有要做的第一件事情,就是要恢复/etc/fstab文件,这个是最基本的。

由于/etc/fstab文件的丢失,我们不知道根分区在哪里,我们使用fdisk -l命令来查看一下分区情况,并用e2lable命令来找到根分区。

 

现在我们已经知道/dev/sda3就是根分区了,创建一个目录,并挂载根分区。

 

现在根分区已经挂载到/tmp/redhat目录下面了。进入这个目录,将/etc/fstab文件给该回来。

 

这个时候已经把/etc/fstab文件给改回来了,在重启看一下。当然系统肯定还是起不来的

再次进入救援模式,

 

这个时候,看到的界面已经和上面不一样了。系统的所有分区都已经被挂载到/mnt/sysimage下面去了,因为我们的/etc/fstab这个文件刚才被修复了。

下面在来恢复/etc/inittab文件,

首先要查询一下/etc/inittab这个文件是属于哪个包,然后在去安装这个包。从而恢复/etc/inittab这个文件。

 

我们现在到/etc/目录下面去看看,那几个文件是否被恢复回来了。

 

OK。这几个文件就全部都恢复回来了。

现在系统就应该可以正常工作了。

 

六.关于紧急模式

现在我们改变/etc/fstab这个文件里面的/home分区的卷标。

 
 

然后重启计算机,

系统将自动进入紧急模式,

在紧急模式下面,需要输入密码。

 
 

在紧急模式下面,系统将绕过/etc/rc.d/rc.sysinit这个脚本,在这个模式里,根文件系

统将是只读的。

 

可以看到,这个文件的确是只读,如果这样,我们就不能够将/home分区的卷标给改回来了。

我们可以使用mount -o remount,rw /  这条命令。

 

以可读可写的方式挂载了根文件系统后,根文件系统将可以被修改了。

 

OK,将/etc/fstab文件中的/home卷标改回来了。

系统就可以正常启动了。

 

关于linux系统的启动和troubleshooting试验就是这么多了。

阅读(666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~