/boot目录中,保存系统内核及开机引导文件,如果文件被删除,将导致系统无法启动,下面是误删/boot文件后的恢复步骤(本实验模拟/boot下的全部文件被删除)
1、删除/boot/下的全部文件
2、重启系统
3、此时开机后会直接进入grub命令行中
因为我们删除了/boot下的全部文件,包括内核和开机引导文件,所以在grub命令行中没办法修复,必须进入救援模式
1、从光盘启动系统
选择Rescue installed system,进入安全模式,回车
2、选择语言类型及键盘布局,保持默认即可,回车
3、询问是否启用网络,选择no,不启用网络(如果需要远程,则选择yes,并配置网络)
4、提示挂载到了/mnt/sysimages目录下
选择Continue,继续进行下一步,提示需切换磁盘根目录到/mnt//sysimages,回车选择OK
5、选择启动shell模式,回车,进入shell模式
1、切换磁盘根目录
# choot /mnt/sysimages
2、挂载光盘到/media
# mout /dev/sr0 /media
3、安装kernel软件包
# rpm -ivh /media/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force
注意:安装kernel软件时,会提示软件已经安装,所有我们应该使用--force选项,强制安装
4、切换到/boot目录下,查看文件
# cd /boot ; ls
可以看见,内核文件已经还原,但是还缺少grub引导文件
5、安装grub文件
# grub-install --root-directory=/ /dev/sda
--root-directory <<<指定root目录所在的父目录,即根目录
/dev/sda <<<指定在哪个设备上安装grub,因为我们的boot分区在/dev/sda中,所有安装在/dev/sda上
# ls /boot/grub/
可以看见grub文件已经基本安装完毕,但是还缺少grub.conf,该文件可以从其他的服务器导入或者手动编辑
手动编辑grub.cfg文件:
# vim /boot/grub/grub.conf
说明:root (hd0,0) <<<指的是内核所在的磁盘分区,(hd0,0)表示0号磁盘的第一个分区,即/dev/sda1,(hd0,1)表示第二个分区。
6、exit退出,并重新启动系统
# df -h
可以看见boot并没有成功挂载
# mount -a
重新尝试挂载/boot分区
分区挂载失败
# lsblk && blkid
可以看见lsblk分区存在,但是无法识别文件系统,所有可以初步判断是文件系统损坏导致boot分区无法挂载
执行命令,修复文件系统
# fsck -y /dev/sda1
查看文件系统是否修复成功
# blkid
可以看见/dev/sda1分区的文件系统已经成功被识别
# mount -a
# df -h
再次重新挂载,并查看分区是否挂载成功
可以看见分区已经成功挂载,boot分区文件系统成功修复,接下来查看boot分区的文件是否完整,如果boot分区的文件出现丢失,则可以按照第一部分的内容重新生成,进行修复。
进入救援模式,切换系统根目录,进入gurb
grub> root (hd0,0)
grub> setup (hd0)
grub> exit
重启系统
删除fstab文件和/boot/所有文件
重新启动,进入安全模式
选择1继续,系统会自动读取/etc/fstab文件中的内容,自动挂载分区
此时出现下图报错信息,提示没有任何的Linux分区,那么需要我们手动进行挂载,在此之前,也没办法切换根目录
按回车继续
进入shell之后,先判断分区是标准分区还是LVM逻辑卷
如上图所示,系统盘是基于LVM逻辑卷进行安装的,那么就可以判断一定会有一个基于标准分区的/boot/分区,且boot分区大小一般为200M~1G,则我们大致可以判读sda1是boot分区,sda2里面则是逻辑卷
挂载boot分区,发现里面内容为空,则说明该分区文件已经丢失,重新安装grub和内核文件(可以先尝试修复文件系统,看是否可以恢复)
# vgchange -ay <<<激活逻辑卷
# fdisk -l
可以看到两个逻辑卷,根据名称和大小判断,一个为交换分区,一个为根分区,尝试挂载/dev/mapper/centos-root目录到/mnt
# mount /dev/mapper/centos-root /mnt
# ls /mnt
可以看见上述文件,可以确定是根分区
切换根目录
# chroot /mnt
查看/etc/fstab(应该是不存在或为空)
# vim /etc/fstab <<<写入下面的内容
/dev/mapper/centos-root / xfs defaults 0 0
保存并退出
# exit
# exit
然后重新进入安全模式
可以看到,报错已经消失,分区已经成功挂载。
接下来我们需要按照上面的提示,切换根目录
# chroot /mnt/sysimage
查看boot目录,发现里面内容为空,我们需要重新生成boot目录下的文件
# ls /boot
挂载光盘镜像到/mnt
# mount /dev/sr0 /mnt
重新安装centos内核
# rpm -ivh /mnt/Packages/kernel-3.10.0-327.el7.x86_64.rpm --froce
注:不使用--force选项,会提示内核已经安装,安装不会进行
可以看到内核文件已经生成,但是缺少grub
安装grub
# grub2-install --root-directory / /dev/sda
# ls /boot/grub2
Grub安装完成,但是还缺少grub配置文件,生成grub的配置文件
# grub2-mkconfig -o /boot/grub2/grub.cfg
查看配置文件是否生成,退出,重启系统
# sync
# exit
# exit
现在系统应该可以正常启动了,但是我们在/etc/fstab中只写了挂载根目录的命令,所以接下来还需要找到分区,将分区挂载到对应的目录中,并写入fstab文件