我有两个物理设备,一个快速 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 卷( -> -> -> )。root
ssd
ext4
/
/dev/sda3
/dev/mapper/luks-...
/dev/mapper/ssd-root
/
- HDD 已打开并提供一个 LUKS 容器,该容器在( -> -> -> )的卷组中
/dev/sdb
托管 LVM 卷。dump
dump
/home
/dev/sdb1
/dev/mapper/luks-...
/dev/mapper/dump-dump
/home
- 我将调整
/
文件系统的大小,为大约 7.5GB 的加密(!)缓存腾出空间来提供服务/home
。 - 请注意,LVM、LUKS、分区表和文件系统使用不同的块大小(例如,我的 LVM 卷包含每个 4mb 的范围,我的 ext4 文件系统、LUKS 和分区是每个 512 字节的块/扇区)。选择尺寸以便对齐。
- 仔细检查您手动输入的所有数字以确保一致性。仔细检查您最终得到的文件系统是否大于逻辑卷、逻辑卷是否大于物理卷、物理卷是否大于 LUKS 容器或 LUKS 容器是否大于逻辑卷。比分区大。
用于
lsblk
再次提醒自己有关自己的设置。重新启动至 LiveCD 并打开新的终端会话。如果您想避免所有对sudo
...的调用,请切换到root我们将多次需要 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
减小文件系统的大小。
resize2fs
首先强制执行文件系统检查。我会将文件系统的大小调整为/
20 GB。sudo fsck -f /dev/mapper/ssd-root sudo resize2fs -p /dev/mapper/ssd-root 20g
这个过程需要一段时间。请注意输出“文件系统现在是 XYZ 块长”以及每个块的大小(在我的例子中为 5242880 个 4k 块)。
停用并减小支持文件系统的逻辑卷的大小。
-参数
-L
默认以兆字节为单位。sudo lvchange -an /dev/mapper/ssd-root sudo lvreduce -L 20480 /dev/mapper/ssd-root
减小支持逻辑卷的物理卷的大小。
请注意,LUKS 和 LVM 会产生一些开销,因此物理卷应保持比逻辑卷稍大。我添加了两个范围。
sudo pvresize --setphysicalvolumesize 20488 /dev/mapper/$SDA3UUID
减小 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更大比它包含的物理卷和文件系统(这就是你的对齐方式)。减小分区大小并为缓存创建新分区。
首先停用逻辑卷和容器。
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
在新分区上创建一个新的 LUKS 容器来托管加密缓存。
sudo cryptsetup luksFormat /dev/sda4 SDA4UUID=luks-`sudo cryptsetup luksUUID /dev/sda4`
打开 HDD 的 LUKS 容器并扩展最终
/home
由新设备托管的卷组。sudo cryptsetup open /dev/sdb1 $SDB1UUID
lvs
应显示卷组dump
现在处于活动状态。sudo cryptsetup open /dev/sda4 $SDA4UUID sudo vgextend dump /dev/mapper/$SDA4UUID
为缓存的元数据和缓存本身创建逻辑卷。
据说元数据卷应该是缓存本身大小的 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
将缓存添加到托管的逻辑卷
/home
。sudo lvconvert --type cache --cachepool dump/lv_cache dump/dump
输出应该类似于“逻辑卷转储/转储现在已缓存”。
进行更新
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
祈祷并重新启动到原来的系统。
重新启动后,您可以获得一些有关缓存的统计信息,如下所示:
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) 来执行此操作:
如果您有LVM
,LUKS
我相信根据设备管理器的解释,缓存将是未加密的https://help.ubuntu.com/community/EncryptedFilesystemHowto。我LUKS
相信LVM
会缓存加密数据。
LVM
这是在 之上时调整大小的一个很好的参考LUKS
:https://help.ubuntu.com/community/ResizeEncryptedPartitions。人们应该能够以相反的方式适应这一点。
请注意,最好设置一个测试系统来验证该过程和/或使用经过测试/验证的恢复过程进行全面恢复。