Linux系统排错
1.硬盘引导阶段
mbr主引导记录的恢复
hostnamectl 查看当前系统所用的版本号
fdisk -l 查看mbr引导记录存放位置。有*标记的是启动盘
模拟问题:
dd if=/dev/zero of=/dev/vda bs=512 count=1
reboot 发现无法重启
解决:使用光盘启动,进入援救模式(rescue)
#1.首先关闭虚拟机
#2.然后添加光盘镜像
#3.设置以光驱启动
#4.开启虚拟机,选择Troubleshooting
选择Rescue a Red Hat Enterprise Linux system
然后跟着提示选择Continue,OK 进入修复模式
df 查看分区挂载情况
chroot /mnt/sysimage 切换系统真实shell以超户身份操作
grub2-install 启动分区所在硬盘
grub2-install /dev/vda
exit*2 系统将自动重启(还是以刚刚选择的光驱启动)
关闭虚拟机,选择Disk优先
开启系统成功修复
2.文件引导阶段
#1) 引导文件丢失
引导文件在/boot/grub2/grub.cfg
模拟问题:rm -fr /boot/grub2/grub.cfg
当系统没有重新启动时
grub2-mkconfig > /boot/grub2/grub.cfg 恢复丢失的grub.cfg文件
当系统重新启动时
grub > set root='hd0,msdos1'
此位置是不固定的,位置指定/boot所在分区;hd0指的是系统在/dev/vda;msdos1指的是/dev/vda
grub > linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=/dev/vda1
把设备只读挂载到根分区,设置内核文件
grub > initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
系统初始化镜像,设置initrd文件
grub > boot 重启系统
grub2-mkconfig > /boot/grub2/grub.cfg 恢复grub.cfg文件
#2)内核文件丢失
内核文件存放在/boot
模拟问题: rm -fr /boot/vmlinuz-3.10.0-123el7.x86_64
重启虚拟机
重复之前操作,以光驱启动,进入rescue模式
chroot /mnt/sysimage 进入真实系统shell
mkdir /rhel7 创建一个用于挂载镜像的目录
mount /dev/sr0 /rhel7 把镜像挂载到刚刚创建的目录上
cd /rhel7/Packages 进入到镜像内的Packages目录
cp kernel-3.10.0-123.el7.x86_64.rpm /mnt
把镜像内的rpm文件复制到/mnt,因为镜像是只读的
cd /mnt
rpm2cpio kernel-3.10.0-123.e17.x86_64.rpm | cpio -id
进入到/mnt,进行拆包
cd boot/ 拆包后,进入文件内的boot目录
cp vmlinuz-3.10.0-123.el7.x86_64 /boot 将期内的内核文件复制到/boot
exit*2
修改以Disk优先启动,成功恢复
#3)初始化镜像文件丢失
初始化镜像文件放在/boot/
模拟问题:rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
当系统没有重启时:
mkinitrd /boot/initramfs-3.10.0-123.el7.x86_64.img 3.10.0-123.el7.x86_64
当系统重启时:
继续以光盘重新启动虚拟机
chroot /mnt/sysimage 进入真是系统环境shell
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
恢复镜像(第二种命令方式,和第一种一样的效果)
恢复后俩下exit退出
#4)当/boot分区被删掉
重启后的状态
关闭虚拟机以光盘启动,进入rescue
chroot /mnt/sysimage
mkdir /boot 建立一个/boot目录
cd /boot
grub2-install /dev/vda mbr主引导记录的恢复
mount /dev/sr0 /mnt
rpm -ivh /mnt/Packages/kernel-3.10.0-el7.x86_64.rpm -- force 重新安装内核等
grub2-mkconfig > /boot/grub2/grub.cfg 引导文件恢复
exit*2
重新以Dsik优先启动
3.当开机级别被篡改
模拟问题:
systemctl set-default reboot.target 篡改开机启动级别
系统将无限重启
解决:
1.开机按上下键停止读秒
2.按e编辑
3.选择内核启动行
linux16 /vmlinuz-xxxxxx ro xxxxx 改为:
linux16 /vmlinuz-xxxxxx rw rd.break
4.ctrl+x
5.chroot /sysroot (以超户身份进去当前系统shell,此时还能修改超户密码)
6.rm -fr /etc/systemd/system/default.target
7.ln -s /lib/systemd/system/graphical,target /etc/systemd/system/default.target
8.exit*2
自动重启系统,恢复完成