Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Mise en veille du disque dur avec hdparm

Catégories : Geek, Informatique, Raspberry Pi · par 23 Juin 2014

hdparm-01

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

hdparm-02J’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) comments

RiBee
7 ans ago · Répondre

Super, merci !

Pierre
4 ans ago · Répondre

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

Pierre
4 ans ago · Répondre

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 🙂

Greg
4 ans ago · Répondre

Bonjour, merci pour ces infos.
Pensez vous qu’il soit possible de faire fonctionner hdparm pour 2 Hdd fonctionnant en Raid1?
Merci

franck
3 ans ago · Répondre

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

    fanjoe
    3 ans ago · Répondre

    Bonjour,

    Certains disques réagissent mal à la mise en veille.
    Vous pourriez essayer hd-idle.

    http://hd-idle.sf.net/

    Didier.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.