在本文中,有一个很好的秘诀,说明如何将 RAM 磁盘用作经典 LVM 卷的缓存设备。
假设您有一个较旧的磁盘、大量 RAM 并且没有 SSD,您可以使用此技术将磁盘性能提高到本机 RAM 吞吐量。
因此,我在用于运行 Windows 10 的虚拟 VM 的 LVM 上执行此操作。瞧:VM 内的磁盘吞吐量快 4 倍(平均吞吐量,最好在修补 Windows 时使用)。
一切都很好——直到我关闭了我的 linux 系统(CentOS 7)。
数据丢失!
关机不会反汇编该缓存。在电源故障情况下也是如此(是的 - 会有数据丢失)。
但是 - 必须有一种方法来恢复剩下的东西。但是 LVM 不允许您在缺少磁盘的 VG 上进行操作。
那么 - 这个案子有收据吗?
喜欢
- 使用新磁盘恢复丢失的 LVM 缓存磁盘
- 强制清洁状态
- 再次访问缓存的LV
在最后一步中,将进行文件系统修复并从备份中恢复丢失/损坏的文件(使用 rsync)。
不,不完全是。一旦缓存充满了写入,写入吞吐量就会降低到底层磁盘的能力。并且从支持磁盘的第一次读取仍然很慢。缓存的 I/O,是的更快。
这种方法非常危险,因为它非常不是永久性磁盘。当您可以获得快速固态磁盘或硬件写入缓存时,我对该实用程序持怀疑态度,但测试故障模式很有趣。
这将导致数据丢失。只有在您有数据备份的情况下才能继续。
首先,没有缓存。
添加缓存。
当它回来时,LVM 很不高兴,卷不可访问。
您甚至不能强制取消缓存它,因为元数据有 I/O 错误。
但是您可以通过创建具有相同 UUID 的新 PV 来强制丢失数据。取消缓存它以删除 LVM 认为其中仍有数据但丢失的 ramdisk PV。你可以用 重新添加新的缓存
lvconvert
,但我不打算在这个实验的结果之后。最后,检查任何文件系统损坏。需要从备份中恢复才能使您的数据恢复到良好状态。
编辑:添加一个具有相同 UUID 的空 PV 似乎超级 hacky。毕竟,lvconvert 拒绝取消缓存它。相反,如果您将元数据 LV 放在永久磁盘上,那么清理起来会更容易一些。
可以强制取消缓存。不要让“Flushing 0 blocks”输出让您放心,正在进行的写入已经丢失。然后可以删除丢失的 ramdisk,使 VG 再次保持一致。