Script per lo spindown automatico dei dischi esterni USB

Prima di tutto -per chi non lo sapesse- lo spindown è lo spegnimento del motore di un hard disk. Alcuni hard disk esterni hanno la possibilità di essere impostati indipendentemente dal sistema operativo per effettuare lo spindown come risparmio energetico dopo un tot tempo di inattività, ma la maggior parte degli hard disk (esterni ed interni) no: girano all’infinito anche se non sono utilizzati.

Oltre ad un fattore energetico (un hard disk è un dispositivo meccanico e tra quelli che consumano più energia in un sistema) c’è un fattore acustico dato dal rumore prodotto dal motore (che può essere più o meno fastidioso, anche più o meno conciliante la notte se ti ci abitui) e c’è un fattore termico: girando il disco si surriscalda ed anche se deve riscaldarsi proprio parecchio per danneggiarsi non mi piace affatto l’idea di avere un hard disk termosifone, soprattutto in estate.

Per i dischi che non vengono gestiti dal sottosistema SCSI di Linux si può impostare il valore di timeout per lo spindown con il buon vecchio hdparm:

hdparm -S valore-in-multipli-di-5-secondi /dev/hdX

Per i dischi che invece vengono gestiti dal sottosistema SCSI la questione è un po’ più complicatuccia perchè hdparm non funziona e sdparm non sempre ci azzecca. E’ comunque possibile forzare lo spindown con un comando e la soluzione più compatibile è fare uno script periodico che metta in spindown il disco se non è stata rilevata un’attività recente.

Uno dei migliori che ho trovato sta qui: http://www.linuxquestions.org/questions/linux-hardware-18/howto-spin-down-external-usb-firewire-hard-drives-on-idle-593192/.

Per i più pigri l’ho messo in questo file: idle-drive.sh.gz. Necessita di sdparm e gawk quindi:

sudo apt-get install sdparm gawk

Prende come argomento l’uuid del disco che si vuole monitorare, io l’ho installato in /usr/local/bin/idle-drive.sh e lo richiamo ogni 5 minuti tramite cron:

echo '*/5 * * * * root /usr/local/bin/idle-drive.sh uuid=1703f12f-e133-356f-aee2-ecb75cca15b2' > /etc/cron.d/idle-drive