使硬盘进入睡眠状态,仅在需要时唤醒


10

我想将另一个硬盘连接到我的计算机上,我希望99%的时间都在该计算机上休眠。我仅将其用于几件事,但我需要始终挂载它。

为此,我想知道:

  1. 如何记录访问设备的进程?我需要日志记录才能分辨出导致硬盘唤醒的原因,所以我可以采取行动。
  2. 我是否需要进行任何特殊的内核设置,以使设备休眠更长的时间?
  3. 如何设置硬盘的睡眠间隔?

Answers:


13

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

hdparm -B 50 -S 36 /dev/disk/by-label/BACKUP-HDD

它将使您的硬盘驱动器在约3分钟的闲置时间内停止运转。


4

在Linux上时,您可以使用新的fatrace实用程序,该实用程序记录每个文件的访问并告诉您哪个进程负责:

https://launchpad.net/fatrace

此处的更多信息:

http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/

它利用了自linux内核2.6.37起可用的linux fanotify API更多详细信息)。

fatrace 截至2014年7月,所有发行版都未打包该软件包(该软件包最近进入了debian测试,因此应以'jessie'发行),但易于从源代码安装。


1
我不知道您所说的“最多”分布是什么意思。像往常一样,Debian是获得某些东西的最后一个发行版。我已经在Fedora上使用它很长一段时间了……
Michael Hampton

3

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

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

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


多谢您提供详尽的答案!看起来fuser只告诉我在发出命令的实例中哪个进程正在使用文件,文件系统和套接字。尽管这在进程快速执行某些操作(例如列出设备根目录的内容)时非常有用,但是即使我的热熔器正在循环运行,我也可能会错过它。如果有什么可以等待并记录所有活动,直到我告诉它停止,那在这种情况下将更加有用。你知道吗
删除

我想hdparam是我用来设置睡觉前的等待时间的吗?sg3_utils只是一个功能强大的工具,但是在这种情况下我不会使用它?(据我估计,在使用hdparam设置HDD后,我不必手动指定何时应该进入HDD睡眠状态)。– 2009
删除

3

btraceblktrace(的一个包装btrace)跟踪内核块I / O并可以为您提供帮助。


2

lsof +D /path/to/mount 应该会在指示的路径中向您显示每个文件都已打开的进程。


0

我有类似的问题。我有SSD(/dev/sdb带操作系统)(基于Ubuntu Xenial的Linux Mint 18.1)和HDD /dev/sda(带数据),我经常使用这些数据。两个磁盘均已加密。HDD的分区未安装。无论如何,HDD会在几分钟后唤醒,然后进入睡眠状态,然后再次唤醒。乱

这是一个重复的问题,有帮助的答案,建议auditd您查找行为异常的过程。

apt-get install auditd
auditctl -w /dev/sda -p rwa

然后,我强迫HDD入睡hdparm -Y /dev/sda。然后等待,直到听到HDD再次旋转。然后运行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)

相关部分是exe =“ / usr / lib / udisks2 / udisksd”。虽然我也有smartmontoolssmartd也是罪魁祸首。我通过卸载smartmontools并停止了udisk2服务service udisks2 stop。之后,HDD将按预期休眠。

请注意,udisks2例如,当我打开“ 磁盘”应用程序时,它将自动开始,因此我必须再次将其停止。另一个缺点是,两个磁盘均未监视SMART参数,这虽然不好,但是可以解决。

还有一个尚不清楚的事情是,该错误报告udisks2不会对磁盘​​进行轮询,而磁盘轮询现在由内核完成。但是证据似乎表明相反。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.