注意:这是对是否有办法保护 SSD 免受因断电而损坏的后续问题?. 我在那里得到了很好的信息,但它基本上集中在三个方面,“获得 UPS”、“获得更好的驱动器”,或者如何处理 Postgres 的可靠性。
但我真正想知道的是,我是否可以采取任何措施来保护 SSD 免受元数据损坏,尤其是在旧写入时。回顾一下这个问题。它是金士顿消费级 SSD 上启用写入缓存的 ext4 文件系统,我们看到了以下类型的问题:
- 具有错误权限的文件
- 已成为目录的文件(例如,toggle.wav 现在是一个包含文件的目录)
- 已成为文件的目录(不确定内容..)
- 带有乱码数据的文件
这些事情发生在驱动器出现故障时或不久之前正在写入的数据上,问题就不那么重要了。这是一个问题,但这是意料之中的,我可以通过其他方式处理它。
更大的惊喜和问题是,磁盘上最近未写入的区域(即一周或更长时间)发生了元数据损坏。
我试图了解这样的事情是如何在磁盘/控制器级别发生的。这是怎么回事?即使我在其他地方写,SSD 是否会定期“重新平衡”并移动块?像这样:
然后在重写 D 时会出现功率损耗。块 1 上可能会留下一些碎片,而块 2 上可能会留下一些碎片。但我不知道它是否可以这样工作。或者也许还有其他事情发生..?
总而言之-我想了解这是如何发生的,以及我是否可以采取任何措施来缓解操作系统级别的问题。
注意:“获得更好的 SSD”或“使用 UPS”在这里不是有效的答案——我们正试图朝着这个方向前进,但我必须接受现实,并用我们现在拥有的东西找到最好的结果。如果这些磁盘没有解决方案并且没有 UPS,那么我想这就是答案。
参考:
SSD 驱动器的 ext3 分区上的突然断电后文件系统损坏是“预期行为”吗? 这很相似,但不清楚他是否遇到了我们所遇到的问题。
编辑:我也一直在阅读 ext4 可能存在断电问题的问题。我们的有日记,但我不知道其他任何事情。
http://www.pointsoftware.ch/en/4-ext4-vs-ext3-filesystem-and-why-delayed-allocation-is-bad/
最好的办法是通过告诉磁盘不要进行写缓存(查看 hdparm 和 smartctl 选项并希望磁盘支持它们)来禁用磁盘上的写缓存,并使用同步和目录同步等挂载选项使操作系统不缓冲写入.
有关意外电源故障后如何发生元数据损坏,请在此处查看我的其他答案。
禁用缓存可以显着降低飞行中数据丢失的可能性;但是,根据您的 SSD,静态数据仍然存在损坏的风险。此外,它会导致巨大的性能损失(我看到 500+ MB/s SSD 在禁用私有 DRAM 缓存后仅以 5 MB/s 的速度写入)。
如果您不能信任您的 SSD,唯一的“解决方案”(或者,更确切地说,解决方法)是使用端到端校验和文件系统作为 ZFS 或 BTRFS和RAID1/镜像设置:以这种方式,任何最终的单-设备(元)数据损坏可以通过运行检查/清理从另一镜像端恢复。