初步建议
如果您无法承受任何数据丢失的损失(我的意思是一旦用户输入了新数据,如果在接下来的几秒钟内不会丢失这些数据)并且由于您没有UPS之类的东西,那么我将不会消除写入障碍,我也不会切换回写回。
删除写屏障
如果删除写屏障,则在崩溃或断电的情况下,文件系统将需要执行fsck来修复磁盘结构(请注意,即使启用barrier,大多数日记文件系统甚至仍会执行fsck尽管该日志的重放本来就足够了)。删除写屏障时,建议尽可能删除所有磁盘缓存(在硬件上),这有助于最大程度地降低风险。但是,您应该基准化此类更改的影响。您可以尝试使用此命令(如果您的硬件支持)hdparm -W0 /dev/<your HDD>
。
请注意,ext3对元数据更改使用2个障碍,而当使用mount选项时,ext4仅使用1个障碍journal_async_commit
。
尽管Ted T'so解释了为什么在ext3的早期发生了一些数据损坏(默认情况下,在内核3.1之前,屏障是默认关闭的),但是日志的放置方式除非发生日志日志换行(日志是循环日志)数据以安全顺序写入磁盘-首先记录日志,其次是数据-即使硬盘支持对写入进行重新排序。
基本上,不幸的是日志日志换行时会发生系统崩溃或断电。但是,您需要保留data=ordered
。尝试data=ordered,barrier=0
另外进行基准测试。
如果您有能力丢失几秒钟的数据,则可以激活这两个选项data=writeback,barrier=0
,然后尝试使用该commit=<nrsec>
参数。在此处检查手册以获取此参数。基本上,您要花几秒钟的时间,这是ext3文件系统将同步其数据和元数据的时间。
您也可以尝试使用一些关于脏页(需要写入磁盘的内核可调参数)的内核可调参数进行基准测试,这里有一篇很好的文章介绍了有关这些可调参数的所有内容以及如何使用它们。
有关障碍的摘要
您应该对可调参数的更多组合进行基准测试:
- 使用
data=writeback,barrier=0
会同hdparm -W0 /dev/<your HDD>
- 采用
data=ordered,barrier=0
- 使用
data=writeback,barrier=0
结合其他安装选项commit=<nrsec>
,并尝试nrsec不同的值
- 使用选项3.,然后在内核级别尝试对脏页进行进一步的可调。
- 使用安全的
data=ordered,barrier=1
,但尝试其他可调参数:尤其是文件系统升降器(CFQ,Deadline或Noop)及其各自的可调参数。
考虑转移到ext4并对其进行基准测试
如上所述,对于ext4来说,其写入所需的障碍要少于ext3。此外,ext4支持扩展区,该扩展区可能会为大型文件带来更好的性能。因此,它是一个解决方案值得探讨,特别是因为它很容易从一个ext3到ext4迁移而无需重新安装:正式文件 ; 我是在一个系统上执行此操作的,但是使用的是Debian指南。从内核2.6.32开始,Ext4确实很稳定,因此可以安全地用于生产中。
最后的考虑
这个答案远未完成,但是它为您提供了足够的材料来开始调查。这在很大程度上取决于需求(在用户或系统级别),因此很难直接给出答案,对此感到遗憾。