如何修复MBR表中的重叠分区?

我在PC上安装的Ubuntu被卡在启动画面上。 所以,我尝试重新安装,但分区表在安装向导中显示为空。 我了解到我的分区重叠了。

我发现这个链接修复了问题http://gparted.org/h2-fix-msdos-pt.php 。 但它对我的fdisk输出似乎没有意义。

$ sudo fdisk -l -u /dev/sda Disk /dev/sda: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x49fec944 Device Boot Start End Blocks Id System /dev/sda1 * 616448 257441624 128412588+ 7 HPFS/NTFS/exFAT /dev/sda2 452753408 484210687 15728640 7 HPFS/NTFS/exFAT /dev/sda3 484210688 488394751 2092032 c W95 FAT32 (LBA) /dev/sda4 257433598 452753407 97659905 5 Extended /dev/sda5 257433600 452753407 97659904 83 Linux Partition table entries are not in disk order 

你可以帮帮我吗?

使用sfdisk修复分区表:

  1. 使用实时Ubuntu磁盘启动;

  2. 确认您的磁盘设备上的问题,这里/dev/sdaparted例如

     sudo parted /dev/sda unit s print 

    哪个应该显示:

     Error: Can't have overlapping partitions. 
  3. 可以使用以下命令检查分区详细信息

     sudo fdisk -l -u /dev/sda 

    对你来说,根据你的post是:

     Disk /dev/sda: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x49fec944 Device Boot Start End Blocks Id System /dev/sda1 * 616448 257441624 128412588+ 7 HPFS/NTFS/exFAT /dev/sda2 452753408 484210687 15728640 7 HPFS/NTFS/exFAT /dev/sda3 484210688 488394751 2092032 c W95 FAT32 (LBA) /dev/sda4 257433598 452753407 97659905 5 Extended /dev/sda5 257433600 452753407 97659904 83 Linux 
  4. 检查重叠:您可以看到主分区/dev/sda1末尾与扩展分区/dev/sda4的开头重叠。

    sda1 end = 257441624

    sda4 start = 257433598

  5. 正如文档中所建议的那样 – “在我们不知道起始或结束扇区是否存在问题的情况下,我们假设每个分区的起始扇区是正确的,并且结束扇区可能出错” ,我们假设扩展分区sda4的起始扇区是正确的。 因此,我们将寻求更改主分区sda1的结束扇区。

    计算:

    sda1 newEnd = sda4 start – 1 = 257433598 – 1 = 257433597

    sda1 newSize = sda1 newEndsda1 start + 1 = 257433597 – 616448 + 1 = 256817150

  6. 使用sfdisk命令将分区表的副本​​转储到文件中:

    sudo sfdisk -d /dev/sda应该转储分区表的详细信息。 这可以转储到一个文件,经过必要的修正后,可以反馈给sfdisk 。 [ 致OP:请编辑您的问题并包含sudo sfdisk -d /dev/sda的输出]

    转储分区表的副本​​:

     sudo sfdisk -d /dev/sda > sda-backup.txt 

    这对你来说是这样的:

     # partition table of /dev/sda unit: sectors /dev/sda1 : start= 616448, size=256825177, Id= 7, bootable /dev/sda2 : start=452753408, size= 31457279, Id= 7 /dev/sda3 : start=484210688, size= 4184064, Id= c /dev/sda4 : start=257433598, size=195319810, Id= 5 /dev/sda5 : start=257433600, size=195319808, Id=83 
  7. 使用您选择的文本编辑器打开上一步中创建的具有root权限的文件。 在示例中,我将使用nano

     sudo nano sda-backup.txt 

    sda-backup.txt假设文件在当前目录中,否则使用文件的绝对路径重新生成它。)

    sda1256825177 )的旧大小更改为更正大小( 256817150 ),以便新分区表转储看起来像:

     # partition table of /dev/sda unit: sectors /dev/sda1 : start= 616448, size=256817150, Id= 7, bootable /dev/sda2 : start=452753408, size= 31457279, Id= 7 /dev/sda3 : start=484210688, size= 4184064, Id= c /dev/sda4 : start=257433598, size=195319810, Id= 5 /dev/sda5 : start=257433600, size=195319808, Id=83 

    保存文件( Ctrl + O表示nano )并关闭编辑器( Ctrl + X表示nano )。

  8. 使用sfdisk命令将更正的分区详细信息反馈到分区表:

     sudo sfdisk /dev/sda < sda-backup.txt 
  9. 通过在磁盘设备上运行parted来确认问题是否得到解决:

     sudo parted /dev/sda unit s print 
  10. 如果步骤9确认分区表已修复,则可以将GParted或其他分区编辑器与设备一起使用。


GParted文档还提出了另一种方法,使用testdisk扫描磁盘设备以重建分区表。 testdisk应用程序包含在GParted Live中 。 因此,如果您对命令行方式不满意,可以尝试替代方案。

资源

Rusty的建议应该有效,但它有点令人生畏。 使用fdisk可以更简单地完成同样的事情:

  1. 键入sudo fdisk /dev/sda在磁盘上启动fdisk
  2. 通过键入p查看分区表并validation它是否显示您发布的相同分区,validation您是否正在使用正确的磁盘。
  3. 键入d并在提示输入分区号时键入1
  4. 键入n以创建新分区。 出现提示时,为分区类型输入p ,为分区编号输入1 (实际上,我认为fdisk不会提示此详细信息),第一个扇区为257433597 (扩展分区的起点减1)对于最后一个部门。 (最后一个扇区值可能是默认值,在这种情况下,您只需按Enter键。)
  5. 键入p以validation分区是否正确。 它们应该看起来就像你现在所拥有的那样,除了/dev/sda1的结束点应该是/dev/sda4开始之前的一个扇区。
  6. 输入w以保存更改并退出。

无论你是遵循我的程序还是生锈, 都要注意 /dev/sda1中的文件系统有可能认为它可以在扇区257,433,597之外使用。 如果是这样,以这种方式修复磁盘可能会导致该分区出现问题。 实际上没有解决这个问题的方法,并且通过修复当前问题来改变它会冒着损坏分区表的风险,这会导致/dev/sda5消失或其内容被破坏,因此修复问题肯定是为了。 但是,为了降低损坏/dev/sda1的风险,我建议您在Windows中运行CHKDSK (或使用其GUI前端)来validation/dev/sda1完整性。 我不是肯定的,但我希望CHKDSK会检测到一个太小的容器分区。 如果分区对于文件系统来说太小,则可能需要执行文件系统resize以修复问题 – 但调整分区大小以最小化损坏/dev/sda5的风险之后执行此操作。 但这一切在很大程度上都是预防性的; 很有可能/dev/sda1中的文件系统没有调整到/dev/sda1末尾,在这种情况下,以我和生锈的方式调整分区大小不会导致问题。 (我们都告诉你们做同样的事情;我们只是用来完成工作的工具不同。)

下载当前支持的版本(12.04或13.10),启动它,并备份要从当前安装中保存的所有数据。 然后使用fdisk删除分区5和4,然后重新安装。

在GParted中resize/移动时,还有一个选项“Align to:”它列出了3个选项:

  • MIB
  • Cylinder /选择这个并重试 – 这对我有用
  • 没有

当我遇到同样的问题时,我在这里找到了它。 http://ubuntuforums.org/showthread.php?t=1980664&p=12319906#post12319906