使硬盘休眠,仅在需要时唤醒

Del*_*ted 18 linux hard-drive

我想将另一个硬盘连接到我的电脑,我想在 99% 的时间里都处于睡眠状态。我只会将它用于一些用途,但我需要始终安装它。

为了实现这一点,我想知道:

  1. 如何记录访问设备的进程?我需要日志记录才能知道是什么导致硬盘唤醒(如果确实如此),所以我可以采取行动。
  2. 是否需要进行任何特殊的内核设置以使设备可以休眠更长时间?
  3. 如何设置硬盘的休眠间隔?

kol*_*pto 17

睡眠间隔称为“APM”(自动电源管理)和 spindown_time。这是这样控制的hdparm

hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD
Run Code Online (Sandbox Code Playgroud)

它会使您的硬盘在大约 3 分钟不活动时减速。


小智 5

我有类似的问题。我有 SSD,/dev/sdb带有操作系统(基于 Ubuntu Xenial 的 Linux Mint 18.1)和 HDD,/dev/sda带有数据,我不时使用它们。两个磁盘均已加密。硬盘分区未挂载。无论如何,硬盘会在几分钟内醒来,然后休眠,然后再次醒来。混乱。

这是一个重复的问题和有用的答案,建议auditd找到行为不良的进程。

apt-get install auditd
auditctl -w /dev/sda -p rwa
Run Code Online (Sandbox Code Playgroud)

然后我强制 HDD 睡眠hdparm -Y /dev/sda。然后等到我听到硬盘再次旋转的声音。然后跑ausearch -f /dev/sda。就我而言,它显示如下所示的条目。

time->Sat Feb 25 12:38:17 2017
type=PROCTITLE msg=audit(1488022697.651:1744): proctitle=2F7573722F6C69622F756469736B73322F756469736B7364002D2D6E6F2D6465627567
type=PATH msg=audit(1488022697.651:1744): item=0 name="/dev/sda" inode=376 dev=00:06 mode=060660 ouid=0 ogid=6 rdev=08:00 nametype=NORMAL
type=CWD msg=audit(1488022697.651:1744):  cwd="/"
type=SYSCALL msg=audit(1488022697.651:1744): arch=c000003e syscall=2 success=yes exit=12 a0=f3fb90 a1=800 a2=7f4745221f64 a3=30 items=1 ppid=1 pid=18520 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="pool" exe="/usr/lib/udisks2/udisksd" key=(null)
Run Code Online (Sandbox Code Playgroud)

相关部分是exe="/usr/lib/udisks2/udisksd"。虽然我也有谁smartmontools也是smartd罪魁祸首。我卸载smartmontools并停止了udisk2服务service udisks2 stop。之后硬盘将按预期休眠。

请注意,udisks2例如,当我打开磁盘应用程序时,它将自动启动,因此我必须再次停止它。另一个缺点是两个磁盘的 SMART 参数都不会受到监控,这不好,但作为一种解决方法,它很合适。

还有一件事不清楚,就是这个错误报告说不udisks2轮询磁盘,而轮询磁盘现在是由内核完成的。但证据似乎表明事实恰恰相反。


Mac*_*cki 3

http://en.wikipedia.org/wiki/Fuser_%28Unix%29 - fusionr 是一个 UNIX 命令,用于显示哪些进程正在使用指定的文件、文件系统或套接字。

http://sourceforge.net/projects/hdparm/ - Linux 下获取/设置 ATA/SATA 驱动器参数(查找 -S 选项)

http://sg.danny.cz/sg/sg3_utils.html - sg3_utils 软件包包含向设备发送 SCSI 命令的实用程序。以及传统上与 SCSI 关联的传输设备(查找 sg_start)