Linux系统开机引导(2)

查看开机流程顺序
1.GRUB Loading Stage2 // BIOS 向GRUB传递控制权
2. 引导系统内核
3. 启动initrd 挂载虚拟根目录切换真实根目录 (switching root)
4. 加载rc.sysinit脚本(welcom to Red Hat Enterprise Linux Server)
5. 重新读写挂载文件系统
6. 进入相应的运行级别,rc.sysinit到此结束
7. 启动相应运行级别下的脚本(/etc/rc.d/rcn.d)

———————————————————————————————————————

系统启动过程排错

1.使用救援模式引导您的计算机 (使用救援磁盘或者安装盘)
在没有安装红帽企业版 Linux 的计算机中引导命令行 Linux 系统。这可让您使用运行 Linux 系统的程序和功能以便修改或者修复已经安装在您计算机中的系统。
修复模式下,把硬盘的/分区挂到了/mnt/sysimage 下,把/boot 挂到了/mnt/sysimage/boot 下。如果没有提示你 chroot /mnt/sysimage 那么就说明你不可以直接执行 chroot /mnt/sysimage 挂载/根目录,那么为啥出现这个提示,是因为我们的 fstab 这个文件损坏,需要恢复该文件后,才可以直接挂载/。
进入救援模式后无法挂载根文件系统(即chroot无效),此时 #which bash ; cp /usr/bin/bash /mnt/sysimage/bin/bash 即拷贝内存中的bash到虚拟根文件系统
救援模式下,如果还处于虚拟根环境下,就不要安装软件,安装到光盘中去了
涉及到引导程序和MBR的用救援模式

2.引导到单用户模式 : 做一些系统维护,修改密码等。(在内核命令行后加 1)
进入单人维护模式,而这时候/是只读的状态 mount -o remount,rw /

3.修改内核命令行参数排错
如:init进程相关配置文件被误删,系统停滞,无法完成初始化
避开/sbin/init 启动系统,如果重要的配置文件损坏,添加参数init=/bin/bash

4.直接在grub> 下输入命令进行修复,如grub.conf 文件丢失

Linux 在启动时可能出现的 trouble 的地方
第一阶段:MBR 里面的引导管理器(IPL, Initial Program Loader)grub 损坏。

第二阶段: stage1.5, stage2 损坏;找不到 grub.conf ; 找不到 kernel

第三阶段: 找不到 initramfs .img; fstab 分区挂载失败; 磁盘卷标不匹配或丢失

第四阶段: inittab 初始化脚本失败 ;图形界面加载失败;服务进程错误

常见症状
1. 不显示引导加载器初始屏幕或提示
grub 配置错误;引导区损坏;写入引导区之后,BIOS设置(例如磁盘寻址方案)被修改

2.无法加载任何内核区域或只加载部分内核,随后出现异常
内核镜像损坏;通过启动加载传递到内核的参数错误

3.已完全加载内核,但尝试挂载root文件系统并运行/sbin/init时,发生异常或故障
启动加载器配置错误;/sbin/init 损坏或 /etc/inittab配置错误;root文件系统已损坏或不可挂载

4.已完全加载内核,/etc/rc.d/rc.sysinit 已经启动但中断
缺少/bin/bash 或它已损坏;/etc/fstab 可能出现错误,对文件系统进行挂载和fsck操作时很明显;损坏的非root文件系统(因无法进行fsck操作)

5.运行级别错误(典型服务)
没有为指定运行级别配置有故障的服务所需的其他服务;特定于服务的配置错误

常见现象:
一、屏幕一片黑,无法看到 grub 界面 // MBR 里面的 grub 损坏
法一 进入修复模式
sh-4.1# chroot /mnt/sysimage
sh-4.1# grub
grub> root (hd0,0)
grub> setup (hd0)
注意:
1、此方法修复 grub 依赖于/boot/grub/grub.conf,如果 grub.conf 不存在,则需手工创建一个。创建方法请参考下文。
2、用此方法修复 grub 是把/boot/grub 下的 stage 镜像安装到硬盘上的特定位置上。所以使用此法修复 grub 仅限于是硬盘上的 stage1(在 MBR 里)以及 stage1.5,修复依赖于/boot/grub 下的 stage1, stage1.5, stage2 镜像。如果这几个镜像也遭到破坏, 则此法无效。
法二 进入修复模式
SH-4.1# chroot /mnt/sysimage
SH-4.1# grub-install /dev/sda
注意:
1、此方法修复 grub 依赖于/boot/grub/grub.conf,如果 grub.conf 不存在,则需手工创建一个。
2、此方法不依赖于 grub.conf,当/boot /grub 下文件都找到破坏,亦可用次命令修复。但不修复 grub.conf。

二、grub 警告:Error 15——stage1.5 报错,极有可能是stage1.5 加载 stage2 失败
grub-install /dev/sda 不一定能成功。 grub-install 的安装必须依赖 grub.conf 这个配置。如果这个配置不存在,grub 是 install 不了的。按以下方法对修复grub.conf
注意:
1、初始状态的 stage1 并不会去读取/boot/grub/下的 stage1.5 和 stage2。位于 MBR 的 stage1会去读取硬盘某个位置的 stage1.5,然后直接引导内核。
2、如果机器上的 grub 是经过修复的,比如用 grub-install 或者进入 grub 然后 setup 过。那么就不一样了。此时 stage 会去引导/boot/grub 下的 stage2。

三、Grub>: 直接进入 grub shell 界面——找不到 grub.conf 文件
法一
有些配置文件是 rpm 自带的。在安装 rpm 时会自动生成。但是,有些配置文件是根据你机器配置事实生成的。这种配置文件就不一定能靠重装相关的包来修复。自己手动重写。
修复:进入修复模式,参照下面所示根据实际环境编辑 grub.conf
sh-4.1# chroot /mnt/sysimage
sh-4.1# echo /boot/vmlinuz -2.6.32-220.el6.i686 >> /boot/grub/grub.conf
sh-4.1# echo /boot/initramfs -2.6.32-220.el6.i686.img >> /boo t/grub/grub.conf
法二
grub> root (hd0,0)
grub> kernel /vmvmlinuz-2.6.32-279.el6.i686 (补齐)ro root=/dev/sda2
grub> initrd /initramfs-2.6.32-279.el6.i686.img (补齐)
grub> boot
此时可启动系统,启动系统后修复内核配置文件

四、grub 警告:Error 15: File not found——找不到 kernel 或者 initrd.img // Stage1.5 报错。
首先确定 kernel 以及 initrmfs.img 文件是否存在 ——> 确定指定 kernel 所在磁盘分区的 root 参数是否写对 (在 grub 界面利用<TAB>自动补全功能检查/boot/grub/grub
.conf 配置是否正确。)
1. 如果发现内核丢失 进入修复模式,挂载安装盘,强制重装内核
进入修复模式
sh-4.1# chroot /mnt/sysimage
sh-4.1# mount /dev/cdrom /media
sh-4.1# cd /media/Packages
sh-4.1# rpm -ivh --force kernel-2.6.32-220.el6.i686.rpm
sh-4.1# reboot
2. 如果 initramfs.img 文件丢失,可以使用 mkinitrd 命令新建
进入修复模式
sh-4.1# chroot /mnt/sysimage
sh-4.1# mkinitrd /boot/initramfs -$(uname -r).img $(uname-r)

五、Kernel panic (原因很多)
Switchroot: mount failed: No such file or directory
Kernel panic – not syncing: Attempted to kill init! ——内核挂载 root 分区失败
常见的原因有root 分区遭到破坏,或者内核不能正确定位 root 分区。
1.如果是 root 分区遭到破坏,那么这个不在我们讨论的范围之内。
2. 如果是内核不能正确定位 root 分区,则我们可以尝试修复之。通常情况下内核如何定位 root 分区呢?一般是通过 grub 在引导起内核的时候,给内核指定 root 分区的位置。
检查 kernel 选项参数。核对 root 参数是否正确

六:/etc/fstab 文件错误或者丢失

文件丢失怎么办?
1.使用备份的文件还原
2.安装该文件的软件 #rpm -qf [文件绝对路径]
3.参照配置文件手写或导入(echo)

命令丢失且不能安装软件包怎么办?
#which rpm
#rpm -qf /bin/rpm
#cp /mnt/Packages/rpm-4.8.0-32.el6.i686.rpm /test
#rpm2cpio rpm-4.8.0-32.el6.i686.rpm > rpm.cpio
#file rpm.cpio
#cpio -id < rpm.cpio
#ls /test/bin

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14319.html