如何将 dm-cache 添加到现有的 luks 设置中?

如何将 dm-cache 添加到现有的 luks 设置中?

我有两个物理设备,一个快速 SSD 和一个大 HDD。 SSD位于VG中ssd并最终充当挂载点/,HDD位于VG中dump并充当挂载点/home。两者都经过LUKS加密,格式均为ext4。我可以轻松地在 SSD 上腾出 40GB 空间作为 HDD 的缓存,我想知道是否可以在不重新格式化的情况下更改 LV 设置。

是否可以减小根文件系统的大小,然后减小 LV 的大小,添加两个新的 LV 用于缓存和元数据,并附加新创建的缓存池来为 HDD 提供服务?提醒我如何以这种方式进行设置,使未加密的数据不会泄漏到缓存中......

答案1

我现在已经提取了足够的信息来回答我自己的问题。以下是我的步骤,供其他人遵循。

通常免责声明:修改现有文件系统及其底层设备可能会导致数据损坏和丢失。提前计划,备份您的数据:-)

如果您按照以下步骤操作,我开始使用的部分文件系统布局可能不适用于您的设置,请相应地进行调整:

  • 我正在使用 Fedora 21。
  • SSD 处于打开状态/dev/sda,提供 /boot ( sda1)、swap ( ) 和一个 LUKS 容器,该容器在格式化的卷组中sda2托管 LVM 卷( -> -> -> )。rootssdext4//dev/sda3/dev/mapper/luks-.../dev/mapper/ssd-root/
  • HDD 已打开并提供一个 LUKS 容器,该容器在( -> -> -> )的卷组中/dev/sdb托管 LVM 卷。dumpdump/home/dev/sdb1/dev/mapper/luks-.../dev/mapper/dump-dump/home
  • 我将调整/文件系统的大小,为大约 7.5GB 的加密(!)缓存腾出空间来提供服务/home
  • 请注意,LVM、LUKS、分区表和文件系统使用不同的块大小(例如,我的 LVM 卷包含每个 4mb 的范围,我的 ext4 文件系统、LUKS 和分区是每个 512 字节的块/扇区)。选择尺寸以便对齐。
  • 仔细检查您手动输入的所有数字以确保一致性。仔细检查您最终得到的文件系统是否大于逻辑卷、逻辑卷是否大于物理卷、物理卷是否大于 LUKS 容器或 LUKS 容器是否大于逻辑卷。比分区大。

  1. 用于lsblk再次提醒自己有关自己的设置。重新启动至 LiveCD 并打开新的终端会话。如果您想避免所有对sudo...的调用,请切换到root

  2. 我们将多次需要 LUKS 容器的 Fedora 常用名称。首先将它们放入变量中

    SDA3UUID=luks-`sudo cryptsetup luksUUID /dev/sda3`
    SDB1UUID=luks-`sudo cryptsetup luksUUID /dev/sdb1`
    

    $SDA3UUID现在保存设备的 UUID /$SDB1UUID/home

    使用 LUKS打开/设备。 LVM 将发现容器内的卷并使其可用(如/dev/mapper/ssd-root我的情况)。

    sudo cryptsetup open /dev/sda3 $SDA3UUID
    
  3. 减小文件系统的大小。

    resize2fs首先强制执行文件系统检查。我会将文件系统的大小调整为/20 GB。

    sudo fsck -f /dev/mapper/ssd-root
    sudo resize2fs -p /dev/mapper/ssd-root 20g
    

    这个过程需要一段时间。请注意输出“文件系统现在是 XYZ 块长”以及每个块的大小(在我的例子中为 5242880 个 4k 块)。

  4. 停用并减小支持文件系统的逻辑卷的大小。

    -参数-L默认以兆字节为单位。

    sudo lvchange -an /dev/mapper/ssd-root
    sudo lvreduce -L 20480 /dev/mapper/ssd-root
    
  5. 减小支持逻辑卷的物理卷的大小。

    请注意,LUKS 和 LVM 会产生一些开销,因此物理卷应保持比逻辑卷稍大。我添加了两个范围。

    sudo pvresize --setphysicalvolumesize 20488 /dev/mapper/$SDA3UUID
    
  6. 减小 LUKS 容器的大小。

    -参数-b以块形式给出。使用pvdisplay并计算为物理盘区总数 * 盘区大小 * 1024**2 / 512(例如python -c "print 5121*4*1024**2/512"

    sudo cryptsetup resize -b 41951232 $SDA3UUID
    

    用于sudo cryptsetup status $SDA3UUID了解容器的新尺寸。就我而言,容器大小为 2mb更大比它包含的物理卷和文件系统(这就是你的对齐方式)。

  7. 减小分区大小并为缓存创建新分区。

    首先停用逻辑卷和容器。

    sudo cryptsetup luksClose $SDA3UUID
    sudo fdisk /dev/sda
    

    删除原来的分区sda3。创建一个新分区,该分区与旧分区位于同一扇区(!),大小为“+XYZ”(在我的例子中为“+41951232”)。还要创建一个新分区来填充设备(在我的例子中为 7.5GB)。将分区表写入磁盘并退出fdisk

    检查文件系统是否仍然存在:

    sudo cryptsetup open /dev/sda3 $SDA3UUID
    

    lvs应该显示逻辑卷。

    sudo fsck -f /dev/mapper/ssd-root
    
  8. 在新分区上创建一个新的 LUKS 容器来托管加密缓存。

    sudo cryptsetup luksFormat /dev/sda4
    SDA4UUID=luks-`sudo cryptsetup luksUUID /dev/sda4`
    
  9. 打开 HDD 的 LUKS 容器并扩展最终/home由新设备托管的卷组。

    sudo cryptsetup open /dev/sdb1 $SDB1UUID
    

    lvs应显示卷组dump现在处于活动状态。

    sudo cryptsetup open /dev/sda4 $SDA4UUID
    sudo vgextend dump /dev/mapper/$SDA4UUID
    
  10. 为缓存的元数据和缓存本身创建逻辑卷。

    据说元数据卷应该是缓存本身大小的 0.1%,但至少 8mb。再次注意,存在一些开销,因此我选择缓存大小为物理卷剩余大小的 99%。

    sudo lvcreate -L 20M -n lv_cache_meta dump /dev/mapper/$SDA4UUID
    sudo lvcreate -l 99%FREE -n lv_cache dump /dev/mapper/$SDA4UUID
    sudo lvconvert --type cache-pool --poolmetadata dump/lv_cache_meta dump/lv_cache
    
  11. 将缓存添加到托管的逻辑卷/home

    sudo lvconvert --type cache --cachepool dump/lv_cache dump/dump
    

    输出应该类似于“逻辑卷转储/转储现在已缓存”。

  12. 进行更新crypttab,以便在引导期间打开新的 LUKS 容器。

    mkdir root
    sudo mount /dev/mapper/ssd-root root
    sudo su
    UUID=`cryptsetup luksUUID /dev/sda4`
    echo "luks-$UUID UUID=$UUID none" >> root/etc/crypttab
    exit
    sudo umount root
    
  13. 祈祷并重新启动到原来的系统。

    重新启动后,您可以获得一些有关缓存的统计信息,如下所示:

    lvs --rows -o +devices,cache_total_blocks,cache_used_blocks,cache_dirty_blocks,cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses dump
    

现在你就得到了它。

答案2

我会使用lvmcache(7)which 利用dm-cache.关于这样做的好文章:

https://rwmj.wordpress.com/2014/05/22/using-lvms-new-cache-feature/

据作者称,这需要使用单个卷组。因此,您需要合并卷组。请参阅以下链接,其中使用 vgmerge(8) 来执行此操作:

https://sites.google.com/site/rhelworldexperience/home/rhel-disk-management---tips-and-tricks/mergingvolumegroupsinrhel-vgmerge

如果您有LVMLUKS我相信根据设备管理器的解释,缓存将是未加密的https://help.ubuntu.com/community/EncryptedFilesystemHowto。我LUKS相信LVM会缓存加密数据。

LVM这是在 之上时调整大小的一个很好的参考LUKShttps://help.ubuntu.com/community/ResizeEncryptedPartitions。人们应该能够以相反的方式适应这一点。

请注意,最好设置一个测试系统来验证该过程和/或使用经过测试/验证的恢复过程进行全面恢复。

相关内容