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