boot分區在沒有備份的情況下意外被清空,包括啟動引導信息也沒了。這時若Linux還在運行,那你是幸運的,
修復的方法:
1. cat /etc/*release #趕快先確定當前系統的具體版本。有ISO鏡像趕快掛載上來. 或 lsb_release -a #或趕快找到對應版本的: >> kernel-`uname -r`.rpm 和 對應的grub-*.rpm 或 cat /proc/version
2. 找到當前系統的ISO鏡像則:
mount -o loop /path/to/file.iso /mnt/iso cd /mnt/iso/ find . -name 'kernel-*.rpm' -o -name 'grub-*.rpm' umount /boot #先卸載boot分區的掛載 mkfs.ext2 /dev/sda1 #注:此假設為boot分區。 mount /dev/sda1 /boot rpm -ivh --root=/ --force kernel-`uname -r`.rpm #"--root=/"指定其安裝的相對目錄為"/"下的boot.它主要安裝Kernel和驅動(ko); #vmlinuz:此為Linux的kernel文件. #initramfs:此為Linux2.6的initrd文件,它包含了當前主機的磁盤驅動, #以便kernel可識別磁盤設備. rpm -ivh --root=/ --force grub-*.rpm #1. 它將安裝grub、grub-install等到系統中.它不是必須安裝的, # 若你的系統中已經可以使用grub-install,也可不安裝.但你需要做以下操作: #(1) mkdir /boot/grub/ #(2) cp /usr/share/grub/`uname -m`-redhat/* /boot/grub/,這里復制的文件是安裝系統是創建的備份文件. # <1> stage1 :此為MBR引導信息(Bootloader)的備份.實際上就是磁盤0扇區446字節的備份文件。 # <2> jfs_stage1_5,fat_stage1_5,xfs_stage1_5,iso9660_stage1_5,e2fs_stage1_5都是不同類型的文件系統, # bootloader通過它們來識別不同的boot分區,以便去查找stage2文件。 # <3> stage2: 它會去找/boot/grub/grub.conf 來顯示啟動菜單. grub-install /dev/sda #這一步是安裝啟動引導,正常情況下:開機Post硬件自檢--> #BIOS按啟動順序設定去找Disk、CDROM、PXE等方式啟動--> #一般為Disk引導,當BIOS檢查到Disk上第一個可用的MBR引導(bootloader)后--> #bootloader顯示啟動菜單--> #選擇啟動系統后--> #bootloader依啟動系統所在分區信息找到該OS的Kernel和initrd并裝載到內存特定位置--> #Kernel啟動并檢查initrd是否為cpio格式--> #是則解壓cpio到kernel初始化的rootfs文件系統中--> #執行initrd中的init進程-->kernel退出,init進程啟動.
若系統不幸已經關機,那么可通過以下方式急救:
1. PXE方式:
這里具體如何部署PXE環境,就不做介紹了。
這里我測試的環境是Cobbler代替PXE來做測試。
啟動Cobbler后,進入/var/lib/tftpboot目錄下。
service httpd start service cobblerd start service dnsmsaq start cd /var/lib/tftpboot <1> vim pexlinux.cfg/default 【 LABEL CDLinux kernel memdisk raw iso initrd=BT8_cdlinux_net.iso # 注意: BT8鏡像是放在/var/lib/tftpboot/下的。 # memdisk :引導IMG、IMA、ISO映像所必須加載的文件,它也可用來加載WinPE.ISO來提供網絡PE. # 但需要注意的是:ISO文件在網絡啟動時,不支持外置應用程序,也就是說ISO鏡像必須是將所有應用 # 軟件都安裝到ISO鏡像內的系統目錄中才行。 】
<2> 注: 若CDLinux中不確定是否有支持Linux服務器的網卡驅動,建議先準備一個U盤,并將當前系統的ISO文件或直接將kernel-`uname -r`.rpm 和 grub-*.rpm拷貝到U盤上,然后,直接插到服務器上,在來從網絡啟動CDLinux.這樣它會自動加載USB的驅動,并將其掛載到/media目錄下。
<3> 進入CDLinux后,操作方法就與CDROM的方式類似了。可直接參考CDROM方式即可。
2. CDROM方式:
這種方式最簡單,也最靠譜,但你的Linux服務器需要有CDROM 和 一張Linux發行版鏡像光盤。若沒有這就不行了。
操作方法:
1. 修改BIOS,將CDROM作為首選啟動項。
2. Linux光盤可任意發行版,但注意它必須支持Rescue模式。
如:CentOS6.4的光盤引導中有"Rescue installed system"
CentOS5 和Redhat5 的光盤啟動后,可在 boot: 處輸入: linux rescue回車進入Rescue模式。
3. 進入后,過程基本都一樣.一路回車.但需要注意: 一定要配置好網絡連接,給自己留條后路。最后它會自動檢測磁盤上的根文件系統,若成功檢測到,則會將其掛載到/mnt/sysimage上。接著,就會進入一個shell。
4. 進入shell后,可 chroot /mnt/sysimage ,來切換到故障系統中。
5. 檢查當前掛載的文件系統有哪些。
df -Th
6. 嘗試掛載boot分區到/boot下,若提示buzy或已掛載的錯誤,則先退出chroot模式。到最初shell界面,再次執行"df -Th" 查看是否掛載了/dev/sda1. 若已經掛載則先卸載它。
7. 注意:
做下面操作的前提是, chroot /mnt/sysimage –> mount /dev/sda1 /boot后。
<1> mount /dev/sr0 /mnt/cdrom #這是假設你使用的光盤是當前系統的安裝光盤. <2> cd /mnt/cdrom/Package/ #這是假設你的系統是Redhat或CentOS,并且光盤是Redhat或CentOS的光盤.
<3> 強制安裝kernel和grub
#注:若光盤不是當前系統的光盤,你就必須保障你的系統可以聯網。然后,下載與當前系統版本一致的rpm包。 rpm -ivh --root=/ --force kernel-`uname -r`.rpm rpm -ivh --root=/ --force grub-*.rpm #注: grub-*.rpm可不需要,但你必須保證系統中可以使用dd命令。
<4> 安裝Bootloader到0扇區
grub-install /dev/sda #若你沒有安裝grub-*.rpm,系統中也沒有grub-install命令,那你就必須保證系統中有dd命令了, # 否則就只能下載一個grub或dd包.接著執行以下命令: # <1> mkdir /boot/grub # <2> cp /usr/share/grub/`uname -m`-redhat/* /boot/grub/ # <3> dd if=/boot/grub/stage1 of=/dev/sda bs=446 count=1
<5> 修改/etc/fstab
vim /etc/fstab /dev/sda1 /boot ext2 defaults 1 2 #若之前是UUID,則這里可先手動改成磁盤路徑。 /dev/sda2 / ext4 defaults 1 1 #因為每次格式磁盤后,UUID會發生改變,為確保萬無一失,這里可先該成磁盤路徑. /dev/sda3 swap swap defaults 0 0
<6> 創建grub.conf
vim /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz #注: 若/boot/grub/下沒有這個圖片文件,這里最好注釋掉。 hiddenmenu title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64) root (hd0,0) #這里注意:kernel和initrd一定不能寫錯,kernel部分也可只寫以下內容也可: # "kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2" # 但必須注意:root=LABEL=/ # root=UUID=.... # root=/dev/sda2 或是LVM路徑等. kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/sda2 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-358.el6.x86_64.img
<7> 到此就修復boot分區完成了。接著reboot即可。
3. U盤啟動CDLinux
這種方式我測試時,始終無法成功啟動CDLinux.
若你已經能成功啟動CDLinux,那這種方式當然也是可行的,也是最方便的。
原創文章,作者:Wn1m,如若轉載,請注明出處:http://www.www58058.com/13007
系統恢復是非常嚴肅的事情,如果真的出現這個問題我不會參考這篇文章,因為少了詳細的背景描述和更專業的技術介紹