将 LUKS 分区移至左侧并调整其大小

将 LUKS 分区移至左侧并调整其大小

我有一个 LUKS 加密分区,它不在 LVM 卷管理器中。它位于硬盘驱动器的末尾,大小为 250 GB,但我想再添加 50 GB。

我通常会使用 GParted 进行此类操作,但它不允许我对 LUKS 分区进行任何操作,甚至不允许移动。

我怎样才能做到这一点而不丢失数据?(我没有其他地方可以备份)

这是我的(GUID)分区表:

GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D630E573-66C0-4902-A4A2-A9D56AE54544
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 262922206 sectors (125.4 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          411647   200.0 MiB   EF00  
   2          411648        63326207   30.0 GiB    8300  Linux filesystem
   3       189155328       273041407   40.0 GiB    AF00  
   4       273041408       304498687   15.0 GiB    8300  
   5       336732160       337141759   200.0 MiB   0700  
   6       337141760       347627519   5.0 GiB     8200  
   8       452485120       976773134   250.0 GiB   8300  Linux filesystem

它在 GParted 中的样子如下:

在此处输入图片描述

如您所见,我想将 sda6 和 sda8 之间的 50GB 添加到 sda8。

您能帮我将 /dev/sda8 向后移动,以便我可以扩展其中的加密卷和文件系统吗?

答案1

9 年前,当这个问题首次被提出时,我确信 Gparted 无法移动 LUKS 分区,但现在可以了。昨天,我成功调整了两个 LUKS 分区的大小并进行了移动,这两个分区都保护着 ext4 文件系统。

我使用的是 Gparted live CD 版本 1.5.0-6-amd64。

我发现的唯一问题是 ext4 文件系统必须从 LUKS 分区的开头启动。

我将使用一个虚假示例来描述该过程。最初,我有一个完整的硬盘,其中有两个分区:

  • /dev/sda1 (100GB)
  • /dev/sda2 (900gb)

我想将 sda2 缩小 100gb,将 sda1 增加 100gb。过程如下:

  1. 启动进入 Gparted live
  2. 解锁 sda2 luks 分区
  3. 在 LUKS 分区的开始处将 ext4 sda2 文件系统缩小到 800gb。
  4. 锁定 sda2 luks 分区。
  5. 将 luks sda2 分区缩小到 800gb(此时硬盘末尾有 100gb)
  6. 将 sda2 移动到 HDD 末尾(长时间操作)。
  7. 将 sda1 扩展到 200gb
  8. 解锁 sda1 luks 分区
  9. 将 sda1 ext4 文件系统大小调整为 200gb。

使用 Gparted GUI 一切都非常简单。

答案2

这实际上比听起来要难。原因是,当分区被锁定时,LUKS分区必须引用分区表中引用的磁盘上的一个非常具体的位置才能解密。那个位置在分区的最左边LUKS,我认为是在它正在加密的文件系统的开头前几个字节。LUKS文件系统只能在LUKS分区未加密时扩展。所以你可以看到向右扩展比向左扩展更容易,因为向左扩展时出错的可能性更大。

我能够使用 来做到这一点KDE Partition Manager 3.3.1,使用KDE Neon可启动 USB。不过,我要提醒的是,我在KDE Partition Manager版本 之前遇到了一个错误2.2.0。我的设置是扩展(逻辑)分区前面的加密 LUKS 分区,扩展分区前面的硬盘上有 40 GB 的可用空间。我需要将扩展​​分区向左移动,然后将分区向左移动LUKS到扩展分区的前面,然后解密分区,向右LUKS扩展分区以包含新数据,最后再次加密分区。 (,我从 获得)的早期版本能够将分区向左扩展,但我不太愿意接受这一改变,因为由于没有特别支持 ,我不完全确定 是否能够在重启后找到分区并解锁它。因此,我尝试在可启动 USB上进行编译,但应用程序无法像该版本那样将扩展分区物理拖到左边。因此,我在可启动 USB 上加载了每日构建,然后在该设备上进行编译(连同)。同样的问题。但在这两种情况下,都存在一些编译问题,我不得不通过直接编辑 Make 文件来解决这些问题,原因是我在 Ubuntu 中进行编译,而不是使用原生 KDE 库的 Ubuntu 版本。因此,我在可启动 USB 上安装了 Neon,直接通过软件下载器下载并安装,再次遇到了同样的错误——我无法将扩展卷向左移动。现在可以很好地做到这一点,但它不支持。所以我鼓起勇气,做了以下事情,成功了:LUKSLUKSKDE Partition Manager1.xapt-getUbuntu 16.04 LTSKDE Partition ManagerLUKSGRUBKDE Partition Manager 2.2.0Ubuntu 16.04 LTS1.xUbuntu 18.04 LTSKDE Partition Manager 3.3.1KDE Core 3.3.0KDE Partition Manager 3.3.1gpartedLUKS

  1. 备份整个硬盘。
  2. sudo apt-get install gpartedKDE Neon
  3. 我曾经gparted将扩展分区向左移动了 40 GB,然后保存了更改。(我想我必须先关闭交换空间。)这在扩展分区内创建了 40 GB 的可用空间,位于我的LUKS卷的左侧。然后我退出了gparted。我对此的主要担心是,由于gparted不支持 LUKS,我担心它可能会LUKS因为对齐原因而移动卷的前部并实际上使其无法打开。因此,在进行任何编辑之前,我仔细记下了LUKS分区开始的确切磁盘扇区,然后不必使用这些笔记。
  4. 在 中KDE Partition Manager 3.3.1,我将(加密的)LUKS卷向左移动。只需右键单击卷LUKS,选择Resize/Move,我认为您只需将 GUI 中的图标拖到左侧即可。您知道您做对了,因为LUKS移动分区之前和之后分区都是红色的,表示它一直处于锁定状态(因此分区表本质上记录了磁盘上 LUKS 将在用户登录时继续进行解密的新位置)。然后我单击Apply changes并等待。
  5. 在 中KDE Partition Manager 3.3.1,我右键单击卷LUKS并选择Unencrypt(可能是open)并输入我的密码。然后我右键单击同一分区,然后单击Resize/Move...。然后我将分区的右边缘拖到右侧以包含 40 GB 的可用空间。然后我Apply changes再次单击。
  6. 我右键点击解锁的LUKS分区,重新加密。图标从浅蓝色变回红色。
  7. 我重新打开了交换空间(这是必要的,因为 Linux 交换空间位于我的扩展分区内)。然后我退出KDE Partition Manager,关机并使用刚刚分区的主硬盘重新启动。我能够解密驱动器并顺利登录。呼!

非常感谢 Andrius Stikonas 维护这个非常有用的应用程序。上次我移动 LUKS 分区时,它正在使用这些步骤这真是一场噩梦。

这是使用CLIKDE Partition Manager运行它时打印到控制台的输出:sudo partitionmanager

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Loaded backend plugin:  "pmlibpartedbackendplugin"
"Using backend plugin: pmlibpartedbackendplugin (1)"
"Scanning devices..."
"Device found: ATA ST500LM021-1KJ15"
blkid: unknown file system type  ""  on  "/dev/sda4"
"Partition ‘/dev/sda4’ is not properly aligned (last sector: 976773167,    modulo: 48)."
"Device found:  USB DISK 2.0"
getting smart status failed for  "/dev/sdb" :  Operation not supported
"Partition ‘/dev/sdb2’ is not properly aligned (first sector: 404, modulo: 404)."
"Partition ‘/dev/sdb2’ is not properly aligned (last sector: 5139, modulo: 1044)."
"Scan finished."
"Add operation: Move partition ‘/dev/sda8’ to the left by 40.50 GiB"
"Applying operations..."
"Using backend plugin: pmlibpartedbackendplugin (1)"
"Scanning devices..."
"Device found: ATA ST500LM021-1KJ15"
"Partition ‘/dev/sda4’ is not properly aligned (last sector: 976773167, modulo: 48)."
"Device found:  USB DISK 2.0"
getting smart status failed for  "/dev/sdb" :  Operation not supported
"Partition ‘/dev/sdb2’ is not properly aligned (first sector: 404, modulo: 404)."
"Partition ‘/dev/sdb2’ is not properly aligned (last sector: 5139, modulo: 1044)."
"Scan finished."
"Add operation: Grow partition ‘/dev/sda8’ from 101.77 GiB to 142.26 GiB"
"Applying operations..."
"Using backend plugin: pmlibpartedbackendplugin (1)"
"Scanning devices..."
"Device found: ATA ST500LM021-1KJ15"
"Partition ‘/dev/sda4’ is not properly aligned (last sector: 976773167, modulo: 48)."
"Device found:  USB DISK 2.0"
getting smart status failed for  "/dev/sdb" :  Operation not supported
"Partition ‘/dev/sdb2’ is not properly aligned (first sector: 404, modulo: 404)."
"Partition ‘/dev/sdb2’ is not properly aligned (last sector: 5139, modulo: 1044)."
"Scan finished."
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
kdeinit5: preparing to launch '/usr/lib/x86_64-linux-gnu/libexec/kf5/klauncher'
kdeinit5: Launched KLauncher, pid = 28349, result = 0
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Connecting to deprecated signal      QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
kdeinit5: opened connection to :0
kdeinit5: Got EXEC_NEW '/usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/kio/file.so' from launcher.
kdeinit5: preparing to launch '/usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/kio/file.so'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
kdeinit5: Got EXEC_NEW '/usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/kio/file.so' from launcher.
kdeinit5: preparing to launch '/usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/kio/file.so'
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
kdeinit5: PID 28354 terminated.
kdeinit5: PID 28353 terminated.

看到那行写着blkid: unknown file system type "" on "/dev/sda4"/dev/sda4是我的扩展分区,我怀疑这个blkid进程的 NULL 响应可能是导致错误的原因。但我真的不知道。无论如何,希望这对你有帮助。

答案3

使用 KDE Partition Manager 2.2.0 或更高版本。它支持移动、创建甚至调整 LUKS 分区的大小。

编辑:使用 KPM:基本上 GUI 是不言自明的,它向您展示了类似于 GParted 的分区图(参见原始问题中的图片)。然后您只需单击移动按钮即可移动 LUKS 分区。要调整 luks 分区的大小,您需要先将其解锁,因为 KDE 分区管理器需要调整内部文件系统的大小,而 LUKS 加密被锁定时则无法做到这一点。因此,您需要分两步进行,首先移动锁定的 luks 分区,然后解锁/调整大小。

相关内容