我管理过很多Linux服务器,使用Linux服务器比任何其他操作系统都容易。但有时我在 Linux 操作系统中遇到的一个问题是,文件系统损坏。在 Windows 服务器中不会出现此问题。
我在网上详细搜索了解决方案,大部分都是大家给出的建议。
- 保留备份和恢复
我的评论 ==> 100% 同意,但我正在寻找一个解决方案,我不需要费力地恢复崩溃的操作系统。
- 运行 fsck
我的评论 ==> 根据我的经验,有时会引入额外的问题。
- 正确关闭/重新启动。
我的评论 ==> 每个人都想正确关闭/重新启动。我说的是一种罕见的情况,即服务器没有响应或者我无法正确关闭或重新启动
- Btrfs==>
我的评论 ==> 对于生产来说不够稳定
- 升级到 Ext4
我的评论 ==> 已经使用 ext4
- 升级你的硬盘 我的评论 ==> 我们遇到的问题不是由于磁盘故障,主要是由于关机不当造成的。
我的 fsck 问题:
当我们使用 -y 选项运行时,fsck 有时会损坏文件系统
fsck 大约需要 1 或 2 天来修复系统,这对我来说在生产环境中是不合适的
我的问题是,在 btrfs 稳定之前,是否有任何解决办法来解决这个问题?
就像几分钟内“同步”一次文件系统一样。或编写一些脚本以在重新启动之前同步所有文件系统更改
我正在寻找这个问题的解决方案而不是建议。
答案1
ext4 应该能够抵抗甚至拔出插头的情况。然而,为此,它要求存储子系统不会丢失已提交的写入。
首先,确认您没有使用barrier=0
/进行安装nobarrier
。这通常会提高性能,但如果未执行适当的关闭,则会导致损坏。还要检查您的内核日志,以确保 ext4 不会禁用屏障,因为堆栈中的某些内容不支持它们。
接下来要尝试的事情是禁用磁盘写入缓存,至少在磁(非 SSD)磁盘上是如此。有时,磁盘会在实际将数据写入盘片时撒谎,这可以提高性能(只要电源不中断)。通常您可以使用hdparm -W0
(对于 IDE/SATA)或sdparm --clear=WCE
(对于 SCSI/SAS)来执行此操作。这些可能需要添加到您的启动脚本中,特别是对于 SATA,它可能会通过电源循环重置为默认值。
有一个(相当旧的)脚本来确认写入缓存不会丢失数据;看Brad Fitzpatrick 的 diskchecker.pl 博客文章了解该脚本以及如何使用它。
不幸的是,如果您使用的是 SSD 并且遇到了问题,您可能只需要找到不同的磁盘。