Linux系统排错及修复系统
系统引导过程概述: 1. BIOS(Basic Input Output System):直译过来后中文名称就是"基本输入输出系统"。它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。2. MBR(Master Boot Record):主引导记
系统引导过程概述:
1. BIOS(Basic Input Output System):直译过来后中文名称就是"基本输入输出系统"。它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。
2. MBR(Master Boot Record):主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。
3. Kernel:内核,是Linux系统最主要的程序。
4. GRUB(Grand Unified Bootloader):多系统启动程序。
一、mbr主引导分区损坏(grub磁盘引导阶段)
1.模拟mbr引导分区数据(程序)丢失
fdisk -l ### *在哪,boot引导程序就在哪个分区
dd if=/dev/zero of=/dev/vda bs=446 count=1 ##截断,破坏引导程序
reboot起不了
2.解决
1)virt-manager 中关闭虚拟机,(小灯泡)此时硬盘启动系统失败,选择使用镜像启动系统;(小电脑)确认选择
2)开启时,来到了安装系统界面,选择第三个,再选择第二个;进入挽救模式
3)chroot /mnt/sysimage
4)grub2-install /dev/vda ###安装主引导分区的程序
5)exit(两次)
6)关闭状态下,重新选择硬件方法启动
二、grub引导文件损坏
1.模拟
rm -fr /boot/grub2/grub.cfg
reboot后系统无引导,起不了
[root@foundation12 ~]# df ###看/boot分区是否独立出来
/dev/sda3 120529408 30757384 89772024 26% /
/dev/sda1 508588 149440 359148 30% /boot
...
2.解决
方法一:若没有重启:grub2-mkconfig > /boot/grub2/grub.cfg ###grub2-mkconfig就是原文件内容,将它导入文件内
方法二:若重启了,则要手动引导(一次性)
1)指定启动分区
set root='hd0,msdos1' ###在第几磁盘分区,此处数字写几
2)读取内核,只读挂载根目录
linux16 /vmlinuz-内核版本号 ro root=/dev/sda3
3)读系统初始化镜像文件
initrd16 /initramfs-内核版本号.img
4)boot ###启动,不可以reboot,否则继续手动引导
5)上述操作可以使系统正常启动,但是临时的,进入系统后要执行grub2-mkconfig > /boot/grub2/grub.cfg
注意:
1.若/boot分区独立出来了,则现环境的根为真实的/boot;第二、三步如上写相对路径即可
2.若/boot分区未独立,则现环境的根为真实的/;第二、三步写绝对路径/boot/...
3.挽救模式根目录为/mnt/sysimage
三、内核引导文件损坏
1.模拟内核文件误删
rm -fr /boot/vmlinuz-3.10.0-123.el7.x86_64
开机报错,内核文件找不到。系统无法启动
2.解决
1)virt-manager 中关闭虚拟机,(小灯泡)此时硬盘启动系统失败,选择使用镜像启动系统;(小电脑)确认选择
2)开启时,来到了安装系统界面,选择进入挽救模式;再选择第二个;选择1继续
3)切换真实根 chroot /mnt/sysimage/
4)挂载光驱
mkdir /source
mount /dev/cdrom /source
5)复制包
cp /source/Packages/kernel-内核版本.rpm /mnt
6)拆开包
rpm2cpio kernel-内核版本.rpm | cpio -id
7)还原
cp /mnt/boot/vmlinuz-3.10.0-123.el7.x86_64 /boot
8)exit(两次)
9)关闭状态下,重新选择硬件方法启动
四、系统初始化镜像文件(img文件)缺失
1.模拟
rm -fr /boot/initramfs-3.10.0-123.el7.x86_64.img
reboot时会有报错,初始化文件找不到
2.改正
方法一:删除文件后本机没有重新启动
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) ##uname -r 显示内核版本名
方法二:删除文件后本机已经重新启动
1)virt-manager 中关闭虚拟机,(小灯泡)此时硬盘启动系统失败,选择使用镜像启动系统;(小电脑)确认选择
2)开启时,来到了安装系统界面,选择第三个;再选择第二个;进入挽救模式
3)df
4)chroot /mnt/sysimage
5)df
6)mkdir /boot/initramfs-$(uname -r).img $(uname -r) ###$()=数学();uname -r 查看内核版本号
7)exit(两次)
8)关闭状态下,重新选择硬件方法启动
五、systemctl初始化(系统启动级别被修改)
1.设定开机后重启
cd /etc/systemd/system/
[root@localhost system]# ll default.target ###系统开机文件
lrwxrwxrwx. 1 root root 40 Jul 10 2014 default.target -> /usr/lib/systemd/system/graphical.target
[root@localhost ~]# ll /usr/lib/systemd/system/graphical.target ###有图界面
-rw-r--r--. 1 root root 522 Apr 2 2014 /usr/lib/systemd/system/graphical.target
[root@localhost system]# ll /lib/systemd/system/multi-user.target ###无图界面
-rw-r--r--. 1 root root 524 Apr 2 2014 /lib/systemd/system/multi-user.target
[root@localhost system]# ll /lib/systemd/system/poweroff.target ###系统关闭文件
-rw-r--r--. 1 root root 500 Apr 2 2014 /lib/systemd/system/poweroff.target
[root@localhost system]# ll /lib/systemd/system/reboot.target ###系统重启文件
-rw-r--r--. 1 root root 493 Apr 2 2014 /lib/systemd/system/reboot.target
[root@localhost system]# rm -fr default.target
[root@localhost system]# ln -s /lib/systemd/system/reboot.target /etc/systemd/system/default.target ###将重启文件与开机文件链接,这样重启优先级调高,也就更改了启动级别为重启
reboot会进入无限重启
2.改正:先手动进入图形界面,再更改链路
1)在进入系统时按『e』 ###进入系统挽救模式
2)在系统内核linux16那行最后加上5 ###init5 有图启动
3)『ctrl+x』 ##执行
4)进入虚拟机后
[root@localhost ~]# systemctl set-default graphical.target ##开启初始的启动级别:有图启动
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'
5)[root@localhost ~]# ll /etc/systemd/system/default.target ###已链接到正确链路
lrwxrwxrwx 1 root root 40 Oct 29 22:01 /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target
六、当忘记超级用户密码
1.在进入系统时按『e』 ###进入系统挽救模式
2.删除系统内核linux16那行ro及以后内容,将其改为rw rd.break ###内核启动终止,不进入系统初始化。系统初始化是进行认证的
3.『ctrl+x』 ###进入单用户模式执行
4.chroot /sysroot/ ###进入真实的系统根目录
5.whoami ###查看当前用户身份
6.echo 新密码|passwd --stdin root ###非交互式改密码
7.touch /.autorelabel ####重新建立密码后selinux默认不识别,需要重新初始化selinux(selinux的机制;重新加载安全上下文)
8.两次exit
更多推荐
所有评论(0)