我正在尝试在混合 SSD+HD 环境中组合使用 LUKS+LVM+LVM 缓存的复杂设置(Debian)。
要使用 SSD 上的分区(lvmcache 卷的分区大小:20 GB)作为 LVM 缓存,我需要将其添加到与其充当缓存的卷相同的卷组中。这些卷将位于 HD 上(/home 和 /var/lib/docker)。
我经历了大部分手动安装步骤(分区、加密和解锁),直到我意识到我无法安全地执行此操作,因为 SSD 分区和 HD 分区上的块大小不同。默认情况下,SSD 上的块大小为 512,HD 上的块大小为 4096。
如何将 SSD 分区上的块大小更改为 4096?任何磁盘上都没有数据,因此我可以执行任何所需的破坏性步骤。
我认为从寿命的角度来看,SSD 上的块大小最好为 4096,因为这意味着更少的读/写周期。我确实丢失了一些空间,但我并不担心这一点,因为几乎所有大分区都将位于硬盘上。
答案1
我假设您正在尝试更改块大小,因为 LVM 不允许在一个 VG 中混合具有不同块大小的 PV。您可以/etc/lvm/lvm.conf
通过更改allow_mixed_block_sizes
为 来更改此设置1
。但如果您这样做,您必须确保永远不会创建使用两个 PV 的逻辑卷,否则您将丢失数据(这就是 LVM 默认情况下不允许这样做的原因)。我不知道如果 LV 位于一个 PV 上并且缓存在第二个 PV 上会发生什么。它可能会起作用,因为混合扇区大小 PV 的数据损坏发生在文件系统级别,而缓存发生在块级别,因此它可能是安全的,但我不会冒险。
您还可以在 LUKS/dm-crypt 级别“修复”此问题,并创建具有相同 4096 扇区大小的两个 LUKS 设备(使用 选项--sector-size 4096
)cryptsetup luksFormat
,但您再次面临数据丢失的风险,在这种情况下,由于电源故障,dm-crypt 无法保证原子写入在具有 4096 个扇区的 512 扇区磁盘上(您可以创建完整的 LUKS 来防止这种情况发生,但要以性能和磁盘空间为代价)。
我可能会将 4096 驱动器切换到 512(如果它支持,大多数 NVMe 驱动器都支持),这里的性能损失不会那么糟糕。
答案2
根据mke2fs
手册页:-b block-size 以字节为单位指定块的大小。有效的 block-size 值为每块 1024、2048 和 4096 字节。如果省略,block-size 将由文件系统大小和文件系统的预期用途启发式地确定(参见 -T 选项)。如果 block-size 前面有一个负号(“-”),则 mke2fs 将使用启发式方法确定适当的块大小,但限制块大小至少为 block-size 字节。这对于要求块大小为 2k 倍数的某些硬件设备很有用。
然后,文件系统的块大小似乎为 1024 或更高(在 ext2 及更高版本上)。你无法改变的是硬件的块大小,这是硬件的一种行为。