1. 程式人生 > >linux初學者-系統啟動故障篇

linux初學者-系統啟動故障篇

auto 界面 tails 安裝包 mbr mount 本機 查找 3.1

linux初學者-系統啟動故障篇

在系統的操作中,有時會不小心誤刪或者操作失誤使得系統啟動不起來,下文將列舉幾種常見的系統啟動失敗的情況及解決的辦法。

1、刪除或者覆蓋mbr的446個字節

mbr的446個字節指定了系統啟動時/boot分區在磁盤中的為至,所以mbr這446個字節如果被刪除或者被覆蓋,就會導致系統找不到/boot分區而開不了機。

例如下圖,用"dd if=/dev/zero of=/dev/vda bs=446 count=1"覆蓋掉前446個字節。重啟系統發現無法啟動。

技術分享圖片

技術分享圖片

這種情況的解決方法是:

a、需要一個帶有系統鏡像的光盤。並且從光盤中啟動。

技術分享圖片技術分享圖片

b、啟動後選擇其中的"Troubleshooting"。

技術分享圖片

c、選擇"Rescue a Red Hat Enterprise Linux System"。

技術分享圖片

d、輸入"1",並按下回車鍵。

技術分享圖片

e、輸入"chroot /mnt/sysimages",進入真實的/boot。

技術分享圖片

f、輸入"grub2-install /dev/vda",等待安裝完成,且提示"Noerror reported"。

技術分享圖片

上述操作完成後,輸入兩次"exit"。切換回從硬盤啟動。即可解決這個問題。

2、刪除啟動的引導文件"grub.cfg"

"/boot/grub.cfg"是系統啟動的引導文件,如下圖,如果刪除這個文件,系統啟動後將進入如下界面。

技術分享圖片

技術分享圖片

這種問題在解決時需要知道自己的/分區和boot分區分別在哪個分區裏,本機的/分區在vda3分區下,boot分區在vda1分區下。解決步驟如下:

a、輸入"set root=‘hd0,msdos1‘"。按回車鍵。"msdos1"代表boot分區的位置。

b、輸入"linux16 /vmlinuz-3.10.0-327.e17.x86_64 ro root=/dev/vda3"。按回車鍵。"/dev/vda3"為/分區的位置。

c、輸入"initrd16 /initramfs-3.10.0-327.el7.x86_64.img"。按回車鍵。

d、輸入"boot"。按回車鍵。

技術分享圖片

完成上述步驟後,系統就可以啟動了,但是啟動後還是沒有刪除的"grub.cfg"文件。下次一樣無法正常啟動,需要輸入命令"grub2-mkconfig > /boot/grub2/grub.cfg"來恢復這個啟動引導文件。

技術分享圖片

3、刪除啟動硬件設備文件

如果刪除/boot下的啟動硬件設備,如"vmlinuz-3.10.0-327.e17.x86_64",系統將無法啟動,如下圖所示。開啟啟動失敗,並且提示缺少文件"vmlinuz-3.10.0-327.e17.x86_64"。

技術分享圖片

技術分享圖片

此時的解決辦法是將鏡像中的軟件包拆解,恢復這個文件,具體步驟為:

a、通過光盤鏡像啟動。選擇"Troubleshooting",選擇"Rescue a Red Hat Enterprise Linux System",輸入"1",按下回車鍵。

技術分享圖片

b、輸入"df"可以看到光盤"/dev/sr0"掛載在"/run/install/repo"下。

技術分享圖片

c、輸入"cd /mnt/sysimage//mnt",並且輸入"rpm2cpio /run/install/repo/Packages/kernel-3.10.0-327.e17.x86_64.rpm | cpio -id",拆解"kernel-3.10.0-327.e17.x86_64.rpm"這個安裝包。完成後可以看到有boot目錄,且其中有之前刪除的"vmlinuz-3.10.0-327.e17.x86_64"文件。

技術分享圖片

d、輸入"mv vmlinuz-3.10.0-327.e17.x86_64 /mnt/sysimages//boot"。

技術分享圖片

將這個文件恢復後,輸入"exit",且設置從硬盤啟動。系統就可以正常啟動了。

4、刪除系統初始化文件

如果刪除/boot目錄下系統的初始化文件,如"initramfs-3.10.0-327.el7.x86_64.img",系統無法正常啟動且提示少了該文件,如下圖所示。

技術分享圖片

技術分享圖片

此時的解決辦法為:

a、從光盤鏡像啟動。選擇"Troubleshooting",選擇"Rescue a Red Hat Enterprise Linux System",輸入"1",按下回車鍵。

b、輸入"chroot /mnt/sysimages",進入真實"/boot"。

技術分享圖片

c、輸入"mkinitrd /boot/initramfs-$(uname -r) $(uname -r)"。其中"$(uname -r)"是內核版本號,輸入後自動查找並且添加的。

技術分享圖片

d、完成後輸入兩次"exit",重新從硬盤啟動即可。

5、忘記root用戶密碼

如果忘記root用戶密碼,可以在系統啟動時修改。具體步驟如下所示:

a、系統啟動選擇界面按上下鍵使其停止,如下圖所示。

技術分享圖片

b、按"e",進入配置界面。

技術分享圖片

c、找到其中的linux16後的內容,從最後面刪除,直到刪除到"ro"即可。如下圖所示。完成後輸入"rw rd.break"。按下"ctrl+x"繼續,會出現一個shell。

技術分享圖片

d、輸入"chroot /sysroot",再輸入"passwd"修改密碼。

技術分享圖片

技術分享圖片

e、輸入"touch /.autorelabel"。

技術分享圖片

完成後輸入兩次"exit"完成系統繼續啟動,完成修改root用戶密碼。

6、刪除/boot

如果刪除/boot,毫無疑問,系統是啟動不起來的。

技術分享圖片

技術分享圖片

此時需要按以下步驟恢復:

a、從光盤鏡像啟動。選擇"Troubleshooting",選擇"Rescue a Red Hat Enterprise Linux System",輸入"1",按下回車鍵。

技術分享圖片

b、輸入"chroot /mnt/sysimages",進入真實的"/boot"。

c、輸入"grub2-install /dev/vda"。

技術分享圖片

d、輸入"mount /dev/sr0 /opt",將光盤掛載在/opt下。

技術分享圖片

e、"rpm -ivh /opt/Packages/kernel-3.10.0-327.e17.x86_64.rpm --force",強行重新安裝內核安裝包。

技術分享圖片

f、"grub2-mkconfig > /boot/grub2/grub.cfg",恢復啟動引導文件。

技術分享圖片

完成以上步驟後,輸入兩次"exit"並且設置從硬盤啟動,系統就可以正常啟動了。

linux初學者-系統啟動故障篇