1. 程式人生 > >Linux bootF分割槽被清空的恢復步驟

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遠端訪問上面系統了,主要是為了方便拷貝命令及結果(要是全部手敲,那要死人了~)

操作過程如下:

[[email protected]

~]# ls /boot/

(注:可以看到此時的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所示;

修復結束後,系統會自動再次重啟,正常進入到登入介面。