一、修復MBR:
MBR(Master Boot Record主引導記錄):
硬盤的0柱面、0磁頭、1扇區稱為主引導扇區。其中446Byte是bootloader,64Byte為Partition table,剩下的2Byte為magic number。
備份MBR:
#dd if=/dev/sda of=/root/mbr.bak count=1 bs=512
破壞bootloader:
#dd if=/dev/zero of=/dev/sda count=1 bs=200
這里邊block size只要小於等於446即可。
修復方式:
1、借助其他系統掛載磁盤修復。
修復方式同光盤修復類似,也是使用grub2-install命令。
2、借助安裝光盤修復。
1.裝入光盤,在光盤引導界面選擇troubleshooting:
2.選擇進入救援模式:
3.按回車鍵繼續:
4.進入磁盤掛載選擇模式:
磁盤將會被掛載至/mnt/sysimage/下
-
-
continue 以rw方式掛載分區。
-
read only 以ro方式掛載分區。
-
skip 跳過,將來自己手工掛載磁盤。
-
5.選擇continue,稍等片刻,提示已經掛載完成。
6.此時進入救援模式的命令行:
7.使用grub2-install命令重建bootloader:
#grub2-install root-directory=/mnt/sysimage /dev/sda
顯示無錯誤,使用sync寫入硬盤,reboot重啟系統。
8.重啟后無錯誤,grub正常運行:
至此,MBR修復完成。
二、修復grub
grub配置文件丟失:
開機后會直接進入grub界面,顯示為grub>:
修復步驟如下:
grub>insmod xfs
grub>set root=(hd0,1)
grub>linux16 /vmlinuz-xxxxx root=/dev/mapper/centos-root
grub>initrd16 /initramfs-.xxxxx.img
修復完成后即可進入系統,重建配置文件。
注意:CentOS7因為使用的是grub2,配置文件同grub有不少變化,一定要切記備份grub.cfg以便恢復。
列外:
1.
win pe修復win7引導后centos7引導消失的恢復方法:
步驟(一):用centos iso 制作啟動u盤進入到安裝centos的界面,開機選擇的時候不要選擇安裝centos,而是選擇trouble shooting疑難解答選項,然后選擇rescue a centos system。按tab鍵選擇continue (一定要選),然后選擇ok.
步驟(二): 進入命令行界面,輸入:chroot /mnt/sysimage ,接着就是重要的一步,安裝grub2了。執行以下命令: /sbin/grub2-install /dev/sda, 安裝成功后執行reboot重新啟動系統。但是以上步驟只是又把centos的啟動項找回來了,windows7的引導又不見了,win7的引導需要在后續步驟通過grub2來完成。
2.
恢復centos引導后繼續恢復windows7引導的方法:
經過前面所述步驟之后centos系統又能打開了,所以可以直接通過centos的grub2功能實現windows的引導。此時可以輸入此命令直接搞定:grub2-mkconfig -o /boot/grub2/grub.cfg,然而,輸入該命令后並沒有發現與window相關的任何信息,糾結了半天發現是centos不能識別本人win7系統的磁盤格式。也就是說使用上述命令的前提是centos能夠識別windows7系統的磁盤格式。
由於本人的windows7系統安裝在ntfs格式的分區中,所以我先安裝ntfs-3g,使centos能識別出windows所在的分區。
步驟(一):安裝ntfs-3g的步驟如下:
添加ntfs-3g下載源, 輸入:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
更新yum,輸入:
yum update
開始安裝ntfs-3g,輸入:
yum install ntfs-3g
至此,ntfs-3g安裝完畢,只要成功安裝了ntfs-3g, 那么恢復win7啟動項的光輝時刻就已經到了,並且,步驟及其簡單,您只需再次輸入之前提到的命令:
grub2-mkconfig -o /boot/grub2/grub.cfg, 系統就能自動找到win7系統或xp系統的引導項,並加入到了grub.cfg菜單中。這樣就避免了手工改動文件的危險,並且所有系統都能正常啟動。不過,我多此一舉的使用以下命令掛載了 windows NTFS 的分區(我的 Windows 分區分別是 /dev/sda1、 /dev/sda2、 /dev/sda4),注意:掛載是不必要的,因為在這個步驟中我們的真正目的是恢復win7的啟動項,作為一個linux小白,我只是借此場景熟悉一下mount命令的用法而已。我用以下命令分別掛載了通過 grub2-mkconfig -o /boot/grub2/grub.cfg命令搜索到的所有windows分區:
cd /mnt
mkdir forwin
mount -t ntfs-3g /dev/sda1 /mnt/forwin
mkdir forwin2
mount -t ntfs-3g /dev/sda2 /mnt/forwin2
mkdir forwin3
mount -t ntfs-3g /dev/sda4 /mnt/forwin3