在故障磁盘上的ext4。 如何避免重新安装只读?

问题:

我负责一个包含44个节点的Hadoop集群。 我们有1.5TB的WD绿色驱动器(不知道)负载循环计数的问题。

这些磁盘工作正常,但随着他们变老,他们显示越来越多的坏块。 重写这些坏块有一段时间,但他们重新出现在不同的地方。

由于大多数这些磁盘只用于Hadoop datanodes,我们没有预算来取代他们所有我正在寻找一个战略

  1. 不要疯狂维护集群,几乎每天都会出现磁盘错误和相关的文件系统问题。 我目前的习惯是:

    • 停止Hadoop服务,卸载磁盘,使用dmesg输出和smartctl定位坏块,并用hdparm --write-sector重写这些坏块。
    • 在磁盘上运行fsck -f -y并重新挂载它。
  2. 保持系统稳定。

    • Hadoop处理磁盘错误(减less3倍),但我宁愿不想冒损坏的文件系统的风险。

我做了什么?

目前我已经改变了mount选项:

  • erros=continue,noatime但是由于日志错误erros=continue,noatime我得到了occosial的只读remount。

然后我试着禁用日志:

  • tune2fs -O ^has_journal这避免只读tune2fs -O ^has_journal但似乎破坏文件系统(这是有道理的,没有日记)

现在我正在考虑切换到

  • tune2fs -o journal_data_writeback并使用data=writeback,nobh,barrier=0

但是我不确定这是否重新引入了只读重新安装。

所以,我想避免只读重新安装,希望维护稳定的文件系统元数据,但不关心数据中的错误(Hadoop负责这一点)。 速度也不应该受到影响。

我有什么select? 我知道,这可能是任何系统pipe理员的噩梦故事。 操作系统分区挂载完整日记,我不会去testing生产数据。 这是严格的Hadoop数据节点/任务跟踪器硬盘。

你可以做的最好的事情是取代磁盘。 磁盘的成本不会因为集群的成本下降而损失大量的工作时间来修复坏块。 所以即使没有预算,我也会认真地试着说服你的pipe理层。

如果你绝对需要使用这些驱动器,我build议使用mkfs -c -c…来让文件系统让mkfs检查坏块。

你可以尝试像btrfs这样的另一个文件系统,看看它是否工作得更好,但最终的正确答案是“replace磁盘”。