如何缩小 LUKS 分区,`cryptsetup resize` 有什么作用?

Lek*_*eyn 19 partition encryption ext4 luks cryptsetup

我正在调整包含单个 ext4 文件系统(没有 LVM 或其他东西)的 LUKS 加密分区的大小。该cryptsetup FAQ建议删除旧的分区并重新创建它,但是,像浪费了很多时间的声音。因此,我想手动进行,仔细调整分区大小。

到目前为止,我认为我需要这样做:

  1. 创建文件系统的(加密)备份。重要的!在执行以下任务时,您不会是第一个丢失数据的人。
  2. 卸载现有的 ext4 文件系统(例如通过引导到 Live CD)。如果从 Live CD 启动,请使用以下命令挂载加密分区cryptsetup luksOpen /dev/sdXY ExistingExt4
  3. 调整现有 ext4 文件系统的大小
  4. cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
  5. 使用关闭/“卸载”LUKS 分区 cryptsetup luksClose ExistingExt4
  6. 缩小分区大小。

以上步骤是否正确?

在第 4 步中,我应该选择$SECTORS什么?这一步有必要吗?cryptsetup手册是不是真正描述性的resize选项:

resize <name>
    resizes an active mapping <name>.
    If --size (in sectors) is not specified, the size of the underlying
    block device is used.
Run Code Online (Sandbox Code Playgroud)

最后,如果我将 ext4 分区缩小 15 GiB,我是否可以安全地假设可以使用parted? 如果是,怎么做?如果重要的话,我的磁盘是 GPT 分区的。

Lek*_*eyn 17

备份(第 1 步)和卸载(第 2 步和第 3 步之间)后,运行fsck以确保文件系统健康:

e2fsck -f /dev/mapper/ExistingExt4
Run Code Online (Sandbox Code Playgroud)

除此之外,步骤还可以。

cryptsetup resize命令的目的

我应该为 $SECTORS 选择什么?这一步有必要吗?

这一步是必须的,否则分区仍然会出现在旧的一侧。Nautilus 证实了这一点,即使在使用 调整大小后resize2fs,LUKS 分区仍显示为旧大小。运行后cryptsetup resize,显示正确的数字。 这一步不是必须的。它只影响文件浏览器中显示的当前大小状态。更改大小并再次关闭/打开分区后,数字将恢复。因此,当关闭 LUKS 分区时(如下所示)将使此功能过时。

$SECTORS可以通过查看输出来确定cryptsetup status ExistingExt4

    /dev/mapper/ExistingExt4 处于活动状态。
      类型:LUKS1
      密码:aes-cbc-essiv:sha256
      密钥大小:256 位
      设备:/dev/sda2
      扇区大小:   512
      偏移量:2056 个扇区
      大小:     156049348 个扇区
      模式:读/写

(从cryptsetup 2.0.0(2017 年 12 月)开始,扇区大小可能大于 512 字节:请参阅cryptsetup(8)联机帮助页--sector-size选项。)

因此,要减去 15 GiB,请使用以下扇区大小156049348 - 15 * 1024 * 1024 * 2 = 124592068

cryptsetup resize ExistingExt4 -b 124592068
Run Code Online (Sandbox Code Playgroud)

调整分区大小 parted

至于调整分区大小,parted适用于 GPT 分区。resize但是,该命令不起作用,作为解决方法(或解决方案),删除分区信息并根据http://ubuntuforums.org/showthread.php?p=8721017#post8721017 的启发创建一个新分区:

# cryptsetup luksClose ExistingExt4 
# parted /dev/sda2
GNU 分拆 2.3
使用 /dev/sda
欢迎来到 GNU Parted!键入“help”以查看命令列表。
(parted)单位 s 
(parted) p
型号:ATA INTEL SSDSA2CW08 (scsi)
磁盘/dev/sda:156301488s
扇区大小(逻辑/物理):512B/512B
分区表:gpt

编号开始结束大小文件系统名称标志
 1 34s 2082s 2049s 启动 bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s 156301438s 156051404s 一切

由于必须削减 15 GiB,因此新的结尾变为156301438 - 15 * 1024 * 1024 * 2 = 124844158. 由于我想更改分区 2,我首先必须将其删除,然后使用标签“Everything”重新创建它(如果您愿意,可以更改)。注意:此磁盘具有 GPT 布局。对于 MBR,您应该替换Everythingprimaryor extended(未经测试,在 MBR 上调整分区大小尚未经过测试,建议使用,因为它未经测试)。

警告:以下命令破坏了数据。不要在不了解发生了什么的情况下复制它。扇区尺寸必须更改,否则您破坏您的分区。我对您的愚蠢概不负责,在冒着数据风险之前将您的数据备份第二个存储介质。

(parted) rm 2 
(parted) mkpart 一切 250035s 124844158s
警告:生成的分区没有正确对齐以获得最佳性能。
忽略/取消?忽略
(分开)p
型号:ATA INTEL SSDSA2CW08 (scsi)
磁盘/dev/sda:156301488s
扇区大小(逻辑/物理):512B/512B
分区表:gpt

编号开始结束大小文件系统名称标志
 1 34s 2082s 2049s 启动 bios_grub
 3 2083s 250034s 247952s ext2 RootBoot
 2 250035s   124844158s 124594124s               一切
(分开)退出

在上面的parted例子中,我的扇区没有对齐,这是早期安装的错误,不要太在意。

这就对了!您可以使用cryptsetup statusfile -Ls /dev/...来验证一切正常,然后重新启动。


And*_*nas 5

请注意,KDE 分区管理器 2.2.0可以执行这些步骤并且调整 LUKS 分区的大小可以很好地工作。

  • [KDE Partition Manager 4 还支持调整 LUKS2 卷的大小](https://old.reddit.com/r/kde/comments/agfi9y/kde_partition_manager_4_beta/)。截至 2020 年底,[GParted 不支持](https://gitlab.gnome.org/GNOME/gparted/-/issues/59)。 (2认同)