资源描述
Suse Linux宕机解决方法
目录
Suse Linux宕机解决方法 1
一、 Root密码破解 2
1. Suse 10 SP4破解root密码 2
1) 进入单用户模式: 2
2) 将根(/)权限设置为“读写” 3
3) 修改root密码: 3
4) 将根(/)的权限改为只读: 4
5) 重启系统,以新密码进入系统 4
2. Suse 11 SP1破解root密码 4
1) 进入单用户模式: 4
2) 将根(/)权限设置为,读写,便于修改密码: 4
3) 修改root用户密码: 5
4) 将根(/)权限,设置为只读。 5
5) 重启系统,就可以使用新密码进入系统了。 5
二、 Grub问题 6
1. GRUB选项设置错误 6
2. Grub/menu.lst文件中“title”段被误删除 8
1) 使用“Failsafe”模式,进入系统,在menu.lst文件中添加“title”段内容 8
2) 可使用光盘启动系统,通过自动修复的方式修复此问题,具体操作步骤在此不再赘述。 10
3. 系统 GRUB 损坏 10
4. grub被破坏(包括:menu.lst,stage2...) 11
1) Suse 10 SP4修复方法 12
2) Suse 11 SP1修复方法: 21
3) Suse 11 SP2 Grub破坏后解决方法: 23
三、 MBR被破坏,不包括分区表 25
1. Suse 10 SP4 25
2. Suse 11 SP1 28
四、 硬盘问题 31
1. 硬盘扇区错乱 31
2. 系统硬盘分区表破坏 31
五、 /boot分区中的内容被完全清空了 包括:(kernel,initrd,grub.....) 35
六、 开机启动kernel 可用的grub参数: 44
七、 Linux系统启动流程: 47
一、 Root密码破解
由于密码保存不当或忘记密码等原因,导致Root密码丢失,需要破解Root密码,以下提供SLES 10 SP4和SLES 11 SP1破解方法。
1. Suse 10 SP4破解root密码
思路:
i. 重新启动机器,在出现grub引导界面后,在启动linux的选项里加上init=/bin/bash,通过给内核传递init=/bin/bash参数使得OS在运行login程序之前运行bash,出现命令行。
ii. 稍等片刻出现(none)#:命令行。
iii. 这时输入mount -n / -o remount,rw 表示将根文件系统重新mount为可读写,有了读写权限后就可以通过passwd命令修改密码了。
iv. 这时输入passwd命令就可以重置密码了
v. 修改完成后记得用mount -n / -o remount,ro将根文件系统置为原来的状态。
1) 进入单用户模式:
确定,进入单用户模式:
2) 将根(/)权限设置为“读写”
rw 表示将根文件系统重新mount为可读写,有了读写权限后就可以通过passwd命令修改密码。
3) 修改root密码:
passwd root
连续输入两遍密码后,密码就更改好了。
4) 将根(/)的权限改为只读:
mount -n / -o remount,ro
5) 重启系统,以新密码进入系统
改好后,重启系统,就可以使用新密码进入系统了。
2. Suse 11 SP1破解root密码
Suse 11 SP1和Suse 10 SP4方法相同,具体如下:
1) 进入单用户模式:
2) 将根(/)权限设置为,读写,便于修改密码:
mount -n / -o remount,rw
3) 修改root用户密码:
passwd root
输入两遍密码后,root用户的密码就被改了。
4) 将根(/)权限,设置为只读。
mount -n / -o remount,ro
5) 重启系统,就可以使用新密码进入系统了。
二、 Grub问题
1. GRUB选项设置错误
将内核文件的“vmlinuz”打成了“vmlinux”,导致系统无法找到内核的可执行文件。
下图是一个系统管理员不希望看到的控制台信息,“Error 15”显示系统无法找到menu.lst中指定的内核。
GRUB引导错误信息
将内核文件的“vmlinuz”打成了“vmlinux”,导致系统无法找到内核的可执行文件。
恢复思路:
进入Grub,修改menu.lst中错误配置,启动系统,修改menu.lst中错误,保存。
我们可以按任意键回到GRUB编辑界面,修改此错误,回车保存后按“b”键即可正常引导,进入系统后修改menu.lst文件中此处错误。
具体恢复步骤如下:
在此界面,按Esc键,进入字符界面
选中“SUSE linux Enterprise Server 10 SP4”,然后按键盘上的“e”
输入“e”编辑此项
通过向左的方向键,移动到vmlinux位置,做如下图更改
Enter确定,返回到字符启动界面
按“b”,启动系统。
启动后即可,正常进入系统。
进入系统后,修改/boot/grub/menu.lst文件,将vmlinux修改为vmlinuz,保存退出。
2. Grub/menu.lst文件中“title”段被误删除
可使用2种方式来恢复:
1) 使用“Failsafe”模式,进入系统,在menu.lst文件中添加“title”段内容
当,系统启动后会自动进入“GRUB>”命令行,为排除故障我们可以依次做如下操作:
因为没有软驱,所以此处报错,磁盘读取错误。
选择“Failsafe”模式,进入系统
重启系统,完成修复。
2) 可使用光盘启动系统,通过自动修复的方式修复此问题,具体操作步骤在此不再赘述。
3. 系统 GRUB 损坏
类似得我们可以来写零 Bootloader 来实现 GRUB 被破坏的结果:
[root@FCoE grub]# dd if=/dev/zero of=/dev/sda bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.0017583 s, 254 kB/s
重启后系统会因找不到 GRUB 而卡在“Booting from Hard Disk …”
挂载系统安装光盘然后选择进入 Rescue 模式,然后恢复 GRUB:
bash-4.1# chroot /mnt/sysimage
sh-4.1# grub
grub > root hd(0,0) #指定boot分区所在位置
grub > setup (hd0) #安装grub所需文件
grub > quit
图 5. 恢复 GRUB
重启主机后,系统可正常引导。
4. grub被破坏(包括:menu.lst,stage2...)
linux-02:~ # cd /boot/grub/
You have new mail in /var/mail/root
linux-02:/boot/grub # ls
device.map iso9660_stage1_5 reiserfs_stage1_5 vstafs_stage1_5
e2fs_stage1_5 jfs_stage1_5 stage1 xfs_stage1_5
fat_stage1_5 menu.lst stage2
ffs_stage1_5 minix_stage1_5 ufs2_stage1_5
linux-02:/boot/grub # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 9.9G 3.6G 5.8G 39% /
udev 1007M 120K 1007M 1% /dev
/dev/sda3 198M 15M 173M 8% /boot
/dev/hdc 3.1G 3.1G 0 100% /media/SUSE-Linux-Enterprise-Server_001
破坏grub
rm -rf /boot/grub/*
linux-02:/boot/grub # rm -rf /boot/grub/*
重启系统,Suse 10 SP4报错如下:
解决方法:
使用系统自动修复的方式来修复grub
1) Suse 10 SP4修复方法
设置系统从光盘启动,放入SUSE的cd1到光驱中
重启系统,开机出现以下画面,表明grub已经修复:
出现登陆界面:
输入系统的用户名和密码即可进入。
进入系统后,查看grub目录中的文件。
进入grub目录,确实是否存在menu.lst文件,该文件决定系统能否正常从硬盘引导。
至此为止,可确认grub已经修复。
2) Suse 11 SP1修复方法:
思路:使用光盘进入系统救援模式,在救援模式中,新建menu.lst文件即可。
进行破坏性试验:
删除/boot/grub下的所有内容
linux-sun:~ # ls /boot/grub/
default ffs_stage1_5 minix_stage1_5 vstafs_stage1_5
device.map iso9660_stage1_5 reiserfs_stage1_5 xfs_stage1_5
device.map.old jfs_stage1_5 stage1
e2fs_stage1_5 menu.lst stage2
fat_stage1_5 menu.lst.old ufs2_stage1_5
linux-sun:~ # rm -rf /boot/grub/*
linux-sun:~ # ls /boot/grub/
重启系统。
启动后,因为找不到grub里面的内容,提示如下:
挂载boot分区,所在的分区,便于进一步操作
重启系统
开机后出现此画面,说明grub已经被恢复出来
可正常进入系统。
3) Suse 11 SP2 Grub破坏后解决方法:
Suse 11 SP2实现Grub被删除后,恢复的方法:
方法一:
1. 使用系统盘的恢复模式里面的,专家工具模式来修复系统。
2. 使用专家工具中的“boot loader”来重装boot loader
3. 使用救援系统进入系统,挂载起来一起的boot分区,然后修改menu.lst文件。
4. 重启系统,完成修复。
方法二:
1. 使用系统盘的恢复模式里面的,专家工具模式来修复系统。
2. 使用专家工具中的“boot installed system”来启动系统。
3. 使用救援系统进入系统,挂载起来一起的boot分区,然后修改menu.lst文件。
4. 重启系统,完成修复。
相比较而言,第二种方法更快。
在Repair Tools中选择“Boot installed System ”
安装好后,就可以直接进入系统了。
输入用户名和密码进入系统。
进入系统后,先确认boot分区中是否有内核文件:
确认有内核文件后,编辑menu.lst文件
进入/boot/grub中新建menu.lst文件
编辑好后,重启系统,检验系统是否已经修复。
重启后,确认可以正常进入系统,表明Suse 11 SP1系统已经恢复。
三、 MBR被破坏,不包括分区表
1. Suse 10 SP4
dd if=/etc/passwd of=/dev/sda bs=446 count=1
reboot
放入cd1到光驱中
choose rescue system
enter grub
root (hd0,0)
setup (hd0)
quit
reboot
破坏系统的MBR:
linux-02:~ # if=/etc/passwd of=/dev/sda bs=446 count=1
重启系统:
reboot
MBR被破坏后的情形:
开机后,如下图:
整个界面只有一个光标图标,而且不闪烁。
解决方法:
放入cd1到光驱中,开机选择“救援系统”
进入系统后,找到boot分区所在的分区:
fdisk –l
由上图可知,boot所在分区为/dev/sda3.
进入grub进行系统恢复:
输入grub
输入以下命令:
root (hd0,2)
setup (hd0)
quit
reboot
重启后,界面如下:
可以正常进入系统,表明系统已经恢复。
2. Suse 11 SP1
和Suse 10 SP4方法一样即可恢复系统,具体如下:
破坏MBR分区:
linux-sun:~ # dd if=/etc/passwd of=/dev/sda bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 4.8907e-05 s, 9.1 MB/s
重启系统,看结果:
开就就一黑屏幕,光标不闪烁。
放CD1到光驱中,启动系统,选择救援模式:
进入系统后,确认boot所在分区:
fdisk –l
由此可知,boot所在分区为/dev/sda2,那么对应的grub中应该表示为:root (hd0,1)
进入grub恢复MBR:
重启系统,reboot:
开机后,界面如下:
表明MBR已经恢复。
四、 硬盘问题
1. 硬盘扇区错乱
在启动过程中最容易遇到的问题就是硬盘可能有坏道或扇区错乱(数据损坏)的情况,这种情况多由于异常断电、不正常关机导致。
此种问题发生,在系统启动的时候,屏幕会显示:
Press root password or ctrl+D:
此时输入root密码系统自动进入单用户模式,
输入“fsck -y /dev/hda6”
(fsck为文件系统检测修复命令,“-y”设定检测到错误自动修复,/dev/hda6为发生错误的硬盘分区,请依据具体情况更改此参数),系统修复完成后,用命令“reboot”重新启动即可。
分区在挂载情况下使用fsck可能导致数据损坏,建议将分区卸载后进行fsck操作。
2. 系统硬盘分区表破坏
经过测试Suse 11 SP1无法通过光盘中自带的修复模式来修复硬盘分区被破坏的情况。
生产环境中的 Linux 服务器可能会因为病毒或者意外断电而引起硬盘分区表被破坏,通常恢复硬盘分区表需要之前我们先备份其分区表的信息,一般我们使用 USB 外接设备来备份主机硬盘的分区表或将分区表信息备份到其他硬盘上。
查看当前分区表和备份硬盘信息:
挂在备份mgr硬盘:
通常我们通过备份硬盘的 MBR 来备份硬盘分区表:
dd if=/dev/sda of=/mnt/sda.mbr bs=512 count=1
现在我们来写零硬盘分区表来实现类似分区表被破坏的结果
dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446
查询硬盘 sda 上的分区信息,发现其已不包含任何分区:
当主机硬盘分区表丢失了之后,再次启动后 GRUB 会因找不到配置文件而进入命令行模式 :
重启机器,使用救援模式进入系统:
我们查询系统磁盘信息,发现硬盘设备 sda 没有包含任何分区。
挂载备份MBR的硬盘:
还原MBR:
dd if=/usb/sda.mbr of=/dev/sda bs=1 count=64 skip=446 seek=446
再次查询系统磁盘信息:
重启系统,确认系统能否正确引导。
经过测试确定,系统可以正确引导,至此恢复MBR被破坏问题。
五、 /boot分区中的内容被完全清空了 包括:(kernel,initrd,grub.....)
linux-02:~ # cd /boot/
linux-02:/boot # ls
System.map-2.6.16.60-0.85.1-smp message
backup_mbr symsets-2.6.16.60-0.85.1-smp.tar.gz
boot symtypes-2.6.16.60-0.85.1-smp.gz
config-2.6.16.60-0.85.1-smp symvers-2.6.16.60-0.85.1-smp.gz
grub vmlinux-2.6.16.60-0.85.1-smp.gz
initrd vmlinuz
initrd-2.6.16.60-0.85.1-smp vmlinuz-2.6.16.60-0.85.1-smp
lost+found
linux-02:/boot # rm -rf * #清空boot分区内容
linux-02:/boot # ls
重启reboot
linux-02:/boot # reboot
重启之后,出现以下画面:
Suse 10 SP4解决方法:
解决思路:使用光盘,自动修复模式,修复boot分区内容。
开机,从光盘启动,选择修复模式,自动修复模式是否可以直接修复boot分区内容,耗时大约10分钟。
接下来的语言选择,按照用户要求选择即可。
在此阶段,会安装系统kernel包,sysconfig包,yast2包和其他必备软件包。
选中“Finish”。
接下来,进入系统。
检测boot分区内容是否恢复:
由上图可见,boot分区内容已经恢复出来,至此问题解决。
选择“自定义修复”模式,所有选项全部选择,也可以修复boot分区内容被清空问题,但开机后还有部分选项需要配置,教为复杂,同时修复耗时较长。
因为修复过程和“自动修复”模式基本相同,在此就不在赘述。
Suse 11 SP1 boot分区内容被清空,该如何恢复?
通过系统自带的修复模式,包括,自动修复,自定义修复,专家工具,无法修复系统。
通过升级的方式也无法修复root分区被清空。
截至目前,还没有方法能够恢复Suse 11 SP1 boot分区内容被清空问题。
六、 开机启动kernel 可用的grub参数:
注意:所有引导参数都是大小写敏感的!
绝大部分的内核引导参数的格式如下(每个参数的值列表中最多只能有十项):
name[=value_1][,value_2]...[,value_10]
如果"name"不能被识别并且满足"name=value"的格式,那么则被解译为一个环境变量(比如"TERM=linux"或"BOOT_IMAGE=vmlinuz.bak"),否则将被原封不动的传递给 init 程序(比如"single")。
标记说明
并不是所有的参数都是永远可用的,只有在特定的模块存在并且相应的硬件也存在的情况下才可用。引导参数上面的方括号说明了其依赖关系,其中使用的标记解释如下:
参数
说明
ACPI
高级配置与电源接口
APIC
高级可编程中断控制器
HW
相应的硬件设备存在
IA-32
IA-32(i386)体系结构(安藤32位处理器)
X86-64
X86-64体系结构
IOSCHED
启用了多个IO调度器
LOOP
启用了Loopback设备
NET
启用了网络支持
PCI
PCI总线支持
PNP
即插即用支持
PS2
PS/2支持
SCSI
许多SCSI设备的参数在 Documentation/scsi/ 中描述
SMP
对称多处理器
USB
USB支持
USBHID
USB人机界面设备
VT
虚拟终端(Virtual terminal)
BUGS=
用于在特定的体系结构上解决某些CPU的bug
KNL
是一个内核启动参数
BOOT
是一个引导程序参数
标记为"BOOT"的参数实际上由引导程序使用,对内核本身没有直接的意义。没有特别的需求,请不要修改此类参数的语法,更多信息请阅读 Documentation/i386/boot.txt 文档。
控制台
这些参数控制着控制台或内核日志,在何处显示内核调试信息和错误信息。
参数
配置
说明
[KNL]
[IA-32,X86-64] earlyprintk=vga
在传统的控制台初始化之前,在VGA上显示内核日志信息。如果系统有硬件问题或是严重的软件故障,可以初步查看故障信息,等系统起来后,看boot.msg进一步排查。
initcall_debug
跟踪所有内核初始化过程中调用的函数。有助于诊断内核在启动过程中死在了那个函数上面。
loglevel
loglevel={0|1|2|3|4|5|6|7}
所有小于该数字的内核信息都将在控制台上显示出来。这个级别可以使用 klogd 程序或者修改 /proc/sys/kernel/printk 文件进行调整。取值范围是"0"(不显示任何信息)到"7"(显示所有级别的信息)。建议至少设为"4"。[提示]级别"7"要求编译时加入了调试支持。
[HW]
irqfixup
用于修复基本的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器。用于解决某些firmware缺陷。
irqpoll
用于修复更进一步的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器,并且对每个时钟中断都进行搜索。用于解决某些严重的firmware缺陷。
[SMP]
maxcpus=<NUM>
明确指定一个SMP内核能够使用的最大CPU数量。最好使用"maxcpus=0"而不是"maxcpus=1"来禁用SMP功能。
[KNL]
init=<full_path>
指定内核启动后运行的第一个程序的绝对路径。默认为"/sbin/init"。
S
以单用户模式运行init,默认是多用户模式。
[HW,ACPI,X86-64,i386]
acpi={force|off|ht|strict|noirq}
ACPI的总开关。force表示强制启用;off表示强制禁用;noirq表示不要将ACPI用于IRQ路由;ht表示只运行足够的ACPI来支持超线程;strict表示降低对不严格遵循ACPI规格的平台的兼容性。
acpi_sleep={s3_bios,s3_mode}
ACPI休眠选项。在从S3状态(挂起到内存)恢复的时候,硬件需要被正确的初始化。这对大多数硬件都不成问题,除了显卡之外,因为显卡是由BIOS初始化的,内核无法获取必要的恢复信息(仅存在于BIOS中,内核无法读取)。这个选项允许内核以两种方式尝试使用ACPI子系统来恢复显卡的状态。
[HW,ACPI]
acpi_use_timer_override
对于某些有毛病的 Nvidia NF5 主板需要使用此选项才能正常使用,不过此时 HPET 将失效。
[IA-32,X86-64]
acpi_pm_good
对于某些有毛病的 Nvidia NF5 主板需要使用此选项才能正常使用,不过此时 HPET 将失效。
[PCI]
pci=option[,option...]
off
不检测PCI总线,也就是关闭所有PCI设备。(使用该参数可能导致硬盘不能使用,在Vmware中测试结果。)
[i386,x86-64]
enable_timer_pin_1
disable_timer_pin_1
启用/禁用APIC定时器的PIN1,可以用于解决某些有bug的芯片组(特别是ATI芯片组)。内核将尽可能自动探测正确的值。
Suse 11 SP1 boot分区被清空后,不能使用安装光盘将boot目录拷贝到以前的boot分区所在目录,因为以前boot分区空间不够,不能容纳boot目录的内容,同时boot目录的内容并不是系统需要的内容。
七、 Linux系统启动流程:
对系统的流程先有一个大概的了解:开电源==>BIOS自检==>启动设备(磁盘orU盘or光驱)==>引导程序(lilo或grub)==>内核==>init程序(<==>rc.sysinit和rc)==>mingetty==>终端登录==>shell...
现在分为四个阶段来讲述:
第一阶段:BIOS启动引导阶段
实现硬件的初始化以及查找启动介质;
从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理器.
第二阶段:GRUB启动引导管理器
装载stage1;
装载stage2;
读取/boot/grub/menu.lst文件并显示启动菜单;
装载所选的kernel和initrd文件到内存中.
第三阶段:内核启动阶段
运行内核启动参数;
解压并挂载initrd文件系统,装载所需的驱动;
挂载根文件系统.
第四阶段:init初始化阶段
启动/sbin/init进程;
运行rc.sysinit脚本,设置系统环境,启动swap分区,检查和挂载文件系统;
读取/etc/inittab文件,运行在/etc/rc.d/rc<n>.d中定义的不同的运行级别服务初始化运行脚本;
打开字符终端1--6号控制台or图形管理的7号控制台.
第一阶段:系统开机上电后,主板BIOS运行POST(Power on self test)代码,检测系统外围关键设备(如:CPU,内存,显卡,I/O,键盘,鼠标等),硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失.
执行POST代码对系统外围关键设备检测通过后,系统启动自举程序, 根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的硬盘,光驱,网络服务器等).选择合适的启动器,通常是硬盘设备,BIOS会读取硬盘的第一个扇区(MBR,512字节),并执行其中的代码.实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容,并执行,BIOS的任务就完成了.此后将系统启动的控制权移交到MBR部分的代码.
第二阶段:BIOS通过下面两种方法之一来传递引导记录:
第一,将控制权传递给initial program loader(IPL)该程序安装在磁盘主引导记录(MBR)中
第二,将控制权传递给initial program loader(IPL),该程序安装在磁盘分区的启动引导扇区中
无论上面的哪种情况中,IPL都是MBR的一部分并应该存储于一个不大于446字节的磁盘空间中,因为MBR是一个不大于512字节的空间.因此IPL仅仅是GRUB的第一个部分(stage1),他的作用就是定位和装载GRUB的第二个部分(stage2);stage2对启动系统起关键作用,该部分提供了GRUB启动菜单和交互式的GRUB的shell.启动菜单在启动时候通过/boot/grub/menu.lst文件所定义的内容生成.在启动菜单中选择了kernel之后,GRUB会负责解压和装载kernel image并且将initrd装载到内存中.最后GRUB初始化kernel启动代码.完成之后后续的引导权被移交给kernel.
假设bootloader为grub,其引导系统的过程如下:
grub分为stage1(stage1.5)和stage2,stage1可以看成是IPL,而stage2则是起到了grub的关键作用,包括对特定文件系统的支持(ext2,ext3等),grub自己的shell,以及一些内部程序(如:kernel,initrd,root)等.
stage1:MBR(0头0道1扇区),前446字节是存放stage1,后面跟的是硬盘分区表信息,BIOS将stage1载入内存的0x7c00处并跳转执行;
stage1(/stage1/start.S)的任务很单纯,就是将硬盘0头0道2扇区的读入内存.0头0道2扇区的内容是源代码中的/stage2/start.S,编译后512字节,是stage2或stage1.5的入口.
是关于grub常用的几个指令对应的函数:
grub>root (hd0,0) --root指令为grub指定了一个根分区
grub>kernel /xen.gz-2.6.18-37.el5 --kernel指令将操作系统内核载入内存
grub>module /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2 --module指令加载指定的模块
grub>module /initrd-2.6.18-37.el5xen.img --指定initrd文件
grub>boot --boot 指令调用相应的启动函数启动OS内核
第三阶段:grub>boot指令后,系统启动的控制权移交给kernel.Kernel会立即初始化系统中各设备并做相关配置工作,其中包括CPU,I/O,存储设备等.关于设备驱动加载,有两部分:一部分设备驱动编入Linux Kernel中,Kernel会调用这部分驱动初始化相关设备,同时将日志输出到kernel message buffer,系统启动后dmesg可以查看到这部分输出信息.另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在 initrd(ramdisk)中.
initrd是一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统/时,会先访问initrd文件系统.将initrd中的内容打开来看, 会发现有bin,devetc,lib,procsys,sysroot,init等文件(包含目录).其中包含了一些设备的驱动模块,比如scsi ata等设备驱动模块,同时还有几个基本的可执行程序 insmod, modprobe, lvm,nash.主要目的是加载一些存储介质的驱动模块,如上面所说的scsi ideusb等设备驱动模块,初始化LVM,把/根文件系统以只读方式挂载.
initrd中的内容释放到rootfs中后,Kernel会执行其中的init文件,这里的init是一个脚本,由nash解释器执行.这个时候内核的控制权移交给init文件处理,我们查看init文件的内容,主要也是加载各种存储介质相关的设备驱动.
驱动加载后,会创建一个根设备,然后将根文件系统/以只读的方式挂载.这步结束后释放未使用内存并执行switchroot,转换到真正的根/上面去,同时运行/sbin/init程序.开启系统的1号进程,此后系统启动的控制权移交给 init 进程.关于switchroot是在nash中定义的程序.
实际上Linux Kernel仅是包含了基本的硬件驱动,在系统安装过程中会检测系统硬件信息,根据安装信息和系统硬件信息将一部分设备驱动写入 initrd .这样在以后启动系统时,一部分设备驱动就放在initrd中来加载.
第四阶段:init进程起来后,系统启动的控制权交给init进程./sbin/init是所有进程的父进程,当init起来后会先读取inittab文件,进行以下的工作:
a) 执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统基本算运行起来了,后面需要进行运行级别的确定及相应服务的启动;
b) 确定启动后进入的运行级别;
c) 执行/etc/rc.d/rc,该文件定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rcn.d(n=0~6)目录下,所有的文件均链接至/etc/init.d下的相应文件.
d) 有关key sequence的设置
e) 有关UPS的脚本定义
f) 启动虚拟终端/sbin/mingetty
g) 在运行级别5上运行X
这时呈现给用户的就是最终的登录界面.
/etc/rc.d/rc.sysint -- System Initialization Tasks 它的主要工作有:
配置selinux,
系统时钟,
内核参数(/etc/sysctl.conf),
hostname,
启用swap分区,
根文件系统的检查和二次挂载(读写),
激活RAID和LVM设备,
启用磁盘quota,
检查并挂载其它文件系统,
等等。
比较简单的说法:
启动第一步:加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息,设备启动顺序信息,硬盘信息,内存信息,时钟信息,PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了,
启动第二步:读取MBR
硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息,分区表信息.
系统找到BIOS所指定的硬盘的MBR(stage1)后,就会将其复制到0×7c00地址所在的物理内存中,其实被复制到物理内存的内容就是Boot Loader(stage2),而具体到你的电脑,那就是lilo或者grub了
展开阅读全文