linux分区表被破坏,不用怕

Posted suyingjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

 

以上是关于linux分区表被破坏,不用怕的主要内容,如果未能解决你的问题,请参考以下文章

被替换的片段不会被破坏

活动在片段上出现的权限对话框中被破坏

ViewPager 片段随着时间的推移而被破坏?

片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

全是干货:MBR分区结构以及GPT分区结构

linux中生成考核用的NTFS文件系统结构样例