Linux系统启动流程之(3)系统故障修复之二

Linux系统启动流程之(3)系统故障修复之二

经过上一篇能够了解如何来从新安装grub从而修复grub引导,那么若是损坏的不只仅为grub引导,若是还出现了其它更为严重的问题呢。下面几个案例来讲明:node

 

案例一:linux

一般系统服务运行以前会运行init程序来开启第一个进程,那么若是init被删除呢?shell

#删除或者移动init程序到别处apache

[root@mzf ~]# which init
/sbin/init
[root@mzf ~]# mv /sbin/init /testdir/
[root@mzf ~]# which init
/usr/bin/which: no init in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache2:/root/bin)

#而后重启系统,进入grub菜单选择一个进入系统的引导项,直接按c进行交互式grub设置在kernel内核参数后面设置init=/bin/bash表示以bash进程来看成第一个进程:vim

wKioL1ffdeKDu6JBAAAZqJrTHf0687.png 

解析:grub交互界面虽然只能修复bootloader及第一阶段,可是里面却提供了不少命令来帮助修复,好比使用find能够对猜想有boot引导文件的分区进行查找,这里查找此目录下有vmlinuz虚拟根文件系统和initramfs内核加载及切换器,能够判断(hd0,0)极有可能就是须要恢复的boot分区,固然若是有多个也就逐一排查。bash

#进入指定的启动进程/bin/bash,而后将刚才移动到其余分区的init程序移回来ide

一、挂载刚才移动到init程序的目标分区工具

mount -n -o rw /dev/sda5 /testdir/

二、从新以指定方式挂载根spa

mount -o remount,rw /

三、拷贝此文件到原来的路径命令行

cp /testdir/init /sbin/

四、查看init命令是否在/sbin/init下

which init

注意:这里是经过grub命令行模式下指定的内核参数进入到的/bin/bash,所以也只挂载了内核参数中root根分区,全部要进行从新挂载对应的其它分区,而后将文件还原就好了。

 

 

案例二:

假设/boot分区下的全部文件丢失,也就没有grub引导加载的全部阶段了。

#查看当前/boot已是否被挂载

[root@mzf ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       10190136 2803944   6861904  30% /
tmpfs             502068       0    502068   0% /dev/shm
/dev/sda1         194241   34109    149892  19% /boot
/dev/sda5        7922096   18280   7494728   1% /testdir

#直接删除/boot里的全部文件

[root@mzf ~]# rm -rf /boot/
rm: cannot remove `/boot': Device or resource busy#由于此文件夹仍是挂载点,全部提示

#查看/boot目录下,发现已经没有任何文件了

[root@mzf ~]# ls /boot/

#卸载此目录

[root@mzf ~]# umount /boot/

#而后重启

[root@mzf ~]# reboot

 

具体修复过程:

一、使用光盘引导启动救援模式

进入救援模式提供的shell后入后先安装grub-install

 wKiom1ffduvDpECUAABEnqrKQ7k076.png

解析:

一、df查看当前分区是否已经挂载成功

二、挂载光盘的镜像,使用其中工具

三、切换到要安装grub的分区,也就是/dev/sda所挂载的/mnt/sysp_w_picpath目录

四、直接指定磁盘使用grub-install对/dev/sda彻底安装grub

五、查看/boot/grub是否生成各个阶段文件

 

二、而后恢复vmlinuz

#输入exit退会到救援模式shell进程,而后查看刚刚挂载的光盘镜像文件目录

wKiom1ffdwSyhudqAAAaM49kqrU775.png 

解析:这时发现,在光盘的isolinux文件中已经提供了vmlinuz和initrd.img文件,甚至还有splash.jpg就是grub菜单文件已经grub.conf模板文件等,固然只须要绿框中指定的就行。

#拷贝vmlinuz到指定的目录下,就boot分区对应的目录

wKiom1ffdw_jWRtFAAAPuRsm9Pc558.png 

解析:由于刚才已经挂载了光盘,全部会获得不少命令工具,所以使用findmnt查看第一个分区及boot分区所在挂载点,固然也能够经过df查看;而后将光盘里保存的vmlinuz拷贝到指定挂载点/mnt/sysp_w_picpath/boot下便可。

 

三、而后恢复initramfs.img文件

#从新切换到boot挂载点,并使用mkinitrd根据当前kernnel信息来生成对应版本号的initrd文件

wKioL1ffdx6wgt9CAAAMz3Plvfg093.png 

解析:这里不去光盘里自身isolinux目录下去拷贝initrd.img。由于系统kernel里保存了内部版本信息,全部能够直接切回到boot分区挂载点来安装对应的版本,若是kernel升级过,使用此命令生成的也是对于版本的initramfs.img。

 

四、从新创建grub.conf配置文件

#虽然所选的各类文件都会恢复文件,可是grub.conf文件并未自动根据当前环境而自动生成,所以还须要根据当前环境进行手动编辑。

wKiom1ffdy2QVPTyAAAKmBc7Aaw502.png 

说明:由于vmlinuz从光盘镜像挂载点下的isolinux目录里命令就是vmlinuz而不带版本号,全部这里保持一致,直接路径便可。

#固然initramfs-`uname -r`.img这个文件名很长很差记忆,那么使用末行模式读入便可

wKioL1ffdzyCC4zxAAADh0vwbuU545.png 

#将指定须要的文件基名放到指定位置,并在kernel添加指定root分区的参数

wKiom1ffd0bTCAfhAAAKmBc7Aaw664.png 

注意:这里必需要指定root所在分区,kernel和initrd指定的参数必须和/boot目录下的文件名及路径所对应。

#下面重启系统。

reboot

#进入系统修复过程

wKioL1ffd1XSwPDcAAAM1gbObLM551.png 

而后等待系统修复完毕自动重启便可

 

 

案例三:

删除/boot下全部文件和/etc/fstab文件,并强制卸载当前kernel。而后经过救援模式来进行逐个恢复使系统正常使用。

 

逐一破坏过程:

#删除/boot下的全部文件

[root@mzf ~]# rm -rf /boot/*

#查看文件/boot下文件已经被清空

[root@mzf ~]# ls /boot/

#卸载boot分区

[root@mzf ~]# umount /boot/

#删除/etc/fstab文件

[root@mzf ~]# rm -f /etc/fstab

#忽律依赖关系直接卸载内核文件

[root@mzf ~]# rpm -e kernel --nodeps

#重启坏掉的系统

[root@mzf ~]# reboot

解析:以上的操做以及让主板没法找到boot分区,没有内核也就没法知道其内核版本,没有了/etc/fstab文件,即便是救援模式也没法检查其硬盘下挂载关系。

 

修复过程:

一、重启从光盘引导进入救援模式,修复分区表及文件系统探测

#安装以往的操做一种到救援模式自动检测分区的界面

wKiom1ffd8eQp7BtAAALYoEvUS0525.png 

解析:由于没有了/etc/fstab文件,救援模式下也没法知道对应的挂载关系。

#而后回车选择shell界面,df查看当前挂载状况

wKiom1ffd-fCgDsbAAAM_Voh3Tc779.png 

说明:此时已经肯定救援模式也须要靠/etc/fstab文件来操做对应的分区以及其挂载关系。固然此文件被删除。

#为了检查分区的信息,这里挂载光盘镜像,来获取更多的命令工具

mkdir /mnt/cdrom  &&  mount /dev/cdrom /mnt/cdrom

wKioL1ffeCmSWPqNAAAGvrHtm6o296.png 

#使用blkid命令来查看当前磁盘的命令及对应UUID已经文件系统类型

blkid

wKioL1ffeD_g-ywtAAATo3EyJtY651.png 

解析:这里就发现了1个磁盘/dev/sda,已经4个分区,/dev/sda5能够猜想为逻辑分区,而通常系统会在主分区下,那么如今排除掉为交换分区的/dev/sda3,考虑的有/dev/sda{1,2,5}。

#下面进一步查看,使用parted工具来查看更详细的分区信息

wKiom1ffeEmzvVBNAAAa3EKvvlw811.png 

解析:经过parted命令打印出/dev/sda的详细文件系统类型以及其对应的特殊标记,从上面能够看出,只有2个主分区; 再次这能够发现Number列为1,及第一个分区的大小只有210MB,而Number列为2及第二个分区大小为11G左右,由此能够猜想boot所在第一个分区,且其对应的文件系统都为ext4,而/分区为第二个分区,为了肯定,下面也可使用fsdisk命令查看详细大小。

#进一步查看分区信息来推断,使用fdisk 命令

wKioL1ffeFOTOPvsAAAoOG8ApTQ382.png 

解析:由于检查到了boot为一个独立的分区,全部说要要救援模式下的系统来识别当前系统下的分区及挂载关系,那么至少须要填写两个挂载关系,及boot分区和根分区。

#根据以上信息来挂载boot分区和/根分区

wKioL1ffeL6CK5A5AAAYzS7vKYo947.png 

解析:只有对刚才猜想的分区提供了挂载点进行访问,那么下面才能经过查看其对应挂载点

下的文件列表来进一步推段。

#查看两个分区下的挂载点目录下文件列表

wKioL1ffeMiyLV3mAAAKLzYN6fM720.png 

解析:这里root分区能够判定是/dev/sda2了,可是/mnt/boot挂载点下并无任何东西,

多是由于此分区下文件已经被清除。因而编写/etc/fstab文件。

#在编写/etc/fstab文件,提供根分区和boot分区的对应挂载关系

wKiom1ffeNXA8ebwAAAFANuhmSg005.png 

#而后再次重启

reboot

 

二、检查分区及分区系统可否被救援模式识别且自动挂载

最后再次进入救援模式,一种根据以往的设置显示出此界面

wKioL1ffeOvjxMsRAAASiorCRas643.png 

解析:显示出此简明表示已经检查到了有一个存放系统的根分区,并且将会被挂载到/mnt/sysp_w_picpath下面。因而肯定进入下一个界面。

wKiom1ffePXzkeoEAAAHSDeoEB8793.png 

说明:最终出现此界面说明根系统分区真的被挂载上了,因而下面回车并选择进入shell。

#在救援模式shell下面使用df查看当前文件系统对于的挂载点

wKiom1ffeRWy2ursAAAW_UynNKE201.png 

 

三、根据上面的挂载点对应关系,下面进行具体系统恢复

(1)根据上面的挂载点对应关系,下面开始安装内核

wKioL1ffeSmgT9d3AAAWJsbqUo4544.png

解析:这里必须先挂载光盘,由于须要的命令工具和软件包都在其中,而后切换到此目录后,使用rpm工具进行安装,由于的当前是在救援模式下引导的系统,全部,在安装时必须使用--root=选项来指定系统根分区的路径,及在哪一个系统分区上安装此kernel包。固然,由于kernel是直接忽略依赖关系进行卸载,不免会清除一下残留记录,因此使用--replacepkgs表示直接从新安装。

 

(2)重建/boot分区所需的全部文件

#经过挂载的光盘将vmlinuz拷贝到boot分区挂载点下

wKiom1ffeV_xONtTAAAGpyFfjH8895.png 

#切换到真正的根文件系统分区

wKioL1ffeXizmldbAAADsr_52ag937.png 

#从新安装initramfs.img文件

wKiom1ffeZmyneoQAAAMBKLTnYw471.png 

解析:由于已经从新安装了kernel,那么使用uname -r命令查看的也会是与其相对于的版本。

#从新彻底安装gurb

wKioL1ffecHRIVYHAAAjC_rn_vg550.png 

说明:此时boot分区里的全部grub引导所选要的阶段文件以及备份文件都已经生成完毕,可是任然缺乏最后的一个grub.conf配置文件。

#从新编写grub.conf配置文件

在编写以前,为了让其更加回到原状,这里把vmlinuz文件后面添加内核版本号

wKioL1ffed3y6TBeAAAHU1a8Vd0719.png 

使用vim新建/boot/grub/grub.conf文件

wKiom1ffeezihzkyAAAMByPoor4634.png 

提示:这里再次提示,必需要指定根分区所在的分区,不然grub第2阶段没法进行根切换。

 

一块儿完成后检查一下,而后exit退回到救援模式shell,而后reboot重启

wKioL1ffehCyovfEAAAKkP_LdG0378.png

等待selinux修复

wKiom1ffeiKxQCz0AAAJWJ_BiWI474.png

相关文章
相关标签/搜索