当不应该使用硬盘时听到硬盘驱动器的声音

当不应该使用硬盘时听到硬盘驱动器的声音

有时我会听到硬盘在实际工作,但实际上没有任何东西在使用它。有没有办法让我看看是什么在激活它?

答案1

安装iotop包。这是top查看每个进程使用了​​多少 IO 的命令版本。

答案2

您可以使用以下命令从内核获取详细信息(假设它是使用 CONFIG_FTRACE 配置的)iosnoop,来自 Brendan Gregg 跟踪和表演收藏的脚本之一。例如:

$ sudo /opt/perf-tools-master/bin/iosnoop
Tracing block I/O. Ctrl-C to end.
COMM         PID    TYPE DEV      BLOCK        BYTES     LATms
chromium-bro 19962  R    8,0      21573632     16384      1.89
jbd2/sda3-41 416    WS   8,0      63562984     4096       2.00
kworker/1:1H 288    WS   8,0      129725080    32768      1.96
<idle>       0      WS   8,0      129725144    4096       0.39
jbd2/sda1-23 231    WS   8,0      8137984      4096       0.09
gawk         5839   WS   8,0      10314904     4096       0.35
jbd2/sda3-41 416    WS   8,0      173342200    4096       1.96
gawk         5839   WS   8,0      129725168    4096       0.33
emacs        9514   WS   8,0      132405432    65536      1.77
emacs        9514   WS   8,0      173343232    118784     1.77
...

另请注意,磁盘具有可能引发磁头活动的固件,例如进行某种重新对齐检查。

答案3

Ubuntufatrace为此目的而编写。

如果用 找不到它fatrace,并且没有进程直接打开设备节点(lsof /dev/sd*),那么这是内核的事情。

内核错误示例:硬盘驱动器每 10 秒旋转一次并重新旋转一次; “fatrace”中未显示访问权限

需要注意的一件内核事情是定期写回。请记住,文件系统使用回写式缓存。 默认情况下,未同步的写入在刷新到磁盘之前可以排队 5 秒

答案4

大多数现代硬盘驱动器都有自己的控制器。它真的可以是任何东西:

  • 写入实际存储的缓存(在磁盘控制器中)
  • 速度调节以确保磁盘始终以相同的速度旋转。
  • 磁盘输入standbysleep(有些自动执行,有些则不执行,尽管这是可配置的)。
  • 或者一个实际的守护进程从中读取/写入。

hdparm有几种或多或少标准的方法来了解磁盘的工作原理,但许多功能许多磁盘不支持。对磁盘的几个有用的查询是:

  • hdparm -b /dev/<disk>:总线状态
  • hdparm -B /dev/<disk>:电源管理信息(会自动进入待机状态吗?)
  • hdparm -M /dev/<disk>:声学管理(速度控制,虽然我从来没有见过单个磁盘支持这个hdparm查询)

这些可以用来检查磁盘是否可能自己做某事。他们无法告诉您磁盘是否真的会这样做,这是由内部固件做出的决定。

我之前枚举的最后一个选项“实际守护进程从磁盘读取/写入磁盘”可以通过以下方式检查:

  1. 用于hdparm -y /dev/<disk>强制其进入standby模式。
  2. 等待一段合理的时间(也许一个小时)。
  3. 用于hdparm -C /dev/<disk>检查其是否保持在standby模式中。

免责声明:绝大多数磁盘不支持大多数hdparm(ATA/SATA) 命令。然而,他们通常至少支持其中的一些人。您的里程可能会有很大差异。

相关内容