linux中的磁盘引导修复
- 2 磁盘引导修复
- 1. MBR
- 1.1 磁盘分区
- 1.2 清空磁盘数据
- 1.3 磁盘的引导修复
- 2 grub2文件引导恢复
- 2.1 模拟问题
- 2.2 手动引导修复
- 2.3 硬盘引导修复
- 3 内核加载
- 3.1 模拟实验环境
- 3.2 修复内核文件
- 4 系统初始化镜像
- 4.1 模拟实验环境
- 4.2 恢复方法
- 5 删除/boot/ 下的所有文件
- 5.1 模拟实验
- 5.2 恢复方法
- 6 忘记超级用户的密码
- 7 系统启动级别
- 7.1 模拟问题
- 7.2 恢复方法
2 磁盘引导修复
1. MBR
主引导记录(Master Boot Record,MBR)是装有Linux系统的硬盘的第一个扇区,也被称为主引导扇区,是计算机开机以后访问硬盘时所必须要读取的第一个扇区,将其开头的446字节内容特指为“主引导记录”
mbr=主引导记录=0磁道1扇区446
作用:记录grub2引导文件的位置
当mbr数据丢失系统会因为到不到其东分区而停止启动
1.1 磁盘分区
- 查看硬盘及分区信息:
fdisk -l
,带*的磁盘是引导(Boot)分区(vda1)
1.2 清空磁盘数据
- 使用指令dd覆盖磁盘的第一个扇区446个字节,损坏mbr文件
dd if=/dev/zero of=/dev/vda bs=446 count=1
- 重启之后虚拟机之后,由于磁盘引导阶段 mbr主引导记录损坏导致系无法正常启动
1.3 磁盘的引导修复
(1)关闭虚拟机
(2)添加光驱SATA CDROM
(3)将SATA CDROM1放在开启启动项的第一个
(4)启动虚拟机,进入Troubleshooting——>Rescue a Red Hat Enterprise Linux system,进入挽救模式
- 输入“1”继续
-
df
可以看到硬盘挂载在/mnt/sysimage
下
- 将系统挂载更改到根目录/boot下:
chroot /mnt/sysimage
- 重新安装grub到系统硬盘上:
grub2-install /dev/vda
- 指定SELinux的运行模式为关闭模式:
disable
,不需要重新写入安全上下文信息,重启 Linux 系统的速度会比较快
- 两次exit
(5)启动虚拟机之前,将VirtiO Disk1放在第一个
(6) 重新启动虚拟机,挽救模式只是临时使系统正常开启,正常进入系统之后需要再次对主引导记录进行恢复,至此磁盘的引导修复就完成了
2 grub2文件引导恢复
/boot/loader/entries/目录中存放了系统启动时指定加载的文件
如果此目录中的文件丢失,将导致系统无法正常启动
实验前用df查看linux服务器文件系统的磁盘空间占用情况
根目录的文件
2.1 模拟问题
rm -fr /boot/loader/entries/*
重启后出现下图界面
2.2 手动引导修复
set root='hd0,msdos1' ##第一个磁盘的第一个分区
##/dev/mapper/rhel-root是系统/分区的设备名称
linux16 /vmlinuz-4.18.0-193.el8.x86_64 ro root=/dev/mapper/rhel-root ##内核文件及/分区所在的设备名称
initrd16 /initramfs-4.18.0-193.el8.x86_64.img ##系统初始化文件
boot #启动系统
切换到磁盘启动之后可以正常进入系统
手动引导进入到系统中后,只是从暂时的修复了引导问题,此时查看 /boot/loader/entries/中的文件仍为空,若虚拟机重新启动之后,仍然会出现文件引导的问题,只有在/boot/loader/entries/生成新的引导文件之后才能彻底解决此问题
- 重新生成
/boot/loader/entries/
中的文件 -
uname -r
:查看内核版本
kernel-install add $(uname -r) /boot/vmlinuz-4.18.0-193.el8.x86_64
正常情况下,执行完此命令后自动生成/boot/loader/entries/
目录中文件,如是出现系统无法自动生成全部的引导文件,需要手动修改
若系统提示无法自动生成:
/boot/loader/entries/71e18fa292e14cbc921c721d1fc7dcd9-0-rescue.conf
此时将已经生成的.conf
文件作为xxxx-rescue.conf
的模板,并修改其中的内容
此时grub2文件引导恢复就完成了
2.3 硬盘引导修复
- 选择硬盘启动,进入到挽救模式
chroot /mnt/sysimage/ ##切换系统环境
kernel-install add $(uname -r) /boot/vmlinuz-$(uname -r)
进入系统后界面如下,此时只需手动在/boot/loader/entries/
目录中生成xxxx-rescue.conf
文件即可
3 内核加载
内核加载的作用:系统初始化硬件设备
3.1 模拟实验环境
- 删除内核文件
rm -fr /boot/vmlinuz-4.18.0-193.el8.x86_64
3.2 修复内核文件
- 重启系统后出现下图的界面
- 选择从硬盘启动系统,并进入挽救模式
chroot /mnt/sysimage ##切换环境
mount /dev/cdrom /media ##将硬盘挂载到 /media目录
cd /media/BaseOS/Packages
cp kernel-core-$(uname -r).rpm /mnt/ ##将内核的安装包复制到/mnt目录里面
cd /mnt
rpm2cpio kernel-core-$(uname -r).rpm | cpio -id #解压内核的安装包
cp /mnt/lib/modules/$(uname -r)/vmlinuz /boot/vmlinuz-$(uname -r) ##复制内核初始化文件到/boot下,并修改文件的名称
exit
exit
- 切换到磁盘启动系统之后能够正常进入
4 系统初始化镜像
4.1 模拟实验环境
- 删除系统中的初始化镜像文件
rm -rf initramfs-4.18.0-193.el8.x86_64.img
- 重启后出现下图界面
4.2 恢复方法
- 选择从硬盘启动,并进入到挽救模式
chroot /mnt/sysimage ## 切换系统环境
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) ## 恢复系统初始化镜像文件
执行两次:exit
选择从磁盘启动,能正常进入系统界面
5 删除/boot/ 下的所有文件
5.1 模拟实验
- 删除/boot下的所有文件:
rm -rf /boot/*
- 重启系统进入下图界面
5.2 恢复方法
设置系统从硬盘启动,并进入挽救模式
chroot /mnt/sysimage ##切换环境
mount /dev/cdrom /media ##将硬盘挂载到 /media目录
cd /media/BaseOS/Packages
cp kernel-core-$(uname -r).rpm /mnt/ ##将内核的安装包复制到/mnt目录里面
cd /mnt
rpm2cpio kernel-core-$(uname -r).rpm | cpio -id #解压内核的安装包
grub2-install /dev/vda ##获取磁盘引导mbr
rpm -ivh kernel-core-4.18.0-193.el8.x86_64.rpm --force
exit
exit
6 忘记超级用户的密码
如果忘记普通用户的登陆密码,可以以超级用户的身份重新设定普通用户的密码。但是如果超级用户的密码忘记了,就无法进入系统,此时我们可以通过以下的方法修改超级用户的密码。
- 修改超级用户密码
- 进入到系统启动界面,根据提示按 “ e ” 键进入编辑模式
- 初始化界面如下
- 删除内核加载选项中 “ ro ” ~ “ quite ” 之后的内容,更改
ro
为rw
,并添加rw rd.break
- 根据提示按
Ctrl + x
启动后,进入下面的界面
chroot /sysroot ## 切换到系统真正的根目录下
echo lee| passwd --stdin root ##修改root用户的密码
8.touch /.autorelabel ##当/.autorelabel文件存在selinux会重新初始化
只需等待一段时间重新进入系统,输入超级用户的账号和修改成功的密码即可
7 系统启动级别
7.1 模拟问题
systemctl set-default graphical.target ##进入系统后默认进入图形化界面
systemctl set-default multi-user.target ##进入系统后默认进入无图形化界面
系统启动后默认执行重启操作:systemctl set-default reboot
重启系统后,系统一直在开机界面跳转
7.2 恢复方法
(1)在开机选择界面按,“ e ” 进入到引导文件编辑模式
(2)初始化界面
(3)在内核加载选项最后加入启动级别5,Ctrl+x启动