26.深度解析Linux系統故障模擬及修復方法(MBR異常、引導故障丟失、內核文件丟失、初始化鏡像文件丟失、/boot分區丟失、啓動級別init異常)

Linux系統的配置文件缺失,或核心文件被篡改(例如:啓動級別被篡改),都會導致系統啓動的不成功。

爲了解決系統啓動過程中出現的問題,我們先來了解系統引導啓動的過程:

Linux的系統啓動過程大致爲:

通電——bios初始化——grub2磁盤引導階段——grub2文件引導階段——指定boot所在分區——啓動內核,只讀掛載 / 設備——啓動init程序進入初始化階段——啓動systemd初始化進程——讀取/etc/systemd/中的文件——啓動程序——啓動登錄程序

系統主要故障的解決:

1.grub2磁盤引導異常(MBR異常):

MBR:

            作用:是爲了記錄/boot目標所在分區位置

            地址:磁盤的0磁道1扇區的前446字節。

注意:磁盤的0磁道1扇區的前512字節記錄的信息如下

512   =       446       +      64       +      2
         MBR(主引導記錄)  mpt(主分區表)   55aa(硬盤有效性標誌)
                      ##一個分區佔用16,所以最多有4個     

故障模擬:

dd if=/dev/zero of=/dev/sda bs=446 count=1      ##填充MBR,使MBR失效

 

注意:其中 /dev/sda1後面的*是自舉功能標識,有代表具有自舉功能

重啓,可以看到系統停止在下面這樣的界面:

故障解決方法:

如果是虛擬機,我們可以進入虛擬機管理器,給系統添加有系統鏡像的虛擬光盤,並設定優先從光盤啓動

如果是真實主機,我們可以通過bios從擁有系統鏡像的光盤或者U盤啓動

進入挽救模式後,配置安裝MBR,然後虛擬機調整優先從磁盤啓動或真機拔下U盤

##添加帶有系統鏡像的虛擬關

##設置優先從光盤啓動

 ##選擇第三個Troubleshooting,修理故障

 ##選擇第2個Rescue a RedHat Enterprise linux system

 

1          ##鍵入1
           ##回車
chroot /mnt/sysimage/   ##進入shell
df                      
grub2-install /dev/sda   ##安裝grub2
exit
exit

 

 ##配置完成後,恢復從磁盤啓動

##可以看到問題被成功解決,系統恢復正常

2.grub2文件引導異常(引導文件丟失):

問題模擬:爲了模擬故障環境,我們刪除grub2引導文件:

即刪除/boot/gurb2/grub.cfg

我們首先查看系統的掛載情況

可以看到系統的掛載在 / 下的硬盤爲/dev/sda3,掛載在/boot下的硬盤爲/dev/sda1(也可以進入挽救模式查看掛載情況)

重啓系統,可以看到異常,重啓不了

解決方法:

如果發現引導文件丟失時,還沒有關機,我們可以直接用命令新建文件

grub2-mkconfig > /boot/grub2/grub.cfg

如果已經重啓,進入報錯界面,我們可以鍵入命令

set root='hd0,msdos1'			##此位置是不固定的,位置指定boot所在分區
linux16 /vmlinz-3.10.0-123.el7.x86_64 ro root=/dev/sda3		##寫根分區掛載設備名稱
initrd16 /initramfs-3.10.0-123.el7.x86_64.img
boot

##注意:文件名比較長,可以tab鍵補齊

配置完後,可以重啓成功,但是這只是臨時的,再次啓動還是會異常無法啓動,所以需要用命令生成引導文件

grub2-mkconfig > /boot/grub2/grub.cfg

配置完後,重啓能夠繼續正常啓動。

至此,就可以解決由於引導文件丟失所引起的系統故障。

3.內核文件丟失:

首先我們看一下/boot下有哪些文件:

系統啓動異常模擬:我們刪除/boot下的內核文件,模擬內核文件丟失的情況:

重啓電腦,可以看到系統,可以看到系統異常,無法正常啓動:

解決方法:

首先,給系統插入一個與系統版本一致的鏡像,然後我們從鏡像啓動,進入挽救模式:

進入挽救模式後,我們做以下操作:分佈鍵入以下命令:

chroot  /mnt/sysimage
mkdir /rhel7.0                 ##新建一個目錄
mount /dev/sr0 /rhel7.0/       ##把完整的系統鏡像掛載到該目錄下
cd /rhel7.0/Packages           ##打開系統鏡像中的安裝包 
cp kernel-3.10.0-514.el7.x86_64.rpm   /mnt/   ##將我們需要的安裝包拷貝到/mnt下
cd /mnt/
rpm2cpio kernel-3.10.0-514.el7.x86_64.rpm | cpio -id      ##解開內核對應的安裝包
cd boot
cp vmlinuz-3.10.0-514.el7.x86_64  /boot     ##將解開的內核安裝包中對應的boot文件複製到我們原系統的/boot下 ,以填補原來/boot文件的缺失
exit      
exit

 

恢復從硬盤啓動,可以看到系統正常啓動:

開機後我們可以看到我們之前刪除的文件重新出現在/boot下:

4.系統初始化鏡像文件丟失

系統啓動異常模擬:

我們刪除/boot下的系統初始化鏡像文件

重啓系統,我們可以看到系統的異常,系統初始化鏡像文件找不到

解決方法:

依舊是給系統插入一個帶有相同版本系統鏡像的光驅,然後進入挽救模式:

進入挽救模式後,我們可以鍵入以下命令:

chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)   ##重建系統初始化鏡像文件
cd /boot/          ##打開系統配置目錄
ls                 ##查看配置文件
exit
exit

配置後關閉系統,重新選擇通過硬盤啓動:

至此,該問題就完全得到了解決。

注意:$(uname -r)  是一個變量,用來指代當前系統的內核版本

5./boot分區丟失

模擬問題:我們刪除/boot分區中的信息,以模擬/boot分區丟失的情況:

刪除分區後我們重啓電腦,可以看到系統異常,無法正常啓動:

解決方案:

給系統插入一個載有與系統版本一致的系統鏡像的光驅,並使系統從光驅啓動:

進入挽救模式後,一次鍵入以下命令:

1                ##輸入1,選擇continue
[Enter]          ##再回車
chroot /mnt/sysimage    ##切換到真實根目錄下
mkdir   /boot   ##新建/boot
mkdir  /rhel7.3   ##新建鏡像掛載目錄
mount /dev/sr0 /rhel7.3/     ##掛載系統鏡像到我們新建的目錄下
cp /rhel7.3/Packages/kernel-3.10.0-514.el7.x87_64.rpm  /mnt/    ##將內核的安裝包複製到/mnt下
cd /mnt/       ##切換到/mnt
rpm -ihv kernel-3.10.0-514.el7.x87_64.rpm  --force       ##強制安裝
grub2-mkconfig > /boot/grub2/grub.cfg           ##新建系統引導文件
exit
exit

執行完上面的命令後,我們切換系統從硬盤啓動,就可以正常啓動系統

6.啓動級別init異常

模擬問題:

我們將啓動級別改爲重啓,這樣開機時就不會正常進入系統,而是處於不斷的開機自啓:

ln  -s  /lib/systemd/system/reboot.target   /etc/systemd/system/default.target       ##更改重啓爲新開機級別

配置完模擬問題後,我們重啓系統,可以看到系統一直在不斷自啓,無法正常進入系統。

解決方案:

在進入上面的界面後,我們按上下鍵,避免自動直接進入系統,而後按e進入可編輯模式,在linux16 /。。。後面加上啓動級別爲 5    即圖像化系統啓動界面   就可以正常進入系統。

在進入系統後我們重新設定系統的啓動級別爲級別5

systemctl set-default graphical.target         ##設置系統的默認啓動級別爲5  

至此,啓動級別異常導致的系統異常就解決了。

可以看到,系統啓動異常的原因就是將重啓鏈接到了系統默認啓動級別上。

注意:在我們排錯時,要善使假設法,假設哪裏不對,一步一步來,從最簡單的原因排起,例如系統突然網絡異常,那你首先就得看看你的網線是不是沒插好,而不是上來就去動配置文件,貿動就有可能錯上加錯!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章