为什么在第一次 Linux 图形登录时,两个 HDD 中的一个从睡眠状态唤醒?

为什么在第一次 Linux 图形登录时,两个 HDD 中的一个从睡眠状态唤醒?

我有两个存档硬盘,我很少使用它们(我平均每周手动安装它们的分区不到一次)。由于我晚上会关掉电脑,所以我试图阻止它们在每天启动时旋转,但似乎太难了:需要修补 Linux 内核。作为更糟糕但更简单的替代方案,我创建了一个简单的 systemd 单元,在启动后立即将 HDD 置于睡眠状态(ExecStart=/usr/bin/hdparm -Y /dev/disk/by-id/...WantedBy=multi-user.target)。这几乎可行:两个磁盘在启动时都旋转停止。我通过 tty2 中的终端登录验证了这一点:sudo hdparm -C /dev/sd[bc]报告drive state is: standby

然而,一旦我登录到图形界面,其中一个磁盘就会发出旋转的声音,并且hdparm报告drive state is: active/idle。这种情况在 XFCE 和 KDE Plasma 5(Manjaro GNU/Linux 带有最新更新)上都会发生,在同一个系统的另一个用户身上也会发生。磁盘唤醒后,我手动将其置于睡眠状态(hdparm -Y ...),直到我重新启动计算机,它才会再次唤醒。注销然后登录,即使以另一个用户的身份,也不会再次唤醒任何磁盘。

这个唤醒磁盘总是相同的。我尝试交换这两个硬盘的 SATA 电缆,它们交换了 ID(sdb<->sdc),但第一次图形登录时仍然唤醒了同一个物理硬盘。这个唤醒磁盘的永久 ID 绝对没有在我的配置文件中的任何地方提及,因为我最近购买了它(二手的)。更具体地说,一直处于休眠状态的磁盘是三星 HD103UJ首次图形登录时唤醒的磁盘是三星 HD154UI

我正在监控/dev/sd[bc]访问审计。两个磁盘的日志几乎相同。首先,我登录 tty2 控制台并运行:两个磁盘都处于休眠状态;然后我切换到 tty7 并从 lightdm 屏幕登录 XFCE;我快速切换到 tty2,现在其中一个磁盘不再处于休眠状态。与这些事件相对应的命令输出sudo hdparm -C /dev/sd[bc]的本质:sudo ausearch -f /dev/sdb

comm="hdparm" exe="/usr/bin/hdparm"
comm="udisksd" exe="/usr/lib/udisks2/udisksd"
comm="hdparm" exe="/usr/bin/hdparm"
comm="udisksd" exe="/usr/lib/udisks2/udisksd"
comm="pool" exe="/usr/lib/udisks2/udisksd"
comm="pool" exe="/usr/lib/udisks2/udisksd"
...

等等。该comm="pool"行在日志中每 10 分钟出现一次,或者更频繁地出现,而gnome 磁盘正在运行,但comm="udisksd"直到重新启动后才会出现该行。假设审计报告所有磁盘访问,这comm="udisksd"肯定是唤醒的原因。但为什么只有 2 个硬盘中的一个?也许可以将有问题的硬盘配置为hdparm不唤醒?

我将hdparm -I /dev/sdb和的hdparm -I /dev/sdc输出与 meld 进行了比较。还尝试了-Iv-i-iv选项,而不是-I。差异几乎仅限于唯一标识符、磁盘大小、几何形状。唯一可能导致这种唤醒不一致的差异是固件版本:1AA01118在非唤醒磁盘上1AG01118在醒着的那一侧。

答案1

udisksd当服务启动以及挂载/卸载任何磁盘时,会为每个 ext2、ext3 和 ext4 分区调用dumpe2fs -h /dev/sd??命令。我的唤醒硬盘包含一个 ext4 分区,因此被udisksd => dumpe2fs。另一块硬盘没有任何 ext* 分区,因此永远不会被udisksd

可以在此评论中找到更多详细信息u盘漏洞:https://github.com/storaged-project/udisks/issues/611。此错误已修复udisks 2.8.4,因此当不相关的分区被挂载或卸载时,它不再唤醒任何硬盘。当udisksd开始,所以我必须继续第二个 systemd 单元使该硬盘在udisks2服务已启动。

相关内容