Depuis quelques temps, j’ai remarqué que le disque dur raccordé en USB à mon Raspberry Pi ne se mettait jamais en veille. Même lorsqu’il n’était pas sollicité durant plusieurs heures.
C’est peut-être parce que c’est une disque IDE ? Le premier disque sur lequel j’effectuais mes backups était un SATA et je crois qu’il se mettait en veille tout seul, comme un grand. Mais je n’en suis pas certain.
Donc, pour lui éviter une mort trop précoce, je me suis tourné vers hdparm qui est un service qui va gérer le mode veille des disques durs supportés par le pilote de périphérique Linux ATA/IDE.
Pour l’installation, c’est très facile. Comme d’habitude, on va commencer par faire une petite mise à jour :
$ sudo apt-get update && sudo apt-get upgrade
Puis on installe hdparm :
$ sudo apt-get install hdparm
On va ensuite déterminer comment s’appelle le disque :
$ sudo fdisk -l
Ce qui devrait nous retourner quelque chose comme ça :
Disk /dev/sdb: 250.1 GB, 250059350016 bytes 69 heads, 63 sectors/track, 112352 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x829c39c2 Device Boot Start End Blocks Id System /dev/sdb1 2048 488397167 244197560 83 Linux
Le disque dur de 250 Gb qui nous intéresse s’appelle donc : /dev/sdb
. Mais ce pourrait être sda
, sdc
, …
On va maintenant tester si le HD supporte la fonctionnalité de gestion d’énergie (APM pour Advanced Power Management) :
Cette procédure est documentée ici : http://doc.ubuntu-fr.org/hdparm#gestion_d_energie
$ sudo hdparm -I /dev/sd[X] | grep level
(où [X] est une lettre (entre a et z) représentant votre disque dur).
S’il le disque le supporte, vous obtiendrez un nombre (254 par défaut), et vous pourrez continuer.
On va alors essayer de le mettre en veille au bout de 5 secondes :
$ sudo hdparm -S 1 /dev/sd[X]
Puis, consulter son état courant :
$ sudo hdparm -C /dev/sd[X]
Sinon, il est seulement possible de le mettre en veille (arrêt de la rotation des plateaux : spin down) une fois et il se relancera dès qu’il sera sollicité :
$ sudo hdparm -y /dev/sd[X]
Avec mon disque, la commande sudo hdparm -C /dev/sdb
me retourne unknown
et pourtant, hdparm fonctionne très bien :
/dev/sdb: drive state is: unknown
Jusqu’ici, nous avons utilisé hdparm en mode console, mais il est préférable de déterminer toute les options dans le fichier /etc/hdparm.conf
.
Vous trouverez ici la liste des fonctions expliquées.
Pour éditer /etc/hdparm.conf
, on va utiliser la commande suivante :
$ sudo nano /etc/hdparm.conf
Puis rechercher, décommenter et modifier la ligne suivante :
# -S standby (spindown) timeout for the drive spindown_time = 60
Où chaque unité équivaut à 5 secondes. 60 = 300 secondes = 5 minutes.
J’ai lu (par exemple ici) que, parfois, les paramètres du fichier conf n’étaient pas toujours pris en compte.
Pour résoudre ce problème, il semble utile d’ajouter la ligne suivante au fichier /etc/rc.local
.
On édite le fichier :
$ sudo nano /etc/rc.local
On ajoute la ligne avant la dernière ligne : exit 0
sudo hdparm -S 60 /dev/sd[X]
Perso, au lieu d’une commande dans /etc/rc.local
, j’ai opté pour une commande dans le cron :
$ sudo crontab -e
Et on ajoute la ligne suivante :
@reboot sudo hdparm -S 60 /dev/disk/by-uuid/
d7a9f26c-2f98-4c7f-a33f-53e0fe959d13 2>&1
Le @reboot
indique à cron d’exécuter la commande une seule fois au moment du boot. Et l’utilisation de l’uuid évite les confusions de disques qui peuvent changer de nom : sda, sdb, sdc, …
Quelques commandes de cron disponibles ici : http://doc.ubuntu-fr.org/cron
On obtient l’uuid du disque avec :
$ sudo blkid
Et pour terminer, juste pour le plaisir, on va afficher les propriétés du disque dur :
$ sudo hdparm -I /dev/sd[X] | more
/dev/sdb: ATA device, with non-removable media Model Number: WDC WD2500BEVE-00WZT0 Serial Number: WD-WXEZ07320965 Firmware Revision: 01.01A01 Standards: Supported: 8 7 6 5 Likely used: 8 Configuration: Logical max current cylinders 16383 16383 heads 16 16 sectors/track 63 63 -- CHS current addressable sectors: 16514064 LBA user addressable sectors: 268435455 LBA48 user addressable sectors: 488397168 Logical/Physical Sector size: 512 bytes device size with M = 1024*1024: 238475 MBytes device size with M = 1000*1000: 250059 MBytes (250 GB) cache/buffer size = 8192 KBytes Capabilities: LBA, IORDY(can be disabled) Standby timer values: spec'd by Standard, with device specific minimum R/W multiple sector transfer: Max = 16 Current = 0 Advanced power management level: 128 Recommended acoustic management value: 128, current value: 254 DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5 Cycle time: min=120ns recommended=120ns PIO: pio0 pio1 pio2 pio3 pio4 Cycle time: no flow control=120ns IORDY flow control=120ns Commands/features: Enabled Supported: * SMART feature set Security Mode feature set * Power Management feature set * Write cache * Look-ahead * Host Protected Area feature set * WRITE_BUFFER command * READ_BUFFER command * NOP cmd * DOWNLOAD_MICROCODE * Advanced Power Management feature set SET_MAX security extension Automatic Acoustic Management feature set * 48-bit Address feature set * Device Configuration Overlay feature set * Mandatory FLUSH_CACHE * FLUSH_CACHE_EXT * SMART error logging * SMART self-test * General Purpose Logging feature set * 64-bit World wide name * IDLE_IMMEDIATE with UNLOAD * Segmented DOWNLOAD_MICROCODE * SMART Command Transport (SCT) feature set * SCT Long Sector Access (AC1) * SCT LBA Segment Access (AC2) * SCT Error Recovery Control (AC3) * SCT Features Control (AC4) * SCT Data Tables (AC5) unknown 206[13] (vendor specific) Security: Master password revision code = 65534 supported not enabled not locked not frozen not expired: security count not supported: enhanced erase 84min for SECURITY ERASE UNIT. Logical Unit WWN Device Identifier: 50014ee2563ff8e4 NAA : 5 IEEE OUI : 0014ee Unique ID : 2563ff8e4 HW reset results: CBLID- above Vih Device num = 0 determined by the jumper Checksum: correct
Edit 5 juillet 2014
J’utilise un disque dur 2,5 pouces avec une alimentation séparée sur laquelle j’ai raccordé un transfo 5V 1A.
Avec le temps, je me suis aperçu que l’ordre de branchement du disque dur au Raspberry Pi était important.
En effet, lors de toute connexion/déconnexion physique du disque dur, il convient de débrancher tous les câbles (usb et alim), puis de reconnecter d’abord l’alimentation, puis, l’USB.
Dans le cas contraire, lors de sa sortie de veille, le HD va « oublier » qu’il est alimenté par un transfo et essayer de ne tirer son alimentation que de la prise USB. Il en résulte alors un cliquetis incessant qui va occuper toutes les ressources processeur et, au final, faire crasher Raspbian.
8 ans ago ·
Super, merci !
5 ans ago ·
Bonjour,
Je suis tombé sur ton site qui explique très bien les actions de hdparm. Cependant, je n’arrive pas à trouver à quoi sert le 2>&1 à la fin de ta commande
« @reboot sudo hdparm -S 60 /dev/disk/by-uuid/d7a9f26c-2f98-4c7f-a33f-53e0fe959d13 2>&1 »
Peux tu me dire à quoi elle sert ?
Merci pour tes explications
5 ans ago ·
Bonjour,
Ça permet de renvoyer STDERR au même endroit que STDOUT.
On peut faire aussi : >/dev/null 2>&1
Des références :
http://lanterne-rouge.over-blog.org/article-que-signifie-dev-null-2-1-70233357.html
https://ubuntuplace.info/questions/306864/what-does-dev-null-21-mean-in-this-article-of-crontab-basics
https://superuser.com/questions/122246/how-can-i-view-results-of-my-cron-jobs
Didier.
5 ans ago ·
Bonjour, merci pour ta réponse. Je débute totalement sur linux et je vois souvent 2>&1 sans arriver à savoir à quoi cela représente 🙂
5 ans ago ·
Bonjour, merci pour ces infos.
Pensez vous qu’il soit possible de faire fonctionner hdparm pour 2 Hdd fonctionnant en Raid1?
Merci
5 ans ago ·
Bonjour,
Ça semble jouable. À creuser et à tester.
https://linuxfr.org/forums/linux-general/posts/raid-logiciel-et-hdparm
Didier.
4 ans ago ·
bonjour,
en essayant toutes ses config j’ai mon disque externe de 2To auto alimenté qui se met en veille donc la tout va bien mais le souci s’est au moment ou j’en ai besoin il ne reveille pas donc le raspberry ne le reconnait plus
avez vous une solution?
cordialement
4 ans ago ·
Bonjour,
Certains disques réagissent mal à la mise en veille.
Vous pourriez essayer hd-idle.
http://hd-idle.sf.net/
Didier.