首先是故事:我将我的 Windows 分区“移到左边”,然后无法(双)启动 Windows,尝试了 Win8 CD 上的修复选项...现在似乎有超过 4 个主分区。gparted
现在显示整个磁盘未分配“不能有重叠分区”。
分区表如下所示(从实时 CD 查看):
ubuntu@ubuntu:~$ sudo parted /dev/sda unit s print
Error: Can't have overlapping partitions.
ubuntu@ubuntu:~$ 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: 0x000524e5
Device Boot Start End Blocks Id System
/dev/sda1 2046 134217727 67107841 5 Extended
/dev/sda2 134217728 150798335 8290304 82 Linux swap / Solaris
/dev/sda3 * 150798336 151515135 358400 7 HPFS/NTFS/exFAT
/dev/sda4 * 237004800 237721599 358400 7 HPFS/NTFS/exFAT
/dev/sda5 237721600 488394751 125336576 7 HPFS/NTFS/exFAT
/dev/sda1
是我的 ext4 Linux 分区曾经所在的位置。我知道答案GParted 在我的 sda 驱动器上显示“未分配”(与 Win XP 并行启动)还读了很多书。我知道我只能有 4 个主分区,并且/dev/sda5
应该位于扩展分区内 - 导致出现“重叠”警告。
我不知道的是:我该如何解决这个问题?我宁愿保留我的旧 Linux 分区 - 但即使我不这样做,我也不能重新安装 Ubuntu,因为磁盘处于无效状态。而且我很幸运,Windows 运行良好/dev/sda5
,我宁愿不删除这个分区。
我还不明白:这两个小分区 3 和 4 有什么用?我假设 Windows 已将它们创建为启动分区或类似的东西...那么,我可以删除其中一个吗?Windows 将第二个分区安装为 D:,并显示文件,包括Temp\disklayout.txt
磁盘上的信息,就像在“修复”之前一样:
Partition ### Typ Größe Offset
------------- ---------------- ------- -------
Partition 0 Erweitert 63 GB 1023 KB
Partition 4 Logisch 63 GB 1024 KB
Partition 1 Primär 8096 MB 64 GB
Partition 2 Primär 350 MB 113 GB
Partition 3 Primär 119 GB 113 GB
非常感谢您提供的帮助指导!
更新 1
我尝试使用sfdisk
修改后的表将多余的分区写入磁盘,从而删除多余的分区。当最后一个分区出现两次时,我就会fdisk
删除它。结果看起来不错。
/dev/sda1 : start= 2046, size=134215682, Id= 5
/dev/sda2 : start=134217728, size= 16580608, Id=82
/dev/sda3 : start=237004800, size= 716800, Id= 7, bootable
/dev/sda4 : start=237721600, size=250673152, Id= 7
当我尝试使用时fixparts
,它的分析是......令人恼火:
MBR command (? for help): p
** NOTE: Partition numbers do NOT indicate final primary/logical status,
** unlike in most MBR partitioning tools!
** Extended partitions are not displayed, but will be generated as required.
Disk size is 488397168 sectors (232.9 GiB)
MBR disk identifier: 0x000524E5
MBR partitions:
Can Be Can Be
Number Boot Start Sector End Sector Status Logical Primary Code
2 134217728 150798335 logical Y Y 0x82
3 * 237004800 237721599 logical Y Y 0x07
4 237721600 488394751 primary Y 0x07
虽然sfdisk
显示了第一个分区,但是fixparts
不会。
更新 2
好吧,好吧。我不太走运fixparts
,但testdisk
成功了。不是我一个人成功了,但关键部分成功了。以下是对我有帮助的内容(我是从曾经失落的 Ubuntu,jippi 写的)——可能对其他人也有帮助。
提前警告:我从来没想过摆弄分区表会这么有趣!但如果磁盘上有重要数据,最好不要这么做(没有完整的磁盘备份)。
- 第一部分可能更容易,只需
fdisk /dev/sda
删除多余的分区。- 通过以下方式下载分区表
fsdisk -d /dev/sda > SomeUSBFile
- 手动从此文件中删除多余的分区(并相应地更改剩余分区的编号)
- 通过以下方式写入修改后的分区表
fsdisk /dev/sda < SomeUSBFile
- 删除了最后一个分区,现在通过
fdisk
- 通过以下方式下载分区表
- Linux 分区仍然缺失,所以我
testdisk
从 Ubuntu Live USB 棒运行。它发现实际上没有扩展分区,而是主 Linux 分区。但它没有看到 Windows 10 分区。- 所以我再次将分区表写入文件
fsdisk -d /dev/sda > SomeUSBFile
- 让
testdisk
我们写入新的分区表(搜索分区后找到的分区表), - 将此分区表导出到另一个文件,
- 复制 linux 分区的行,然后
- 将此行插入到原始分区表文件中
- 通过 导入此修改后的版本
fsdisk /dev/sda < SomeUSBFile
。
- 所以我再次将分区表写入文件
- Windows 仍可运行:)
- 然后,ubuntu live-USB 允许挂载 linux 分区(这很奇怪,因为我在 linux 安装期间启用了加密...),并将新的 grub MBR 安装到 /dev/sda(http://howtoubuntu.org/how-to-repair-restore-reinstall-grub-2-with-a-ubuntu-live-cd)
- 最后,必须在 gparted 中重新创建交换分区(旧分区现在在 gparted 中为“未知”)。
答案1
我的FixParts 实用程序(Ubuntu 软件包的一部分gdisk
)可能能够修复该问题;但是,我不能保证这一点——您的逻辑分区完全位于分配给扩展分区的空间之外,这可能会使它陷入困境。(这个问题极其罕见,我不记得 FixParts 如何读取 MBR 分区表的足够细节,无法预测它会如何反应。)您可以尝试在磁盘上运行 FixParts 并查看分区表,看看它是否可以毫无风险地检测到您的分区——它不会保存分区表,除非您告诉它这样做(通过选项w
)。
如果 FixParts 在磁盘上剥落,至少还有另外三种选择:
- 使用
fdisk
或其他工具,删除部分或全部分区,然后重新创建它们。您已经显示的输出提供了您所需的一切——起点和终点(以扇区为单位)以及分区类型代码。 - 删除所有分区,然后使用测试磁盘恢复有效的分区表。此方法通常是最后手段,有时会失败,但如果您在使用上述方法时遇到问题,此方法可能会有所帮助。
- 备份所有分区的内容,清除分区表,创建新分区,然后恢复分区的内容。这是一项艰巨的任务,您可能会遇到重新启动所有分区的问题,因此我只会在万不得已的情况下才这么做。不过,在尝试其他方法之前,建议先备份。
正如 oldfred 所说,Windows 分区工具在处理包含扩展分区和逻辑分区的 MBR 分区表时不可靠。我建议尽可能避免使用它。