系统排错
一、grub2引导错误
mbr的作用是记录/boot目录所在分区位置磁盘0磁道1扇区前446个字节,若不小心进行破坏那么就无法启动
若不小心执行了dd if=/dev/zero of=/dev/vda bs=446 count=1这个命令,并且重启了系统,那么如何恢复呢
可在虚拟机里执行dd的命令
实例
重启系统
对 mbr 破坏后重启机器会导致无法进行引导进而无法启动机器(如下:)
此时需要一个与系统相匹配的镜像文件来恢复
(1)真机执行virt-manager,选择grub2出现错误的虚拟机,并关闭虚拟机;
(2)点击灯泡,选择添加新虚拟硬盘,然后将设备类型修改为 IDE CDROM1,总线类型修改为IDE,并添加一个与系统相匹配的镜像文件,点击'完成‘
(3)点击Boot opations,将IDE CDROM 调到第一个,以便系统启动时第一个识别IIDE CDROM1;
(4)打开虚拟机,选择Troubleshooting------->Rescue a redhat Enterprice linux system
选择点击‘continue’然后会出现三次提醒
(5)进入真实环境:chroot /mnt/sysimage
(6)执行:grub2-install /dev/vda
(7)修改SELINUX配置文件为disabled状态,使系统启动时能够缩短启动时间
(8)两次exit重启系统
(9)关闭虚拟机
(10)点击灯泡,选择Boot opations将IDE CDROM1调到最后一个,使系统重启时第一个识别
(11)打开虚拟机
实例
从真机中执行virt-manager调出虚拟系统管理器
关闭虚拟机
添加新虚拟硬盘
将CDROM1调到boot的第一个,以便系统重启时,读取第一个CDROM硬盘;
选择troubleshooting的模式
系统补救
选择continue,可以挂载你的系统
三次提醒系统执行以下命令:
chroot /mnt/sysimage 使系统进入真实环境
执行以下命令进行恢复系统
chroot /mnt/sysimage/ 系统进入真实环境
grub2-install /dev/vda 磁盘恢复
vim /etc/sysconfig/selinux 编辑配置文件,缩短重启时间
编辑SELINUX配置文件的状态为关闭状态
重新启动系统
关闭虚拟机,将Disk1调到第一个,使系统开机时,从Disk1中读取
重新打开系统并打开图形界面,就可启动成功
二、若删除自动引导文件/boot/grub2/grub.cfg文件,那么如何恢复系统呢?
1、/boot/grub2/grub.cfg.此文件属于 Linux 系统开启的自动引导文件,通过此文可以自动完成对系统根目录的挂载,linux 内核的初始化和初始化程序的引导,此文件若是缺失,系统则无法自动开启,需要进行手动引导。
2、/boot/grub2/grub.cfg文件缺失,没有重启:grub2-mkconfig > /boot/grub2/grub.cfg
/boot/grub2/grub.cfg文件缺失,重启后:
(1)设定root用户读取第一个磁盘的第一个分区 : set root='hd0,msdos1'
(2)手动进行内核引导 ,将根目录只读挂在到/dev/vda1:linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1
(3)生成自动引导初始化程序 :initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
(4)启动机器
(5)打开虚拟机,在虚拟机里进行恢复:grub2-mkconfig > /boot/grub2/grub.cfg
实例(1)删除/boot/grub2/grub.cfg文件,在系统不重启的情况下恢复
删除/boot/grub2/grub.cfg
执行下面命令恢复系统
重新启动
此时可以看到登录页面
实例(2)删除grub.cfg 文件后没有恢复,不小心重新启动
删除/boot/grub2/grub.cfg文件
执行以下操作进行手动引导
1.set root=’hd0,msdos1’
2.linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1
3.initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
4.boot
开机后生成自动引导文件
三、不小心删除initramfs-3.10.0-123.el7.x86_64时,怎么恢复
若是系统的 initramfs-3.10.0-327.el7.x86_64.img 缺失,系统因为无法进行下一步的开机引导而不能启动。
(1)关闭虚拟机,点击灯泡,将Boot opations中的IDE CDROM1调整到第一个
(2)选择挽救模式Troubleshooting--->Rescue a redhat Enterprice linux system------>contine--->ok---->ok
(3) 进入真实环境:chroot /mnt/sysimage
(4)在/boot目录下建立一个映像文件:mkinitrd /boot/initramfs-3.10.0-123.el7.x86_64.img 3.10.0-123.el7.x86_64
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 等同于 mkinitrd /boot/initramfs-3.10.0-123.el7.x86_64.img 3.10.0-123.el7.x86_64
mkinitrd 指定映像文件名称和路径 指定所依据的内核版本信息
mkinitrd 可建立映像文件,以供linux开机时载入ramdis;根据内核版本和指定参数生成映像文件
显示内核版本uname -r
在bash中,$()与` `(反引号)都是用来做命令替换的,$()并不是所有的unix系统都支持这种方式,但反引号肯定支持。
报错信息:cat:write error:Broken pipe
pro里面的东西在这个环境下(IDE CDROM1)没有,所以出现报错信息;
(5)两次exit重新启动系统
(6)选择Boot opations将IDE CDROM1调整到最后一个
(7)打开虚拟机
实例1:initramfs-3.10.0-123.el7.x86_64.img文件缺失,没有重启系统
删除initramfs
重新恢复
查看/boot分区下的文件,是否恢复
出现登录界面
实例(2):initramfs-3.10.0-123.el7.x86_64.img文件缺失,重启系统
删除boot分区的initramfs-3.10文件
查看boot分区里的initramfs-3.10是否删除
将CDROM磁盘调整到Boot分区的第一个
进入挽救(troubleshooting)模式
选择拯救linux系统
三次报出执行以下命令:chroot /mnt/sysimage
执行以下命令恢复系统
(1)进入真实环境:chroot /mnt/sysimage
(2)在/boot目录下建立一个映像文件:mkinitrd /boot/initramfs-3.10.0-123.el7.x86_64.img 3.10.0-123.el7.x86_64
mkinitrd 的使用方法:
mkinitrd 指定映像文件名称和路径 指定所依据的内核版本信息
mkinitrd 可建立映像文件,以供linux开机时载入ramdisk;
根据内核版本和指定参数生成映像文件
报错信息:cat:write error:Broken pipe
pro里面的东西在这个环境下(IDE CDROM1)没有,所以出现报错信息;
(3)第一个 exit:退出真实环境
第二个exit重启系统
关闭虚拟机,然后将IDE CDROM1调到第一个
四、删除vmlinuz-3.10.0-123.el7.x86_64后,如何恢复?
若内核程序 /boot/vmlinuz-3.10.0-123.e17.x86_64 缺失,则系统会因为无法加载内核而无法启动。可以通过外加光盘,通过 Linux 补救程序为系统重新安装符合系统版本的内核程序
模拟缺失
(1)打开虚拟机输入以下命令:rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
(2)重新启动系统:reboot
(3)内核程序启动系统,此时就会出现以下界面
恢复
(1)添加新虚拟机的硬盘,选择与系统相匹配镜像文件,并将设备类型修改为IDE CDROM 1,总线类型修改为IDE;
(2)关闭虚拟机,点击灯泡,选择Boot opations将IDE CDROM调整到第一个
(3)进入挽救模式Troubleshooting--->Rescue a redhat Enterprise linux system;---->continue--->ok---->ok
(4)切换到Packages目录下:cd /run/install/repo/Packages
(5)复制内核文件到真实环境的真实目录下: cp kernel-3.10.0-123.el7.x86_64.rpm /mnt/sysimage/mnt
(6)切换到真实环境:chroot /mnt/sysimage
(7)rpm2cpio 命令用于将rpm软件包转换为cpio格式的文件:rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id
(8)复制vmlinuz-3.10安装到boot分区:cp boot/vmlinuz-3.10.0-123.el7.x86_64 /boot/
第一个’boot/’是内核安装包内的东西,第二个/boot/是真实主机的根目录,将内核安装包内的对应内核程序移动到/boot/下,使机器可以正常运行
(9)两次exit进行重新启动
(10)关闭虚拟机,点击灯泡,选择Boot opations将IDE CDROM调整到最后一个
(11)打开虚拟机
实例:从真机当中启动虚拟机管理器 :virt-manager
关闭虚拟机
点击灯泡,添加新虚拟机硬盘
(1)添加与系统匹配镜像文件
(2)修改设备类型为:CDROM设备
(3)修改总线类型为:IDE
(4)修改缓存模式为:none
(5)修改存储格式为:raw
调整Boot磁盘引导设备:将IDE CDROM1调整到Boot分区的第一个,以便系统重启时读取磁盘CDROM1
点击打开虚拟机的图标和显示虚拟机的图标,此时选择进入挽救(Troubleshooting)模式
在挽救模式下选择拯救linux系统
三次提醒执行以下命令(chroot /mnt/sysimage)进入真实环境
进入以下界面执行以下命令来恢复系统
(1)切换到Packages目录下:cd /run/install/repo/Packages
(2)复制内核安装包到/mnt/sysimage/mnt/ 下
cp kernel-3.10.0-123.el7.x86_64.rpm /mnt/sysimage/mnt
/mnt/sysimage (真实环境)/mnt(真实目录)
(3)切换到真实环境:chroot /mnt/sysimage
(4)rpm2cpio 命令用于将rpm软件包转换为cpio格式的文件
rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id
(5)复制vmlinuz-3.10安装到boot分区:cp boot/vmlinuz-3.10.0-123.el7.x86_64 /boot/
(6)第一个exit: 退出真实环境
第二的exit:重新启动系统
关闭虚拟机,点击灯泡,将IDE CDROM1调整到boot分区的第一个,以便系统重启时,读取Disk 1磁盘
点击打开虚拟机图标和显示虚拟机的图标,打开登录界面
五、bash 缺失的错误,如何恢复
(1)添加新虚拟机的硬盘,选择与系统相匹配镜像文件,并将设备类型修改为IDE CDROM 1,总线类型修改为IDE;
(2)关闭虚拟机,点击灯泡,选择Boot opations将IDE CDROM调整到第一个
(3)进入挽救模式Troubleshooting--->Rescue a redhat Enterprise linux system;---->continue--->ok---->ok
(4)进去真实环境:chroot /mnt/sysimage
(5)复制bash到真实环境的/bin目录下:cp /bin/bash /mnt/sysimage/bin
(6)重新启动
(10)关闭虚拟机,点击灯泡,选择Boot opations将IDE CDROM调整到最后一个
(11)打开虚拟机实例
将IDE CDROM1调整到Boot分区,以便系统重启时从IDE CDROM1开始读取
进去挽救(Troubleshooting)模式
进去挽救linux系统模式下
三次提醒进入系统后执行命令:chroot /mnt/sysimage
进入以下界面执行以下界面
进去真实环境:chroot /mnt/sysimage
复制bash到真实环境的/bin目录下:cp /bin/bash /mnt/sysimage/bin
关闭虚拟机,将Disk1调整到设备引导程序的第一个,以便系统重启时从Disk1开始读取
六、修改密码
将linux16 这一行后面的信息删掉直至到ro,并将ro(只读模式) 修改为rw(可读可写模式),并添加rd.break
然后按ctrl+X开始执行
切换到跟目录下:chroot sysroot/
修改密码:passwd (修改的是root的密码)第一个exit:退出跟目录
第二个exit:重新启动