Cómo evitar que el kernel de Linux despierte un disco duro secundario del modo de suspensión

Cómo evitar que el kernel de Linux despierte un disco duro secundario del modo de suspensión

¿Hay alguna manera de indicarle al kernel (Linux) que no active un disco duro secundario después de un ciclo de suspensión/activación del sistema? Lo pregunto porque en mi computadora portátil tengo un SSD como unidad principal que contiene la raíz del sistema y un disco duro secundario donde guardo un sistema de respaldo y archivos a los que accedo esporádicamente. Dado que la computadora portátil generalmente pasa por muchos ciclos diarios de suspensión/activación (me refiero a suspensión en RAM, no hibernación) durante muchos días, me gustaría poner el disco duro secundario en suspensión manualmente e indicarle al kernel que lo mantenga dormido durante la suspensión del sistema. /ciclos de despertar.

Respuesta1

Dado que solo usa el disco duro secundario para la copia de seguridad, sugeriría decirle a fstab que no monte la unidad automáticamente y que cree un script de copia de seguridad que monte la unidad, haga la copia de seguridad y desmonte la unidad nuevamente.

ejemplo de la línea fstab con la opción noauto:

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

El script bash para la copia de seguridad comenzaría con mount /media/backupy terminaría conumount /media/backup

Respuesta2

Nunca girar el disco

Hacer girar los discos parece estar codificado en el núcleo(Gracias aveónpara desenterrar esto.)
Pero, por supuesto, se puede parchear:Parche para una versión anterior del kernel.
Todo esto es extraño, ya que pensé recordar que una vez hubo un parámetro/interruptor del kernel para esto.

Dado que se trata de un truco, no lo recomiendo, ya que tendrá que parchear y compilar el kernel en cada actualización y, a veces, incluso adaptar el parche al código modificado. Una mejor manera sería enviar un parche (que ofrezca un cambio real y funcione para todos los sistemas) a los propios desarrolladores del kernel. Creo que eso está más allá del alcance de esta respuesta. :)


Detener el disco nuevamente (SystemD/Linux)

Sobre la base de la solución de Marc.2377, esto funcionó para apagar un disco duro en SystemD/Linux Mint.

[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

Reemplácelo MYDISKpor un nombre de archivo de dispositivo real en /dev/disk/by-idy guárdelo como /etc/systemd/system/wake_hdd-stop.service.

Luego corre systemctl daemon-reloadpara activarlo.


Deteniendo el disco nuevamente (GNU/Linux)

En un sistema GNU/Linux normal, pm-utilspuedes poner lo siguiente en /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

Reemplazando MYDISK, por supuesto.
Luego haga el archivo ejecutable conchmod +x /etc/pm/sleep.d/99_hdd-stop


NOTA

que, en cualquier caso, desea ejecutar el comando lo más tarde posible, o el disco podría volver a girar debido a algún proceso de inicialización que acceda a él.

Además, mi disco parece ignorar completamente el -Scomando. Entonces YMMV. (Creé un .desktoparchivo para ejecutar el script anterior y utilicé la configuración global de atajos de teclado de mi entorno de escritorio para asignarle un atajo. Así puedo detenerlo instantáneamente, cuando quiera).


Respuesta3

No creo que eso sea posible. La unidad es probada por el BIOS/UEFI al arrancar, no solo por el kernel.

Sin embargo, lo que hago es indicarle al sistema que ponga la unidad en modo de suspensión inmediatamente después de que se inicia el sistema. Controlarhttps://wiki.archlinux.org/index.php/Hdparm#Putting_a_drive_to_sleep_directly_after_boot.

En mi caso tengo:

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

[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

No importa si la unidad o sus particiones están montadas mediante fstab (o crypttab, para el caso) o no.

(Editar): Estrictamente hablando,parece posible hacer que el kernel ignore un disco parchándolo. Sin embargo, eso no evitará que la unidad se active; todo lo contrario, el parche al que me vinculé le impedirá acceder a la unidad, no podrá acceder a sus archivos ni siquiera esporádicamente y tampoco podrá poner la unidad en dormir.

información relacionada