如何在Linux中调整LUKS分区的大小(缩小或者扩展加密的luks分区)

时间:2020-02-23 14:40:19  来源:igfitidea点击:

在本文中,将介绍调整LUKS分区大小的步骤。
我们可以减少或者扩展加密的LUKS分区,具体取决于后端文件系统和设备类型。

我可以调整dm-crypt或者LUKS分区的大小吗?

免责声明:cryptsetup的官方页面

是的,我们可以,因为dm-crypt和LUKS都不存储分区大小。
是否应该是另一个问题。
我个人建议备份,重新创建具有新大小的加密分区,重新创建文件系统并还原。
这避免了调整文件系统大小的棘手事务。
调整dm-crypt或者LUKS容器的大小不会调整其中文件系统的大小。
备份其中实际上是非可选的,因为可能会出错,从而导致部分或者全部数据丢失。

使用gparted之类的方法来调整加密分区的大小很慢,但是通常可以。
但是,这不会更改隐藏在加密下的文件系统的大小。

我们还需要注意基于大小的限制。
当前相关的一个问题是,不应将aes-xts-plain用于大于2TiB的加密容器大小。
为此使用aes-xts-plain64.

如我们所见,执行调整大小的LUKS分区时,不建议扩展或者收缩加密的LUKS分区。

现在,我早些时候共享了使用LUKS加密分区设备/dev/sdb1的步骤,但是其中我想使用LVM作为后端存储设备来执行以ext4作为文件系统的大小调整LUKS分区。

与使用LVM一样,减少/缩小和扩展加密的LUKS分区(逻辑卷)变得更加容易。

我的实验室环境

我正在使用在装有CentOS 8的Linux服务器上安装的Oracle VirtualBox上运行的VM,以执行以下步骤来调整LUKS分区的大小并执行扩展或者收缩加密的LUKS分区。

因此可以肯定地说相同的步骤将在RHEL 8上起作用。

早些时候,我在RHEL/CentOS 7上执行了相同的步骤。
如果在执行这些步骤时遇到任何问题,请使用本文下面的注释部分进行报告。

还是手动安装Linux?

我建议使用Network PXE Boot Server配置"一键安装"。

使用PXE服务器,我们可以安装Oracle虚拟机或者基于KVM的虚拟机或者任何类型的物理服务器,而无需任何人工干预,从而节省了时间和精力。

使用cryptsetup创建LUKS加密的LVM

因此,我将快速创建基于LVM的LUKS加密分区。

提示:

我已经在下面的文章如何在Linux中使用LUKS加密硬盘(分区)中说明了使用LUKS加密磁盘的所有命令。

[root@centos-8 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.

添加新的物理卷后,使用pvs验证可用的物理卷列表:

[root@centos-8 ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  rhel lvm2 a--  <14.50g     0
  /dev/sdb1       lvm2 ---   <8.00g <8.00g

使用vgs获取可用卷组的列表

[root@centos-8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  rhel   1   2   0 wz--n- <14.50g    0

我将扩展现有的VGrhel,而不是创建一个新的:

[root@centos-8 ~]# vgextend rhel /dev/sdb1
  Volume group "rhel" successfully extended

验证卷组的新大小:

[root@centos-8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  rhel   2   2   0 wz--n- <14.50g    0

检查可用逻辑卷的列表:

[root@centos-8 ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root rhel -wi-ao----  13.56g
  swap rhel -wi-ao---- 956.00m

我将创建一个新的逻辑卷密码,它将用作LUKS加密分区的设备

[root@centos-8 ~]# lvcreate -n secret -L 2G  rhel
  Logical volume "secret" created.

检查逻辑卷的新列表

[root@centos-8 ~]# lvs
  LV     VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   rhel -wi-ao----  13.56g
  secret rhel -wi-a-----   2.00g
  swap   rhel -wi-ao---- 956.00m

初始化LUKS分区

现在创建受密码保护的LUKS格式的加密卷/dev/mapper/secret

[root@centos-8 ~]# cryptsetup luksFormat /dev/rhel/secret
WARNING!
========
This will overwrite data on /dev/rhel/secret irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/rhel/secret:
Verify passphrase:

我们将使用luksOpen打开加密分区并将其映射到/dev/mapper/secret
其中将创建/dev/mapper/secret

[root@centos-8 ~]# cryptsetup luksOpen /dev/rhel/secret secret
Enter passphrase for /dev/rhel/secret:

我将对LUKS分区使用ext4文件系统,我们可以根据需要选择文件系统类型以调整LUKS分区的大小

[root@centos-8 ~]# mkfs.ext4 /dev/mapper/secret
mke2fs 1.44.3 (10-July-2016)
Creating filesystem with 522240 4k blocks and 130560 inodes
Filesystem UUID: d6b707da-04c5-4c19-9c9d-5e1df2332488
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

现在要访问LUKS分区,请将其安装在安装点上。
在之前的文章中,我已经创建了一个挂载点/secret,因此我将使用相同的路径:

[root@centos-8 ~]# mount /dev/mapper/secret /secret/

验证是否正确安装了LUKS分区

[root@centos-8 ~]# mount | grep secret
/dev/mapper/secret on /secret type ext4 (rw,relatime)

调整LUKS分区的大小

现在,这是设置实验室环境的所有准备工作。
从这里开始,我们将从调整LUKS分区大小的步骤开始。

首先让我们扩展加密的LUKS分区。
目前,我的LUKS分区为2GB,我们将调整大小并将其扩展到3GB。
我们的rhelVG中大约有8GB可用空间,因此我们可以轻松地通过额外的1GB调整大小和扩展加密的LUKS分区。

警告:

我已经给出了免责声明,执行以下步骤来调整LUKS分区的大小并减少或者扩展加密的LUKS分区或者卷可能会带来风险。

任何时候进行此类操作时,万一出了问题,必须提供数据备份是至关重要的。

增加或者扩展加密的LUKS分区卷

由于我们的LUKS加密卷被映射到/dev/mapper/secret卷,我们将使用相同的卷来扩展加密的LUKS分区,并增加1GB的空间。
使用df检查需要扩展的文件系统,例如:

[root@centos-8 ~]# df -h /secret/
Filesystem          Size  Used Avail Use% Mounted on
/dev/mapper/secret  2.0G   47M  2.0G   3% /secret

/dev/mapper/secretLUKS卷的当前大小为2GB。
通过查询" MAPPING"来找出支持设备是什么

提示:

使用blkid -t TYPE = crypto_LUKS -o设备获取Linux系统上可用的LUKS设备列表。

[root@centos-8 ~]# cryptsetup status secret
/dev/mapper/secret is active and is in use.
  type:    LUKS2
  cipher:  aes-xts-plain64
  keysize: 256 bits
  key location: keyring
  device:  /dev/mapper/rhel-secret
  sector size:  512
  offset:  16384 sectors
  size:    4177920 sectors
  mode:    read/write

备用设备将始终在以下设备上列出:/dev/XXXX行。
在上面的示例中,后备设备是/dev/mapper/rhel-secret

在扩展加密的LUKS分区之前先卸载文件系统

[root@centos-8 ~]# umount /secret

cryptsetup luks关闭dm-crypt卷关闭映射

[root@centos-8 ~]# cryptsetup luksClose secret

接下来,使用lvextend命令扩展加密的LUKS分区。
其中我们希望为现有的LUKS卷增加1GB

[root@centos-8 ~]# lvextend -L +1G /dev/rhel/secret
  Size of logical volume rhel/secret changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
  Logical volume rhel/secret successfully resized.

验证机密逻辑卷的新大小

[root@centos-8 ~]# lvs
  LV     VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   rhel -wi-ao----  13.56g
  secret rhel -wi-a-----   3.00g
  swap   rhel -wi-ao---- 956.00m

接下来打开LUKS加密分区/dev/mapper/secret进行大小调整

[root@centos-8 ~]# cryptsetup luksOpen /dev/rhel/secret secret
Enter passphrase for /dev/rhel/secret:

检查LUKS加密卷的新大小

[root@centos-8 ~]# cryptsetup status secret
/dev/mapper/secret is active.
  type:    LUKS2
  cipher:  aes-xts-plain64
  keysize: 256 bits
  key location: keyring
  device:  /dev/mapper/rhel-secret
  sector size:  512
  offset:  16384 sectors
  size:    6275072 sectors
  mode:    read/write

将大小与我们上次执行的命令输出进行比较,这是我们在本文前面所做的。
较早的机密容量为4177920,而新的容量为6275072扇区。
此处LUKS分区的大小调整尚未完成。

在执行最后的步骤以扩展加密的LUKS分区之前,请执行文件系统检查

[root@centos-8 ~]# e2fsck -f /dev/mapper/secret
e2fsck 1.44.3 (10-July-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/secret: 11/65280 files (0.0% non-contiguous), 13574/260096 blocks

由于文件系统检查已通过,请执行resize2fs来调整LUKS分区的大小

[root@centos-8 ~]# resize2fs -p /dev/mapper/secret
resize2fs 1.44.3 (10-July-2016)
Resizing the filesystem on /dev/mapper/secret to 784384 (4k) blocks.
The filesystem on /dev/mapper/secret is now 784384 (4k) blocks long.

接下来将LUKS加密分区挂载到其挂载点

[root@centos-8 ~]# mount /dev/mapper/secret /secret/

提示:

如果我们使用的是XFS文件系统,则必须首先挂载DEV MAPPING,然后使用xfs_grow执行lvmextend执行xfs_grow来扩展分区,例如xfs_growfs/secret /

验证新的分区大小

[root@centos-8 ~]# df -h /secret/
Filesystem          Size  Used Avail Use% Mounted on
/dev/mapper/secret  3.0G   54M  3.0G   2% /secret

减少或者缩小加密的LUKS分区卷

警告:

-修改任何系统之前,始终建议先创建备份,因为这样会增加数据损坏的风险,同时减小LVM的大小。

-在GFS2或者XFS文件系统上不支持收缩,因此我们不能减少或者收缩包含GFS2或者XFS文件系统的加密LUKS分区卷。

要缩小加密的LUKS分区,可以使用lvreduce命令。
确保已卸载磁盘,因此在不需要磁盘活动时必须执行此操作。

[root@centos-8 ~]# umount /secret

在调整LUKS分区的大小之前,重要的是运行文件系统检查以验证数据完整性:

[root@centos-8 ~]# e2fsck -f /dev/mapper/secret
e2fsck 1.44.3 (10-July-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/secret: 11/195840 files (0.0% non-contiguous), 22022/784384 blocks

我希望LUKS分区仍处于Open状态以缩小LUKS加密的分区,如果没有使用luksOpen在设备映射器上映射LUKS分区的话。

[root@centos-8 ~]# cryptsetup luksOpen /dev/rhel/secret secret
Enter passphrase for /dev/rhel/secret:

其中我们将缩小LUKS加密分区/dev/mapper/secret的逻辑卷:

[root@centos-8 ~]# blkid /dev/mapper/secret
/dev/mapper/secret: UUID="d6b707da-04c5-4c19-9c9d-5e1df2332488" TYPE="ext4"

使用缩小后希望的LUKS量大小执行lvreduce
其中我的LUKS卷为3GB,我希望从该卷中删除1GB,因此,我的LUKS加密卷的最终大小应为2GB。

提示:

在RHEL 5中,要调整LUKS分区的大小,还必须在运行lvreduce之前执行resize2fs,例如其中resize2fs/dev/mapper/secret 2G

[root@centos-8 ~]# lvreduce -r -L 2G /dev/rhel/secret
fsck from util-linux 2.32.1
/dev/mapper/secret: clean, 11/195840 files, 22022/784384 blocks
resize2fs 1.44.3 (10-July-2016)
Resizing the filesystem on /dev/mapper/secret to 522240 (4k) blocks.
The filesystem on /dev/mapper/secret is now 522240 (4k) blocks long.
Enter passphrase for /dev/mapper/rhel-secret:
  Size of logical volume rhel/secret changed from 3.00 GiB (768 extents) to 2.00 GiB (512 extents).
  Logical volume rhel/secret successfully resized.

接下来将LUKS卷安装到其安装点

[root@centos-8 ~]# mount /dev/mapper/secret /secret/

验证" secret"卷的新大小,以确保我们能够缩小LUKS加密分区的大小

[root@centos-8 ~]# df -h /secret/
Filesystem          Size  Used Avail Use% Mounted on
/dev/mapper/secret  2.0G  6.0M  1.9G   1% /secret