Forzar la desconexión del disco duro externo en Linux (Raspberry Pi)

16

Actualmente estoy configurando un servidor doméstico usando una Raspberry Pi con un disco duro externo conectado a través de usb. Sin embargo, mi disco duro nunca girará cuando esté inactivo.

Ya probé las sugerencias proporcionadas en raspberrypi.org ... sin ningún éxito.

1.)

sudo hdparm -S5 /dev/sda

devoluciones

/dev/sda:
 setting standby to 5 (25 seconds)
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2.)

sudo hdparm -y /dev/sda

devoluciones

/dev/sda:
 issuing standby command
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

... y 3.)

sudo sdparm --flexible --command=stop /dev/sda

devoluciones

/dev/sda: HDD         1234

... sin derrumbar el disco.

Yo uso el siguiente hardware:

  • Inateck FDU3C-2 doble puerto USB 3.0 HDD estación de acoplamiento
  • Western Digital WD10EZRX Verde 1TB

¿Es posible que las señales enviadas de spin-down se sobrescriban / pierdan / ignoren en algún lugar?

usuario258346
fuente
1
Actualización: la estación de acoplamiento Inateck mencionada tiene una funcionalidad para clonar discos duros, proporcionando un puerto maestro / fuente y un puerto esclavo / sumidero para discos duros. Al conectar el HDD al puerto esclavo, los comandos, mencionados anteriormente, entrenan. Esto limita el problema de falta de spin-down al puerto maestro.
user258346
1
Si cree que esta es la solución, debe aceptar su propia solución. Aunque parezca cursi, es útil para futuros lectores con el mismo problema.
MariusMatutiae
1
Te das cuenta, por supuesto, que el comando que usas en tu script es el mismo que dijiste que no funcionaba, ¿verdad? hdparm -y / dev / sda ...
MariusMatutiae

Respuestas:

4

No tuve suerte con hd-idle; funcionó pero no funcionó. Terminé escribiendo el guión a continuación:

#!/bin/bash
# This script looks for recent disk access, and if nothing has changed, puts /dev/"drive" into spindown mode.
# This should be used only is the hdparm power management function is not working.
# Call this script with cron or manually as desired
#
#
#
# Change which drive this script looks at by changing the drive variable below:
drive="sda"
#
#
current=`date`
caller=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
filename="/tmp/diskaccess.txt"
if [ -f "$filename" ]; then
    stat_old=`cat "$filename" | tr -dc "[:digit:]"`
    stat_new=`cat /sys/block/"$drive"/stat | tr -dc "[:digit:]"`
    if [ "$stat_old" == "$stat_new" ]; then
        stat="0"
        echo "The disk hasn't been used; spinning down /dev/$drive"
        echo $stat_old
        hdparm -y /dev/$drive > /dev/null
    else
        stat="1"
        echo $stat_old
        echo $stat_new
        echo "The drive has been used..."
        echo $stat_new > $filename
    fi
else
    echo "/tmp/diskaccess.txt file does not exist; creating it now."
    echo $stat_new > $filename
fi
echo $stat " - " $drive " - " $current " - by: " $caller >> /tmp/diskaccesslog.txt
user300457
fuente
44
Pensé hdparm -yque no funcionó.
Cristian Ciupitu
Gracias, funciona perfectamente. Mi disco duro azul WD gira ahora, cuando no se usa. ¿Cuál es un intervalo razonable para que cron llame al script, en su opinión? Lo llamo cada 15 minutos por ahora.
Tarator
5

Sí, es posible, pero requerirá un trabajo de desarrollo personalizado y no trivial, y el código será específico para el chip de puente USB-> SATA DENTRO de su gabinete.

El acuerdo es que el puente USB sirve como más que un convertidor eléctrico. Un HDD conectado a USB emula una unidad SCSI que tiene un conjunto de comandos diferente. Mientras que los comandos estándar de lectura / escritura / búsqueda se traducen todo el tiempo, los giros más exóticos no lo hacen. La mayoría de las fichas no harán eso. Además, NO hay una API de nivel de chip universal. Entonces, si escribiera el código, tendría que tener un manual de programación para el chip del puente USB.

En pocas palabras, a menos que tenga detalles de programación en el chip y esté familiarizado con el conjunto de instrucciones ATA y SCSI y los comandos de paso de encapsulado, entonces tendrá que prescindir. Demasiado trabajo y sin estándar.

David Lethe
fuente
5

Es completamente posible que las señales que está enviando se descuiden. No proporcionó la salida de

sudo hdparm -I /dev/sdX

lo que nos hubiera dicho las capacidades del disco, pero muchos discos simplemente no responden a estos comandos.

Afortunadamente, hay una utilidad muy conveniente, hd-idle, que puede descargar desde aquí , lo que le permite forzar un disco hacia abajo después de un lapso de tiempo específico. El programa ha sido desarrollado especialmente para Debian (pero funciona en Linux en general), por lo que su instalación debería ser muy fácil para usted. Solo espero que también funcione en una arquitectura ARM, algo que no puedo probar.

Editar: se compila e instala correctamente en raspbian.

MariusMatutiae
fuente