如何防止 Linux 内核将辅助硬盘从睡眠状态唤醒

如何防止 Linux 内核将辅助硬盘从睡眠状态唤醒

有没有办法指示(Linux)内核在系统睡眠/唤醒周期后不要唤醒辅助硬盘?我这么问是因为在我的笔记本电脑中,我有一个 SSD 作为包含系统根目录的主驱动器和一个辅助 HDD,我在其中保存备份系统和我偶尔访问的文件。由于笔记本电脑通常会经历许多天的日常睡眠/唤醒周期(我的意思是挂起到 RAM,而不是休眠),因此我想手动将辅助 HDD 置于睡眠状态,并指示内核在系统睡眠期间保持其睡眠状态/唤醒周期。

答案1

由于您只使用辅助硬盘进行备份,我建议告诉 fstab 不要自动挂载驱动器,并创建一个备份脚本来挂载驱动器、进行备份并再次卸载驱动器。

带有 noauto 选项的 fstab 行示例:

/dev/sdb1 /media/backup ext4 user,noauto 0 0

备份的 bash 脚本将以以下开头mount /media/backup和结尾umount /media/backup

答案2

切勿旋转磁盘

旋转磁盘似乎是在内核中硬编码的(谢谢维昂来挖掘这个。)
但它当然可以修补:旧版本内核的补丁
整件事很奇怪,因为我想我记得有一个内核参数/开关。

由于这是一种黑客行为,我不推荐它,因为您必须在每次更新时修补和构建内核,有时甚至需要调整补丁以适应更改的代码。更好的方法是向内核开发人员自己提交补丁(提供实际的开关并适用于所有系统)。我认为这超出了这个答案的范围。 :)


再次停止磁盘(SystemD/Linux)

基于 Marc.2377 的解决方案,这里可以关闭 SystemD/Linux Mint 上的 HDD。

[Unit]
Description="Put woken HDD back to sleep and tell it to go to sleep after 2 min of not being used."
After=systemd-suspend.service systemd-hybrid-sleep.service systemd-hibernate.service systemd-suspend-then-hibernate.service

[Service]
Type=simple
ExecStart=/usr/sbin/hdparm -q -S 24 -q -Y /dev/disk/by-id/MYDISK

[Install]
WantedBy=sleep.target

替换MYDISK为 中的实际设备文件名/dev/disk/by-id,并将其另存为/etc/systemd/system/wake_hdd-stop.service.

然后运行systemctl daemon-reload激活它。


再次停止磁盘 (GNU/Linux)

在普通的 GNU/Linux 系统上,使用时pm-utils只需将以下内容放入/etc/pm/sleep.d/99_hdd-stop

#! /bin/sh
case "$1" in
  resume|thaw)
    /usr/sbin/hdparm -q -S 24 -q -Y /dev/disk/by-id/MYDISK
    ;;
esac

MYDISK当然是更换。
然后使文件可执行chmod +x /etc/pm/sleep.d/99_hdd-stop


笔记

在任何情况下,您都希望尽可能晚地运行该命令,否则磁盘可能会由于某些初始化过程访问它而再次旋转。

另外,我的磁盘似乎完全忽略了该-S命令。所以YMMV。 (我创建了一个.desktop文件来运行上面的脚本,并使用桌面环境的全局键盘快捷键设置将快捷方式映射到它。这样我就可以随时停止它。)


答案3

我认为这是不可能的。驱动器在启动时会被 BIOS / UEFI 探测,而不仅仅是内核。

不过,我所做的是指示系统在系统启动后立即将驱动器置于睡眠模式。查看https://wiki.archlinux.org/index.php/Hdparm#Putting_a_drive_to_sleep_directly_after_boot

就我而言,我有:

/usr/local/lib/systemd/system/rsleephdd.service

[Unit]
Description="Ranolfi's script to sleep hard drives on boot"

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -Y /dev/sdc

[Install]
WantedBy=multi-user.target

驱动器或其分区是否由 fstab(或 crypttab,就此而言)安装都没有区别。

(编辑):严格来说,似乎可以通过修补磁盘来让内核忽略该磁盘。但这不会阻止驱动器唤醒 - 恰恰相反,我链接到的补丁将阻止您访问驱动器,您将无法访问您的文件,即使是偶尔,也无法将驱动器放入睡觉。

相关内容