根据网上的各种指南,我尝试减少 LUKS 加密的硬盘分区(具体来说,是根/数据)。我已经到了 GParted 识别新的未分配空间的地步,但它“卡在”原始分区内。在下面的屏幕截图中,您可以看到未分配的空间只有 1 MB(什么都没有),但突出显示的数据分区内部有一半未分配:
如果你问数据分区怎么了,它说它有我想要的未分配空间:
因此,我排队调整大小,将其缩小到最小大小(~250 GB),它向我展示了这个美丽的预览,正是我想要的想(给我约 198 GB 未分配的空间作为单独的分区):
但是当我执行调整大小时,它失败,如下所示:
它认为它已经缩小了?但是啊,它没有给我“未分配的空间”作为分区!上面漂亮的预览恢复到本文中的第一个屏幕截图。
我也尝试过 KDE 分区工具,它的行为方式基本相同。此外,我尝试从单独的活动磁盘执行调整大小,以便我正在调整大小的分区不会安装,并且再次出现相同的行为。另一个有趣的点是磁盘实用程序的想法:
我绝对没有磁盘管理经验,所以我当然备份了我的数据,并考虑从一开始就擦拭机器并缩小分区,但我觉得我已经很接近了?是否缺少一个简单的步骤,或者还远远没有完成?
答案1
问题是,当您调整分区内文件系统的大小时,分区本身的大小并未调整。可以将其想象为将脚放入完美合脚的鞋子中。您已将脚(文件系统)变小,但鞋子(分区)的大小相同,因此鞋子中有未使用的空间。你需要买一双小一点的鞋子。
分区只是存储在GPT(GUID分区表)中的一个概念。它存储分区的起始位置和结束位置。您需要计算该分区的新结束分区并更新 GPT。
公式为NEW_PARTITION_SECTOR_END = PARTITION_SECTOR_START + (LUKS_SIZE_SECTORS + LUKS_OFFSET_SECTORS) - 1。这是我从https://wiki.archlinux.org/index.php/Resizing_LVM-on-LUKS#Resize_the_partition
在您的情况下,您需要执行“sudo parted /dev/nvme0n1”,然后使用“resizepart”命令。您可以使用打印命令从parted本身获取PARTITION_SECTOR_START的值。 LUKS_OFFSET_SECTORS 和 LUKS_SIZE_SECTORS 可以从“cryptsetup status cryptdata”获取。将它们全部加在一起,就会得到新的最终值。
重要提示:请注意,当您使用parted时,请确保首先键入“unit”命令,将单位更改为“s”(代表扇区)。