如何在Linux中调整LUKS分区的大小(缩小或者扩展加密的luks分区)
在本文中,将介绍调整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。
我们的rhel
VG中大约有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