linux分區表被破壞,不用怕


我接下要說的只適應於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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM