我在 LVM 上运行 ext4 文件系统。我正在研究的两大加速选项是 LVM 缓存和外部 ext4 日志。
听起来如果我为此使用单个 SSD,写回模式下的 LVM 缓存与将 ext4 日志放在外部设备上是一样的……基本上,如果发生任何事情,您将重置为日志前位置。
这是一个正确的解释吗?
我在 LVM 上运行 ext4 文件系统。我正在研究的两大加速选项是 LVM 缓存和外部 ext4 日志。
听起来如果我为此使用单个 SSD,写回模式下的 LVM 缓存与将 ext4 日志放在外部设备上是一样的……基本上,如果发生任何事情,您将重置为日志前位置。
这是一个正确的解释吗?
外部日志与 LVM 缓存设备完全不同。SSD 上用于写回的 LVM 缓存不会是易失性的,因此对数据完整性的担忧并不大(除非该缓存设备突然发生故障 - 而且该缓存设备实际上可以是 RAID本身通过 Linux MD 或类似的)。
EXT4 意图日志由许多小型写入组成,这些写入受益于快速低延迟的存储设备,无论是外部设备还是存储数据的同一设备。将旋转介质用于数据磁盘时,这与高度随机和跨国工作负载相关。
回写缓存将写入合并在一起,因此写入大部分是顺序的,但不区分数据和元数据,特别是日志。它将站在所有写入之前,缓存所有内容,然后在给定缓存数据集的刷新期间以尽可能顺序的方式将写入排队到磁盘。刷新命令与写屏障命令同时发送(以给定的时间间隔),确保其支持设备上的非损坏状态。
如果写回缓存突然完全死掉,你会在文件系统上浪费一些时间,但它仍然是一致的。(编辑:此声明在下面的评论中直接存在争议,该评论警告严重的文件系统损坏。)这可以通过 RAID1 缓存设备来缓解。
如果日志设备死机,您将无法挂载文件系统,直到使用
# tune2fs -O ^has_journal /path/to/ext4device
. 在这种情况下,您必须使用完整的 fsck 扫描来修复此文件系统(在某些情况下会花费很多时间)。如果在断电期间或之前发生这种情况,您也可能会看到损坏。所以,我相信正确的解决方案是在直写模式下使用 LVM 缓存,在同一设备上使用 ext4 日志......或者在更好的设置中使用不同的设备。
逻辑是 ext4 日志是唯一保证一致性的东西,所以你必须使用它。一个外部 ssd 设备可以大大加快速度。写回模式下的 LVM 缓存将允许损坏,因为它推迟了简单的块写入。在直写模式下,它仍然会加快读取速度,但会通过写入,在这种情况下,ext4 仍然会直接放在同一个缓存磁盘上,几乎与直写相同,但一切都保证一致。
我会等一会儿给自己投票,以防有更好的回应。