上篇文章介绍了Linux系统启动,本文主要介绍常见的启动故障即修复思路
Linux Rescue(救援)模式事实上就是一个带有shell的独立的Linux环境,当系统由于软件故障而无法启动时,我们可以进入该环境对系统进行修复
我们只需要为系统提供grub配置以及内核,Linux即可启动,在发行版的光盘中有isolinux
目录,提供了这些文件
[root@localhost scripts]# mount /dev/cdrom /media/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost scripts]# ls /media/cdrom/isolinux/
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vesamenu.c32
boot.msg initrd.img isolinux.cfg splash.png upgrade.img vmlinuz
同时,我们可以通过发行版光盘或ISO文件进入Rescue模式,如下图
按下当前选中条目中的反色字母对应的按键,亦可进入相应模式
此外,也可以在键盘敲Tab后,在启动参数后加rescue
参数,而后Enter启动即可
进入Rescue模式后,系统将检测已安装的Linux,则将其挂载至/mnt/sysimage
(即原系统/
的访问路径)
上图为CentOS 7的Rescue模式,CentOS 6在此之前可能需要选择语言、键盘、是否启动网络等
此处选择继续,将原系统的根文件系统挂载至/mnt/sysimage
若探测到已安装的Linux,此处将提示已挂载,并且用户可使用chroot
将根切换至原系统的根,对于CentOS 7,确定后即可进入Shell环境:
对于CentOS 6,选择shell后确定即看,如下:
我们结局Linux系统问题的一般思路为
另外,在处理之前,一定记得要备份原文件,并且应尽可能借助于工具,毕竟手动操作的出错概率要大于代码(除了脸黑这种情况下的工具都有bug)
在列举常见故障之前,此处再次回顾一下Linux启动流程:
详细介绍请至Linux系统启动查看,以下相关内容若非特别说明,在该文中都有介绍
另外,解决一个问题的方式又很多,这里只介绍最易实现目的的,如重置管理员密码,可以进入单用户模式修改,可以将init程序直接指定一个一个shell,或进入Rescue模式修改,甚至此时可以修改/etc/shadow
文件第一行(该行为root账户密码信息)1
这其实不算是一个故障,但是依然会影响使用,此问题我们只需要进入单用户模式,将root用户的密码修改即可
init 1
或single
:完成后Enter,而后敲B启动系统,进入到单用户模式,而后可直接使用passwd
命令来修改管理员密码
rd.break
,来在根文件系统挂载之前,中断系统引导过程,步骤如下在Grub 2主菜单中选择需要的启动项后,敲E编辑之,找到linux16,在行末添加rd.break
需要说明的是,若是在虚拟机环境,有时需要再添加参数console=tty0
,完成后敲Ctrl+X引导系统
系统启动后,真正的根文件系统被挂在之/sysroot
,此时需要先以读写方式重新挂载之(mount -o remount,rw /sysroot
),而后使用chroot
切换根:
再使用passwd
修改密码即可
另外,若系统启动了SELinux,则需要在根下创建文件.autorelabel
,可使用touch /.autorelabel
实现,系统开机会去找/.autorelabel
文件,若发现有此文件则会重新写入SELinux 的相关配置, 因此系统在重新开机的流程中共会启动两次,原因为第一次会重新写入SELinux配置,第二次才是正常开机
同时,在CentOS 7中依然保留了类似init=/bin/bash
的形式,但应该优先选择上一中方式
MBR为引导设备的前446字节,其后64字节为FAT,在其后的2字节为Magic Number,正常情况下内容为0x55AA
:
[root@localhost ~]# hexdump -Cn 512 /dev/sda
00000000 eb 48 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.H..............|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 03 02 |.........|...t..|
00000040 80 00 00 80 fc 49 08 00 00 08 fa 90 90 f6 c2 80 |.....I..........|
00000050 75 02 b2 80 ea 59 7c 00 00 31 c0 8e d8 8e d0 bc |u....Y|..1......|
00000060 00 20 fb a0 40 7c 3c ff 74 02 88 c2 52 f6 c2 80 |. ..@|<.t...R...|
00000070 74 54 b4 41 bb aa 55 cd 13 5a 52 72 49 81 fb 55 |tT.A..U..ZRrI..U|
00000080 aa 75 43 a0 41 7c 84 c0 75 05 83 e1 01 74 37 66 |.uC.A|..u....t7f|
00000090 8b 4c 10 be 05 7c c6 44 ff 01 66 8b 1e 44 7c c7 |.L...|.D..f..D|.|
000000a0 04 10 00 c7 44 02 01 00 66 89 5c 08 c7 44 06 00 |....D...f.\..D..|
000000b0 70 66 31 c0 89 44 04 66 89 44 0c b4 42 cd 13 72 |pf1..D.f.D..B..r|
000000c0 05 bb 00 70 eb 7d b4 08 cd 13 73 0a f6 c2 80 0f |...p.}....s.....|
000000d0 84 f0 00 e9 8d 00 be 05 7c c6 44 ff 00 66 31 c0 |........|.D..f1.|
000000e0 88 f0 40 66 89 44 04 31 d2 88 ca c1 e2 02 88 e8 |[email protected]........|
000000f0 88 f4 40 89 44 08 31 c0 88 d0 c0 e8 02 66 89 04 |[email protected]..|
00000100 66 a1 44 7c 66 31 d2 66 f7 34 88 54 0a 66 31 d2 |f.D|f1.f.4.T.f1.|
00000110 66 f7 74 04 88 54 0b 89 44 0c 3b 44 08 7d 3c 8a |f.t..T..D.;D.}<.|
00000120 54 0d c0 e2 06 8a 4c 0a fe c1 08 d1 8a 6c 0c 5a |T.....L......l.Z|
00000130 8a 74 0b bb 00 70 8e c3 31 db b8 01 02 cd 13 72 |.t...p..1......r|
00000140 2a 8c c3 8e 06 48 7c 60 1e b9 00 01 8e db 31 f6 |*....H|`......1.|
00000150 31 ff fc f3 a5 1f 61 ff 26 42 7c be 7f 7d e8 40 |1.....a.&B|..}.@|
00000160 00 eb 0e be 84 7d e8 38 00 eb 06 be 8e 7d e8 30 |.....}.8.....}.0|
00000170 00 be 93 7d e8 2a 00 eb fe 47 52 55 42 20 00 47 |...}.*...GRUB .G|
00000180 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 65 |eom.Hard Disk.Re|
00000190 61 64 00 20 45 72 72 6f 72 00 bb 01 00 b4 0e cd |ad. Error.......|
000001a0 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 00 00 00 |..<.u...........|
000001b0 00 00 00 00 00 00 00 00 fe f2 07 00 00 00 80 20 |............... |
000001c0 21 00 83 dd 1e 3f 00 08 00 00 00 a0 0f 00 00 dd |!....?..........|
000001d0 1f 3f 8e fe ff ff 00 a8 0f 00 00 58 f0 0e 00 00 |.?.........X....|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
若MBR部分数据损坏,则计算机固件不认为该设备具有引导能力,此时将会按照CMOS中保存的引导顺序配置寻找下一引导设备,若没有找到可引导设备,则会提示未找到操作系统,如
此时可进入Rescue模式,若此前已经备份过,则可在此还原,如dd if=/mnt/sysimage/root/backup/mbr of=/dev/sda bs=512 count=1
另外建议使用sync
将修改同步至硬盘
若此前没有备份,可通过grub-install
命令进行修复,该命令可重新安装grub,包括Stage 1、Stage 1_5、Stage 2,MBR仅仅是Stage 1
具体步骤为
chroot /mnt/sysimage/
grub-install DEVICE
sync
exit
操作方式上文已有说明,此处不再演示
另外,若该故障发生后,用户依然在使用系统,也可通过grub
命令,在其交互式模式下修复:
[root@localhost ~]# grub
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub> quit
quit
首选需要指定grub的根分区,这里指定为hd0,0
,即第一个硬盘的第一个分区,也就是/boot/
挂载的分区,grub的后续阶段所需文件将放置此处
而后将安装grub,指定安装的目标硬盘即可,因为第一阶段是全局的,不属于任何分区,故这里指定为hd0
此外,我们还可以看到,Stage 1_5使用了27个扇区
需要说明的是,通过grub的交互式界面修复时,依赖于/boot/grub
下的相关文件,若这些文件损坏,则依然无法修复,故推荐使用grub-install
grub 2修复
grub配置文件为/etc/grub.conf
,该文件指向/boot/grub/grub.conf
,若该文件丢失,系统启动后将显示grub>
提示符,如下图:
此时可通过Rescue模式启动,或在grub提示符下为grub指定启动参数,启动后还原已备份的配置文件,或手动编写即可
由于在Rescue模式下,可以看到更新系统信息,故建议在Rescue模式下进行修复
注意,示例中已经执行过chroot /mnt/sysimage
若此前没有备份,可通过查看/etc/fstab
等相关文件获取到启动所需信息后,手动编写grub配置即可,配置文件格式Linux系统启动一文有介绍
/boot/
目录下文件丢失后,由于MBR没有损坏,系统将依然通过此前设备启动,后续步骤无法进行:
该错误可通过强制重新kernel与grub解决:通过Rescue模式,重新安装kernel与grub:
而后为grub提供配置
启动后即可方便地为grub提供配置文件
通过该方式,内核文件、initramfs文件等都可进行修复
在修复方式上grub 2与grub 0.97稍有差异,此处举两例说明
该错误可在Rescue模式下重新安装grub 2,而后使用命令生成配置文件:
可直接在Rescue模式下通过grub2-mkconfig
命令生成配置文件,或在grub提示符下指定启动参数,正常启动后生成亦可
错误总是多种多样的,如将默认的运行级别设置为0
或6
,计算机总是无法开启,或循环重启;再如/etc/rc.d/init.d
文件丢失、服务错误导致的无法启动、/etc/fstab
文件内容错误等,都可通过Rescue模式进行修复
详见 https://blog.csdn.net/xiyangyang410/article/details/85090293#etcshadow_1207 ↩︎