我正在尝试使用 Clonezilla 镜像我的 Ubuntu 磁盘,但它失败了,因为我收到一条错误消息:
错误不能有重叠分区
以下是我的磁盘的设置方式和输出lsblk
:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 42,2M 1 loop /snap/snapd/14066
nvme0n1 259:0 0 953,9G 0 disk
├─nvme0n1p5 259:3 0 976M 0 part [SWAP]
└─nvme0n1p1 259:1 0 952,9G 0 part /
这是输出fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 953,9 GiB, 1024209543168 bytes, 2000409264 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
Disklabel type: dos
Disk identifier: 0x6e617337
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 * 2048 1998407679 1998405632 952,9G 83 Linux
/dev/nvme0n1p2 1998409726 2000397734 1988009 970,7M 5 Extended
/dev/nvme0n1p5 1998409728 2000408575 1998848 976M 82 Linux swap / Sola
这是它在 gparted 中的显示方式:
有什么建议如何修复此错误以便我可以映像/保存我的磁盘吗?
答案1
答案改编自:如何修复 MBR 表中的重叠分区。您可以尝试这个,但我认为删除交换和逻辑分区是更简单的解决方案
修复分区表
sfdisk
:
使用 Live Ubuntu 磁盘启动;
确认您的磁盘设备上的问题,
/dev/sda
例如parted
sudo parted /dev/sda unit s print which should show: Error: Can't have overlapping partitions.
可以通过以下方式检查分区详细信息:
sudo fdisk -l -u /dev/sda
根据您的帖子,对您来说:
Disk /dev/nvme0n1: 953,9 GiB, 1024209543168 bytes, 2000409264 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
Disklabel type: dos
Disk identifier: 0x6e617337
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 * 2048 1998407679 1998405632 952,9G 83 Linux
/dev/nvme0n1p2 1998409726 2000397734 1988009 970,7M 5 Extended
/dev/nvme0n1p5 1998409728 2000408575 1998848 976M 82 Linux swap / Solaris
- 检查重叠:您可以看到扩展分区
/dev/nvme0n1p2
小于交换分区/dev/nvme0n1p5
。
为了让事情更清楚,您的交换分区位于扩展分区内部,因此理想情况下它的大小应该小于扩展分区大小。但在您的情况下交换大小大于逻辑分区大小本身。
Device Size
/dev/nvme0n1p2 970,7M
/dev/nvme0n1p5 976M
或者换句话说,nvme0n1p2 的结束扇区应该大于 nvme0n1p5 的结束扇区。但在你的情况下
nvme0n1p2结束=2000397734
nvme0n1p5结束=2000408575
这就是问题所在。
现在,您可以通过使用 gparted 减少交换分区大小来简单地解决这个问题。 (~ 600MB - 700MB)
或者您可以使用命令行工具:
sfdisk
使用 sfdisk
- 正如建议的文档那 -“如果我们不知道起始扇区或结束扇区是否有问题,我们假设每个分区的起始扇区是正确的,而结束扇区可能有错误”,我们假设扩展分区的起始扇区
nvme0n1p2
是正确的。因此,我们将寻求更改交换分区的结束扇区nvme0n1p5
。计算:
nvme0n1p5新结束=nvme0n1p2结束- 1 = 2000397734 - 1 = 2000397733
nvme0n1p5新大小= nvme0n1p5新结束- nvme0n1p5启动= 2000397733 - 1998409728 =1988005
- 使用以下命令将分区表的副本转储到文件中
sfdisk
:
sudo sfdisk -d /dev/sda
应该转储分区表详细信息。可以将其转储到文件中,在进行必要的更正后,可以将其反馈回sfdisk
. [致OP:sudo sfdisk -d /dev/sda
请编辑您的问题并包含]的输出使用以下命令转储分区表的副本:
sudo sfdisk -d /dev/sda > sda-backup.txt
使用您选择的文本编辑器以 root 权限打开在上一步中创建的文件。在示例中我将使用
nano
.sudo nano sda-backup.txt (`sda-backup.txt` assuming the file is in the current directory, else repalce it with the file's absolute
小路。)
nvme0n1p5
将( )的旧大小更改1998848
为更正后的大小 (1988005
),以便新的分区表转储如下所示:
输出未由 op 附加
保存文件 ( Ctrl+ Ofor
nano
) 并关闭编辑器 ( Ctrl+ Xfornano
)。
使用以下命令将更正后的分区详细信息反馈到分区表
sfdisk
:sudo sfdisk /dev/sda < sda-backup.txt
parted
通过在您的磁盘设备上运行来确认问题是否得到解决:sudo parted /dev/sda unit s print
如果步骤9确认分区表已修复,则可以使用格帕特或设备上的其他分区编辑器。
GParted 文档还建议了一种替代方法,使用 测试盘扫描磁盘设备以重建分区表。 testdisk 应用程序包含在GParted 现场直播。因此,如果您对命令行方式不满意,可以尝试其他方法。
使用Gparted
unmount your swap partition before continuing
- 当前状态
- 调整根分区的大小
- 调整大小之前的根分区
- 调整大小后的根分区
- 根分区后创建了空白空间
- 删除交换
- 删除逻辑分区
- 除根分区外的所有分区均已删除
- 创建新的逻辑分区
- 在分区之前留下一些可用空间(这样它就不会重叠)并选择分区类型为
Extended partition
- 现在应该是这样的
- 创建交换分区
- 分区后留下一些可用空间,使其不超过并选择文件系统作为
linux swap
- 现在应该是这样的
- 复制新交换的 UUID 并将其替换为
/etc/fstab