Ubuntu 20.04 下 Seagate IronWolf 硬盘周期性发出咔嗒声

Ubuntu 20.04 下 Seagate IronWolf 硬盘周期性发出咔嗒声

我有三个新的 Seagate IronWolf Pro HDD。它们运行良好:

  • 我可以在上面写字和读书
  • 他们通过了所有测试

我遇到的一个问题是它们在空闲时发出令人担忧的声音。声音是重复的“嗒嗒嗒……”,每个嗒嗒声间隔约 0.5 秒。“嗒嗒”声非常强烈,我能感觉到桌子上的震动。再次,驱动器工作正常,如果我将一个大文件复制到这些驱动器,咔嗒声就会消失,似乎驱动器不知道如何空闲。噪音可能在安装驱动器后 1 或 2 秒开始。

以下是我迄今为止为解决该问题所采取的措施:

  • 头部停车过多:我发现的第一个解释是 Ubuntu 端的电源管理导致了过多的磁头停车,这可以通过 来解决hdparm -B254 /dev/sda,但我的驱动器不支持此命令。

  • 使用 hdparm 强制驱动器进入空闲状态:我尝试了诸如hdparm -y /dev/sda、之类的命令hdparm -S0 /dev/sda。每次注册命令时,点击声音都会停止一秒钟,然后立即恢复。

  • 停用 SMART 监控:我发现一些驱动器监控记录导致了一些噪音问题,所以我将其停用,但没有成功。

  • 升级固件:我考虑过升级固件,但似乎我已经有了最新的固件。

  • 停用 EPC/Idle_a/Idle_b:使用 Seagate 的工具 SeaChest,我可以修改给定驱动器的电源设置。到目前为止,我尝试禁用不同的空闲模式,禁用 EPC,但没有成功。

我有另一台较小的台式机,操作系统相同(Ubuntu 20.04),但 Seagate 硬盘不同(Seagate Exos 而不是 Seagate IronWolf)。这台硬盘工作正常,所以问题可能出在 Ubuntu 和 Ironwolf 硬盘之间的兼容性上。

知道这是否是已知问题吗?是否有办法解决?我不相信这种怠速声音对驱动器来说是一件好事。

编辑1:

我在 Ubuntu 18 上重现了同样的行为,我的 Seagate Exos 当前在同一个系统上顺利运行。

我在硬盘支架上加了一些橡胶垫,现在几乎听不到声音了。我仍然不完全确定这是正常的。我不明白为什么 Seagate Exos 超级安静,而 IronWolf Pro 却不是。我试图联系 Seagate,但不知为何联系不上他们。

编辑2:

我仍然可以辨别出周期性的咔哒声,所以我最终编写了一个愚蠢的 Python 脚本来继续将东西写入磁盘:

import time

if __name__ == "__main__":
    while True:
        with open("./stupid_file.txt", "w") as fs:
            for _ in range(1000000):
                fs.write("This is the last time I'm buying an IronWolf HDD. \n")
                time.sleep(0.001)

我在安装驱动器的地方运行它:python3 dumb_script.py

我仍然可以听到一些微弱的咔嗒声,但至少现在它不是周期性的......我仍然感兴趣是否有人可以确认这种咔嗒声是否正常。

编辑3:

即使没有运行脚本,点击也完全停止了。我不知道为什么,但现在一切都正常了。这可能只是硬盘的初始化阶段吗?

解决方案:

@Levente 是对的,这是由于 ext4 的惰性初始化造成的,请参阅他的回答以找到解决方案。

答案1

这是一个可能的解释,以及可行的解决方法:


“这可能只是硬盘的一个初始化阶段吗?”——没错,我认为这叫做 ext4 文件系统(“懒惰”)初始化。当您为 ext4 文件系统格式化磁盘时,默认行为是初始格式化会很快发生,但随后初始日志记录需要在空闲时间稍后完成;它可能会持续几个小时(或者谁知道要持续多久……)。

但是可以以这样一种方式启动 ext4 文件系统,即初始化在前面进行:这样,该过程将花费更长的时间,但之后不需要后续的“懒惰”过程。

过程识别:

我不记得日志记录过程是如何称呼的,但至少现在我发现我已经确定了罪魁祸首iotop(后来在网上搜索,找到了有关懒惰及其对策的信息):

sudo apt install iotop
sudo iotop -o

更新:本文,我了解到该过程可能被称为ext4lazyinit

不要再懒惰了:

因此,当我发现我的全新磁盘正在延迟初始化时,我没有等待它完成;相反,在卸载分区之后,我按照下面提出的参数在其上重新创建了文件系统:

sudo mkfs -t ext4 -L some_label -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdxX

(据记录,这会破坏您已复制到该分区上的所有数据。)

答案2

在调查“ext4lazyinit”之后,我在超级用户上发现了这个主题: https://superuser.com/questions/784606/forcing-ext4lazyinit-to-finish-its-thing

对我来说,解决方案是编辑 fstab 并将“init_itable=0”添加到特定硬盘。之后,惰性初始化过程以 40 倍速度运行,并在半小时内在 14 TiB 磁盘上完成。

相关内容