Haga que un disco duro duerma y solo despierte cuando sea necesario

10

Quiero conectar otro disco duro a mi computadora, que quiero dormir el 99% del tiempo. Solo lo usaré para algunas cosas, pero necesito que esté montado en todo momento.

Para lograr esto me gustaría saber:

  1. ¿Cómo registro qué procesos acceden a un dispositivo? Necesito el registro para poder saber qué está causando que el disco duro se active si lo hace, así que puedo actuar en consecuencia.
  2. ¿Hay alguna configuración especial del kernel que deba hacer para que el dispositivo pueda dormir más?
  3. ¿Cómo configuro los intervalos de suspensión del disco duro?
Eliminado
fuente

Respuestas:

13

El intervalo de suspensión se llama "APM" (Administración automática de energía) y spindown_time. Esto se controla hdparmasí:

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

Hará que su HDD se active en ~ 3 minutos de inactividad.

Kolypto
fuente
4

Como estás en Linux, puedes usar la nueva fatraceutilidad, que registra cada acceso a los archivos y te dice qué proceso es responsable:

https://launchpad.net/fatrace

Más información aquí:

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

Utiliza la API de fanotify de Linux ( más detalles ) disponible desde Linux kernel 2.6.37.

fatrace no está empaquetado por todas las distribuciones a partir de julio de 2014 (ingresó a las pruebas de Debian recientemente, por lo que debería enviarse en 'jessie'), pero es fácil de instalar desde el origen.

JosephH
fuente
1
No sé qué quieres decir con "la mayoría" de las distribuciones. Como de costumbre, Debian es la última distribución para obtener algo. Lo he tenido disponible en Fedora desde hace bastante tiempo ...
Michael Hampton
3

http://en.wikipedia.org/wiki/Fuser_%28Unix%29 - fuser es un comando de UNIX que se usa para mostrar qué procesos están usando un archivo, sistema de archivos o socket especificado.

http://sourceforge.net/projects/hdparm/ - obtenga / establezca los parámetros de la unidad ATA / SATA en Linux (busque la opción -S)

http://sg.danny.cz/sg/sg3_utils.html : el paquete sg3_utils contiene utilidades que envían comandos SCSI a los dispositivos. Además de dispositivos en transportes tradicionalmente asociados con SCSI (busque sg_start)

Maciek Sawicki
fuente
Gracias por tu respuesta informativa! Parece que el fusor solo me dice qué procesos están usando un archivo, sistema de archivos och socket en la instancia de emisión del comando. Si bien esto es muy útil si un proceso hace algo rápido, como enumerar el contenido del directorio raíz del dispositivo, podría perderlo incluso si tengo el fusor ejecutándose en un bucle. Si hubiera algo que esperaría y registraría toda la actividad hasta que le dijera que se detenga, sería aún más útil en esta situación. ¿Sabes de alguno?
Borrado el
Supongo que hdparam es lo que usaré para configurar el tiempo de espera antes de dormir. ¿Y sg3_utils es solo una herramienta poderosa pero no la usaré en este caso? (Como supongo que no tendrá que especificar manualmente cuando el disco duro debe dormir después de su puesta en marcha utilizando hdparam?)
Eliminado
3

btraceo blktrace(una envoltura de btrace) rastrear E / S de bloque de kernel y puede ayudarlo allí.

luego
fuente
2

lsof +D /path/to/mount debería mostrarle todos los procesos que tengan cualquier archivo abierto en la ruta indicada.

Osito de peluche
fuente
0

Tengo un problema similar Tengo SSD, /dev/sdbcon OS (Linux Mint 18.1 basado en Ubuntu Xenial) y HDD /dev/sda, con datos, que uso de vez en cuando. Ambos discos están encriptados. Las particiones de HDD no están montadas. Y de todos modos, en períodos de varios minutos, el HDD se despierta, luego duerme y luego se despierta nuevamente. Lío.

Aquí hay una pregunta duplicada con una respuesta útil , que sugiere auditdencontrar el proceso de mal comportamiento.

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

Luego forzo a HDD a dormir hdparm -Y /dev/sda. Luego espere hasta que escuche HDD girando de nuevo. Entonces corre ausearch -f /dev/sda. En mi caso, muestra entradas como las siguientes.

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)

La parte relevante es exe = "/ usr / lib / udisks2 / udisksd" . Aunque también tenía de smartmontoolsquién smartdera también el culpable. Desinstalé smartmontoolsy detuve el udisk2servicio con service udisks2 stop. Después de eso HDD duerme como se esperaba.

Tenga en cuenta que udisks2se iniciará automáticamente cuando, por ejemplo, abra la aplicación Discos , por lo que tengo que detenerla nuevamente. Otro inconveniente es que los parámetros SMART no se supervisan para ambos discos, lo que no es bueno, pero como solución alternativa encaja.

También una cosa que no está clara, es que este informe de error dice udisks2que no hace discos de sondeo, que ahora lo hace el núcleo. Pero la evidencia parece indicar lo contrario.

saaj
fuente