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

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

我电脑上安装的 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

你可以帮帮我吗?

答案1

使用以下命令修复分区表sfdisk

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

  2. 确认磁盘设备上的问题,/dev/sda例如parted

    sudo parted /dev/sda unit s print
    

    应该显示:

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

    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
    
  4. 检查重叠:您可以看到主分区的末尾/dev/sda1与扩展分区的开头重叠/dev/sda4

    sda1结束= 257441624

    sda4启动= 257433598

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

    计算:

    sda1新结束=sda4启动- 1 = 257433598 - 1 = 257433597

    sda1新大小=sda1新结束-sda1启动+ 1 = 257433597 - 616448 + 1 =256817150

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

    sudo sfdisk -d /dev/sda应转储分区表详细信息。可将其转储到文件中,在进行必要的更正后,可将其反馈给sfdisk。[致原帖作者: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假设文件位于当前目录中,否则用文件的绝对路径替换它。)

    将旧的大小sda1( 256825177) 更改为更正的大小 ( 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+ Ofor nano)并关闭编辑器(Ctrl+ Xfor nano)。

  8. 使用以下命令将更正后的分区详细信息反馈给分区表sfdisk

    sudo sfdisk /dev/sda < sda-backup.txt
    
  9. parted通过在磁盘设备上运行以下命令确认问题是否已解决:

    sudo parted /dev/sda unit s print
    
  10. 如果第 9 步确认分区表已修复,则可以使用分区或与该设备相关的其他分区编辑器。


GParted 文档还建议使用另一种方法测试磁盘扫描磁盘设备以重建分区表。 testdisk 应用程序包含在GParted 直播。因此,如果您不习惯命令行方式,您可以尝试替代方法。

来源

答案2

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

答案3

Rusty 的建议应该可行,但有点吓人。同样的事情可以用fdisk更简单的方法完成:

  1. fdisk通过键入 在磁盘上启动sudo fdisk /dev/sda
  2. 通过键入查看分区表来验证您是否在正确的磁盘上工作p,并验证它是否显示您发布的相同分区。
  3. 键入d,当提示输入分区号时,键入1
  4. 键入n以创建新分区。出现提示时,输入p分区类型、1分区号(实际上,我认为fdisk不会提示此详细信息)、616448第一个扇区和257433597(扩展分区的起始点减 1)最后一个扇区。(最后一个扇区的值可能是默认值,在这种情况下,您只需按 Enter 即可。)
  5. 键入p以验证分区是否正确。它们应该看起来就像你现在得到的一样,只是终点应该/dev/sda1是一个扇区的开始/dev/sda4
  6. 键入w以保存更改并退出。

无论你是按照我的程序还是 Rusty 的程序,意识到有可能文件系统/dev/sda1认为它可以使用超过 257,433,597 个扇区。如果是这样,以这种方式修复磁盘可能会导致该分区出现问题。这个问题确实没有办法解决,避免它的方法如下:不是修复当前问题可能会损坏分区表,从而导致/dev/sda5消失或其内容损坏,因此修复问题绝对有必要。/dev/sda1不过,为了减轻损坏的风险,我建议您CHKDSK在 Windows 中运行(或使用其 GUI 前端)来验证的完整性/dev/sda1。我不确定,但我希望这CHKDSK会检测到太小的容器分区。如果分区对于文件系统来说太小,您可能需要执行文件系统调整大小来解决问题——但请这样做调整分区大小以尽量减少损坏的风险/dev/sda5。不过,所有这些主要是预防措施;很有可能 中的文件系统大小/dev/sda1未达到 的末尾/dev/sda1,在这种情况下,按照我和 rusty 建议的方式调整分区大小不会引起问题。(我们都告诉您做同样的事情;我们只是在用于完成工作的工具上有所不同。)

答案4

如果您可以访问任何 Windows 机器,只需打开分区管理器将其格式化为 NTFS。然后在 Linux 中再次将其格式化(我在 Mint 中使用磁盘)为所需的分区格式(在我的情况下为 EXT4)。

相关内容