我接下要說的只適應於MBR分區,如果是GPT分區的請略過。
大家都知道MBR分區的0扇區0磁道是有特殊的功用;
前446個字節是啟動的引導記錄,后64個字節為磁盤的分區記錄,最后的2個字節為磁盤結束的標志位55aa。
那意味着我破壞了后64個字節那系統引導完就找不到分區了,直接導致無法啟動系統,那我們來搞破壞吧;
下面就是0磁道0扇區的512個字節;
[root@CentOS_7 script]# hexdump -C /dev/sda -n 512 00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............| #省略 00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.| 00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .| 00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R| 00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......| 000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........| 000001b0 00 00 00 00 00 00 00 00 f6 4a 00 00 00 00 80 20 |.........J..... | 000001c0 21 00 83 35 70 05 00 08 00 00 00 00 40 00 00 35 |!..5p.......@..5| 000001d0 71 05 83 fe ff ff 00 08 40 00 00 00 c0 03 00 fe |q.......@.......| 000001e0 ff ff 82 fe ff ff 00 08 00 04 00 00 00 01 00 fe |................| 000001f0 ff ff 05 fe ff ff 00 08 00 05 00 f8 3f 01 55 aa |............?.U.| 00000200
紅色80開始就表示分區表,80開頭表示活動分區的意思,00是非活動,先備份一下分區表先;
[root@CentOS_7 script]# dd if=/dev/sda of=/data/mbr bs=1 count=66 skip=446 66+0 records in 66+0 records out 66 bytes (66 B) copied, 0.000410346 s, 161 kB/s
查看一下分區表是否備份成功,一定要記得把分區表拷到別外的系統當中來。
[root@CentOS_7 script]# hexdump -C /data/mbr 00000000 80 20 21 00 83 35 70 05 00 08 00 00 00 00 40 00 |. !..5p.......@.| 00000010 00 35 71 05 83 fe ff ff 00 08 40 00 00 00 c0 03 |.5q.......@.....| 00000020 00 fe ff ff 82 fe ff ff 00 08 00 04 00 00 00 01 |................| 00000030 00 fe ff ff 05 fe ff ff 00 08 00 05 00 f8 3f 01 |..............?.| 00000040 55 aa |U.| 00000042
備份已成功,內容與上面的一致;
下面的意思是從/dev/zero中讀取66個字節寫入到/dev/sda當中,在寫入的過程中跳過446個字符;
[root@CentOS_7 script]# dd if=/dev/zero of=/dev/sda bs=1 count=66 seek=446 66+0 records in 66+0 records out 66 bytes (66 B) copied, 0.000251386 s, 263 kB/s
這時分區已死,再次查看已看不到分區表了;
[root@CentOS_7 script]# hexdump -C /dev/sda -n 512 00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............| #省略 00000160 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00 |a.&Z|..}....}.4.| 00000170 be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00 |..}.......GRUB .| 00000180 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 |Geom.Hard Disk.R| 00000190 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00 |ead. Error......| 000001a0 b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 |.....<.u........| 000001b0 00 00 00 00 00 00 00 00 f6 4a 00 00 00 00 00 00 |.........J......| 000001c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000200
可以看到在最后的66個字節全部都不一樣了,但是因為分區表現在已經加載至內存當中。需要重啟破壞才能生效;
重啟后可以看下已經找不到硬盤了;
這時用光盤啟動,進入救援模式,這時會加載一個小型的linux系統。就跟windows加載了一個PE一樣;
這時會出現情形:
1.進出系統里配置地址,把原來備份的文件傳送到系統當中來。用dd命重新寫入;
2.無法啟動網絡服務,我遇到了這一種情況。我着重說下這個。
在備份機器上用hexedit 打開t備份好的mbr,在分區丟失的機器打開一個mbr,對照着原來的分區表把分區的16進制代碼一個個寫入。最后用hexdump -C 文件來查看是否寫之前的一致;#hexedit是編輯16進制的一個工具,如果沒有的需要安裝;
最后用dd if=mbr of=/dev/sda bs=1 seek=446 這樣子把分區表還原回去。
最后重啟系統ok。