我家里有一台小型服务器用于访问我的文件,并且硬盘不会停止旋转。目前它运行的是 Ubuntu Server 22.04。执行类似命令$ cat /sys/block/sde/stat
会显示一些信息,包括读取的总扇区数。如果我等待大约 20 分钟并再次执行此命令,则读取的总扇区数会增加。
$ cat /sys/block/sde/stat
6886729 970027822 7822380784 1292509782 15759 276608 2297706 485868 0 30475568 1293440472 0 0 0 0 23680 444820
... Wait about 20 minutes
$ cat /sys/block/sde/stat
6886734 970027822 7822380787 1292510398 15759 276608 2297706 485868 0 30476188 1293441088 0 0 0 0 23680 444820
但理论上不应该有任何进程访问此硬盘。
这一切都是在 2 天前从 Ubuntu Server 20.04 升级到 Ubuntu Server 22.04 后开始的。
我已经尝试使用<inside the correct directory>$ sudo fatrace -c
,但这没有显示任何内容。我也尝试使用$ inotifywait -m -r /...
,仍然没有显示任何内容。
我怎样才能深入挖掘,以便我的硬盘最终能够再次旋转?
答案1
使用iotop
您可以使用 监控磁盘 IO iotop
。
安装方式:
sudo apt install iotop
然后运行:
iotop
这应该准确地告诉您哪些进程使用磁盘和交换。
使用htop
您还可以直接用它监控 IO htop
(尽管这是一种“隐藏”功能)。
安装方式:
sudo apt install iotop
然后运行:
htop
现在Tab按 切换到 IO 屏幕(而不是主屏幕)。这将提供类似于 的信息iotop
。
使用udisksctl
如果您怀疑该活动与有关udisks
,您可以尝试运行:
udisksctl monitor
这将告诉您守护进程是否有活动udisks
。
答案2
我解决了。
我sudo dstat -tdD /dev/xxx --top-io
能够看到哪些服务对我的驱动器做了一些操作。 在我的情况下,这些服务是:
- 智能
- 中断平衡
- udisks2
所以我不得不这么做
sudo systemctl stop udisks2.service # System still works, seems not to be so important
sudo systemctl disable udisks2.service
sudo systemctl stop smartd.service # SMART is nice, but not if the daemon prevents the drive from going into standby
sudo systemctl disable smartd.service
sudo systemctl stop irqbalance.service # If you got a server with hunders of drives this is meaningful for performance. In my case just overkill and prevents my drives from sleeping
sudo systemctl disable irqbalance.service
谢谢阿图尔·梅因利德提供帮助。
编辑:至少我认为它已经解决了。我意识到udisks2.service
几个小时后会重新启动。服务已停止并禁用,但它仍会重新启动。这是什么鬼?
编辑2:可以掩盖这项服务。
sudo systemctl mask udisks2.service
sudo systemctl stop udisks2.service
现在这项服务不会重新启动,硬盘处于休眠状态。我测试了一个星期,一切正常。