如何在dm-crypt / LVM卷中增长一个ext4文件系统?

我有一个这种格式的磁盘:

sdc 8:32 0 1,8T 0 disk └─sdc1 8:33 0 1,8T 0 part ├─vg-lv1 (dm-0) 254:0 0 900G 0 lvm /media/lv1 └─vg-lv2 (dm-1) 254:1 0 923G 0 lvm └─lv2 (dm-9) 254:9 0 923G 0 crypt /media/lv2 

lv2是一个ext4文件系统,但它下面的块设备(逻辑卷vg-lv2 )是用dm-crypt

什么是安全地增长这个文件系统的步骤?

我已经放大了逻辑卷,我知道我将不得不resize2fs ,但我猜我将不得不在dm-crypt层做些什么。

我首先用两个步骤创build了这个文件系统(在伪shell脚本中):

  • 消毒块设备

    1. lvcreate vg-lv2
    2. $randompassword = $(pwgen)
    3. cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/mapper/vg-lv2 $randompassword ,以$randompassword为关键字。
    4. cryptsetup luksOpen /dev/mapper/vg-lv2 sanitize
    5. nice -20 ionice -c 3 dd if=/dev/zero of=/dev/mapper/sanitize bs=1M
    6. cryptsetup remove sanitize
  • 准备生产使用的块设备

    1. select一个密码
    2. cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/mapper/vg-lv2使用新的密钥 – 密钥cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/mapper/vg-lv2
    3. cryptsetup luksOpen /dev/mapper/vg-lv2 lv2
    4. mke2fs /dev/mapper/vg-lv2 (我不记得参数,但可能没有)

准备生产时,将未encryption的块设备归零(有效地在encryption设备中写入伪随机数据)。

现在,由于我想发展文件系统,所以在使用之前,我也应该做出第一步和消毒。 这是我不怎么做的:

  1. 我可以调用resize的函数,并最终使用整个空间,但是我对这个想法感到不舒服。
  2. 我可以将逻辑卷缩小到之前的大小,创build一个新的逻辑卷,在其中执行这些步骤,然后删除它,再次增长LV,并希望它占据之前已消毒逻辑卷的空间(“希望”是我不喜欢这种方法的原因)
  3. 毫无疑问,我必须知道/dev/mapper/vg-lv2上的偏移量,以及dd if=/dev/zero of=/dev/mapper/vg-lv2 bs=1M skip=$SKIPBLOCKS 。 我不能得到这个$SKIPBLOCKSvariables错了,所以我实际上需要知道的是,如果已经存在的文件系统,它是第一个空的块之后,我怎么能知道,所以我可以随机化这个空间。

您可以通过resize来调整dmcrypt的resize

 cryptsetup --help|grep -i resize resize <name> - resize active device 

完成之后,您可以resizeresize2fs

至于你对随机数据的评论:你也可以在文件系统中做到这一点。 所以,调整它的大小,安装它,然后用随机文件填充每个最后一个字节:

 dd if=/dev/urandom of=/deleteme bs=1M 

然后删除该文件。

(为获得最佳结果,请使用tune2fs将保留块计数设置为0%(暂时))