Forcer la rotation du disque dur externe sur Linux (Raspberry Pi)

16

J'installe actuellement un serveur domestique utilisant un Raspberry Pi avec un disque dur externe connecté via USB. Cependant, mon disque dur ne tournera jamais lorsqu'il est inactif.

J'ai déjà essayé les conseils fournis sur raspberrypi.org ... sans succès.

1.)

sudo hdparm -S5 /dev/sda

Retour

/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

Retour

/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

... et 3.)

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

Retour

/dev/sda: HDD         1234

... sans ralentissement du lecteur.

J'utilise le matériel suivant:

  • Station d'accueil pour disque dur USB 3.0 à deux ports Inateck FDU3C-2
  • Western Digital WD10EZRX Vert 1To

Est-il possible que les signaux spin-down envoyés soient quelque part écrasés / perdus / ignorés?

user258346
la source
1
Mise à jour: la station d'accueil Inateck mentionnée a une fonctionnalité pour cloner des disques durs, fournissant un port maître / source et un port esclave / récepteur pour les disques durs. Lors de la connexion du disque dur au port esclave, les commandes mentionnées ci-dessus s’entraînent. Cela limite le problème de spin-down manquant sur le port maître.
user258346
1
Si vous pensez que c'est une solution, vous devez accepter votre propre solution. Bien que cela puisse paraître corné, il est utile pour les futurs lecteurs ayant le même problème.
MariusMatutiae
1
Vous vous rendez compte, bien sûr, que la commande que vous utilisez dans votre script est la même que vous avez déclaré ne fonctionnait pas, non? hdparm -y / dev / sda ...
MariusMatutiae

Réponses:

4

Je n'ai pas eu de chance avec hd-idle; il a fonctionné mais n'a pas fonctionné. J'ai fini par écrire le script ci-dessous:

#!/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
la source
4
Je pensais que ça hdparm -yne fonctionnait pas.
Cristian Ciupitu
Merci, fonctionne parfaitement. Mon disque dur bleu WD tourne maintenant lorsqu'il n'est pas utilisé. Quel est l'intervalle raisonnable pour que cron appelle le script, à votre avis? Je l'appelle toutes les 15 minutes pour l'instant.
Tarator
5

Oui, cela est possible mais nécessitera un travail de développement personnalisé et non trivial et le code va être spécifique à la puce de pont USB-> SATA INSIDE de votre boîtier.

L'accord est que le pont USB sert plus qu'un convertisseur électrique. Un disque dur connecté par USB émule un lecteur SCSI qui a un jeu de commandes différent. Alors que les commandes standard de lecture / écriture / recherche se traduisent tout le temps, les rotations plus exotiques ne le sont pas. La plupart des jetons ne le feront pas. De plus, il n'y a PAS d'API universelle au niveau de la puce. Donc, si j'écrivais le code, je devrais avoir un manuel de programmation pour la puce de pont USB.

En fin de compte, à moins que vous n'ayez des spécificités de programmation sur la puce et que vous soyez familier avec le jeu d'instructions ATA et SCSI et l'encapsulation des commandes pass-through, alors vous allez devoir vous en passer. Trop de travail et pas de standard.

David Lethe
la source
5

Il est tout à fait possible que les signaux que vous envoyez soient négligés. Vous n'avez pas fourni la sortie de

sudo hdparm -I /dev/sdX

ce qui nous aurait indiqué les capacités du disque, mais de nombreux disques ne répondent tout simplement pas à ces commandes.

Heureusement, il existe un utilitaire très pratique, hd-idle, que vous pouvez télécharger à partir d'ici , vous permettant de forcer une rotation du disque après un laps de temps spécifié. Le programme a été développé spécialement pour Debian (mais il fonctionne sur Linux en général), de sorte que son installation devrait vous être très facile. J'espère juste que cela fonctionne également sur une architecture ARM, quelque chose que je ne peux pas tester.

Edit: il compile et s'installe correctement sur raspbian.

MariusMatutiae
la source