Linux bootF分割槽被清空的恢復步驟
如果腦殘,把系統/boot分割槽下的內容全部刪除了,但是又不想重新安裝系統,是可以通過linux救援模式恢復boot分割槽的。
以下實驗平臺為CentOS 6.2。
root使用者登入系統,使用rm –rf /boot命令刪除/boot時,會被提未/boot無法被刪除,但/boot裡面的所有資料都被刪除了。
刪除/boot分割槽後,重啟系統,肯定連grub引導介面也沒有了,只有一個“Error 5”的報錯黑屏。
從系統光碟啟動,選擇“Rescue installed system”,即救援模式,回車進入,後續啟動過程中,選擇預設的選項便是。www.it165.net
有一個步聚提示“Do you want to start the network interfaces on this system”,選擇yes或者no都沒所謂,本文為方便寫文件,要使用ssh連線,所以選擇了yes,並設定網路模式為dhcp。
最後選擇“shell Start shell”,開啟一個shell環境。
此時系統的當前目錄是/mnt/sysimage,
用ifconfig可以看到系統自動獲得了IP地址,但使用service sshd start命令無效,提示“unrecognized service”,
使用chroot命令切換當前目錄為根目錄,
此時再使用service sshd start命令,可以正常開啟ssh服務。
這下可以使用SSH Secure Shell Client遠端訪問上面系統了,主要是為了方便拷貝命令及結果(要是全部手敲,那要死人了~)
操作過程如下:
(注:可以看到此時的boot是個空目錄)
[[email protected] ~]# ls /mnt/
[[email protected] ~]# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
(注:載入光碟到/mnt下)
[[email protected] ~]# ls /mnt
CentOS_BuildTag Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
isolinux RPM-GPG-KEY-CentOS-Debug-6
[[email protected] ~]# cd /mnt/Packages/
(注:進入到存放資料包的Packages目錄)
[[email protected] Packages]# rpm -ivh --force kernel-2.6.32-220.el6.i686.rpm
Preparing... ########################################### [100%]
1:kernel ########################################### [100%]
[[email protected] Packages]# ls /boot/
config-2.6.32-220.el6.i686 System.map-2.6.32-220.el6.i686
initramfs-2.6.32-220.el6.i686.img vmlinuz-2.6.32-220.el6.i686
symvers-2.6.32-220.el6.i686.gz
(注:重新安裝核心,使用--force選項,強制安裝,可以看到此時/boot目錄下有了核心檔案等檔案)
[[email protected] Packages]# grub-install --root-directory=/ /dev/sda
[[email protected] Packages]# ls /boot
config-2.6.32-220.el6.i686 symvers-2.6.32-220.el6.i686.gz
grub System.map-2.6.32-220.el6.i686
initramfs-2.6.32-220.el6.i686.img vmlinuz-2.6.32-220.el6.i686
[[email protected] Packages]# ls /boot/grub/
device.map ffs_stage1_5 minix_stage1_5 stage2 xfs_stage1_5
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5
(注:重灌grub到/boot,
# grub-install --root-directory=/ /dev/sda
命令中--root-directory=/,指的是/boot的相對路徑, --root-directory的值也可以為空,即
# grub-install --root-directory= /dev/sda
系統將會在/boot下生成一個grub資料夾,並在裡面存放grub檔案,如果寫成--root-directory=/boot,系統將會在/boot下生成了一個boot資料夾,再在裡生成一個grub資料夾,即grub檔案存放在了/boot/boot/grub/目錄下,這是不對的。
以上/boot/grub/中的資料,其實也可以從/usr/share/grub/i386-redhat/裡直接拷貝過來)
在上面列出的/boot/grub資料中,發現,關鍵的grub.conf檔案並沒有。需要手動建立——這個很考驗記憶力,如果每個系統都對grub.conf檔案作了備份,就好了,當然,也可以從其他同版本的系統中拷貝過來,修改一下便可用——這是裡手動建立一個。
[[email protected] Packages]# cd /boot/
[[email protected] boot]# touch grub/grub.conf
[[email protected] boot]# ls
config-2.6.32-220.el6.i686 symvers-2.6.32-220.el6.i686.gz
grub System.map-2.6.32-220.el6.i686
initramfs-2.6.32-220.el6.i686.img vmlinuz-2.6.32-220.el6.i686
[[email protected] boot]# echo vmlinuz-2.6.32-220.el6.i686 >> grub/grub.conf
[[email protected] boot]# echo initramfs-2.6.32-220.el6.i686.img >> grub/grub.conf
(注:在/boot/grub下建立grub.conf檔案,將vmlinuz和initramfs檔案的檔案寫入到grub.conf檔案中)
[[email protected] boot]# vim grub/grub.conf
default=0
timeout=10
title CentOS 6
root (hd0,0)
kernel /vmlinuz-2.6.32-220.el6.i686 ro root=/dev/mapper/vg_itpro-lv_root quiet
initrd /initramfs-2.6.32-220.el6.i686.img
(注:編輯grub.conf內容,注意,“title CentOS 6”是沒有“=”的,並儲存退出;
建議使用vim而不是vi,因為vim著色,比較易知道自己的輸入是否出錯,當然,ssh遠端看不到著色;
如果忘了root=/dev/mapper/vg_itpro-lv_root,可以通過df –h命令檢視,如圖P-03所示)
以上設定完成後,解除安裝光碟,重啟系統
[[email protected] boot]# umount /dev/cdrom /mnt
umount: /mnt: not mounted
[[email protected] boot]# eject
[[email protected] boot]# init 6
init: Failed to connect to socket /com/ubuntu/upstart: Connection refused
[[email protected] boot]# reboot
shutdown: Unable to shutdown system
[[email protected] boot]#
Broadcast message from [email protected]
(/dev/pts/0) at 15:31 ...
The system is going down for reboot NOW!
以上init 6無效,reboot也無效,說明援救模式下,這兩個命令都不可用,
需要到本地系統裡,使用exit命令退出shell,
然後選擇“reboot Reboot”選項重啟系統(如圖P-01所示)。
第一次重啟,速度比較慢,有一個較長時間的修復過程,如圖P-03所示;
修復結束後,系統會自動再次重啟,正常進入到登入介面。