Tester un nouveau disque dur sous Linux

Voici ma procédure pour vérifier l’état d’un nouveau disque dur.

Les SSD surpassent complètement les disques durs en terme de performances. Cependant, même s’ils font des progrès en terme de capacité, les HDD ont toujours l’avantage en terme de prix au téraoctet. Donc les disques durs restent utiles quand on a des données volumineuses à gérer.

Vérifications rapides avec SMART

Cette commande devrait retourner PASSED. Si elle retourne FAILED, ce n’est pas la peine d’aller plus loin.

# smartctl -H /dev/sdX
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

On lance la version courte de l’auto-test SMART :

# smartctl -t short /dev/sdX
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.

On consulte les résultats après le détail indiqué :

# smartctl -l selftest /dev/sdX
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      1667         -

Pour finir les vérifications rapides, on regarde si les données SMART contiennent des valeurs suspectes :

# smartctl -a /dev/sdX

Prêtez notamment attention aux valeurs suivantes, qui devraient être à zéro :

  • Reallocated_Sector_Ct
  • Current_Pending_Sector
  • Offline_Uncorrectable

Désactiver les paramètres qui affectent la durée de vie

Si le disque passe les premières vérifications, on désactive certaines options pouvant réduire sa durée de vie.

Désactiver la mise en veille automatique (standby) :

hdparm -S 0 /dev/sdX

Désactiver l’APM pour éviter le parquage des têtes :

hdparm -B 255 /dev/sdX

Ces commandes devront être exécutés à chaque démarrage de la machine. On peut également tester les performances en lecture :

# hdparm -tT /dev/sdX
 Timing cached reads:   4376 MB in  2.00 seconds = 2190.20 MB/sec
 Timing buffered disk reads: 702 MB in  3.00 seconds = 233.79 MB/sec
# hdparm -tT /dev/sdX
 Timing cached reads:   4396 MB in  2.00 seconds = 2200.29 MB/sec
 Timing buffered disk reads: 698 MB in  3.00 seconds = 232.56 MB/sec
# hdparm -tT /dev/sdX
 Timing cached reads:   4402 MB in  2.00 seconds = 2203.49 MB/sec
 Timing buffered disk reads: 700 MB in  3.00 seconds = 233.06 MB/sec

Si les valeurs sont anormalement faibles, ça peut indiquer un problème.

Secteurs défectueux

La commande badblocks (paquet e2fsprogs) permet de scanner le disque à la recherche de secteurs défectueux. On profite que le disque ne soit pas encore utilisé pour faire un test en mode lecture/écriture :

# badblocks -wsv /dev/sdX

Si votre disque fait plus de plus de 2 To, il faut augmenter la taille des blocs :

# badblocks -wsv -b 4096 /dev/sdX

Étant donné que badblocks va écrire sur la totalité du disque à plusieurs reprises, le test est (très) long. Pour un disque de 16 To, par exemple, ça demande plusieurs jours. Si vous êtes connecté à distance, il est donc recommandé de lancer badblocks dans tmux.

Si tout se passe bien :

Checking for bad blocks in read-write mode
From block 0 to 3906469887
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 0 bad blocks found. (0/0/0 errors)

Test de charge avec stress-ng

Pour détecter d’éventuels problèmes sous forte sollicitation, on simule une charge intensive avec la commande stress-ng. Pour cibler le disque testé on utilise l’option --temp-path, ce qui nécessite d’avoir créé un système de fichier sur le disque.

# cfdisk /dev/sdX
# mkfs.ext4 /dev/sdX1
# mount /dev/sdX1 /mnt/mnt1
# md /mnt/mnt1/stress-ng
# apt install stress-ng
# stress-ng --hdd 4 --aggressive --keep-files --temp-path /mnt/mnt1/stress-ng --timeout 3h&

Pendant le stress test, il vaut mieux garder un œil sur la température du disque :

# watch -n 60 hddtemp /dev/sdX

Si la température dépasse les 55 °C :

  • soit vous êtes en pleine canicule ;
  • soit le refroidissement est insuffisant dans votre boîtier ;
  • si vous êtes sûr que le disque est suffisamment refroidi, alors il a probablement un problème.

Si tout va bien, la sortie ressemble à ceci :

stress-ng: info:  [3873] successful run completed in 10800.16s (3 hours, 0.16 secs)

On vérifie si le noyau a détecté des erreurs venant du disque :

# dmesg |grep sdX

Test SMART étendu

Après la recherche de secteurs défectueux et le stress test, on relance une analyse SMART, en faisant cette fois-ci un test étendu. Ça demande environ une journée pour un disque de 16 To.

# smartctl -t long /dev/sdX
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 1428 minutes for test to complete.

Quand le test est fini :

# smartctl -l selftest /dev/sdX
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%      2294         -
# 2  Short offline       Completed without error       00%      1667         -

Après tout ce qu’on a fait, on vérifie que SMART n’ait pas détecté un problème :

# smartctl -a /dev/sdX

Enfin pour finir, on active le monitoring SMART dans /etc/smartd.conf :

# Monitor all attributes except normalized Temperature (usually 194),
# but track Temperature changes >= 4 Celsius, report Temperatures
# >= 45 Celsius and changes in Raw value of Reallocated_Sector_Ct (5).
# Send mail on SMART failures or when Temperature is >= 55 Celsius.
/dev/sdX -a -I 194 -W 4,45,55 -p -R 5! -m user@domain.tld

On relance le démon smartd :

# systemctl restart smartmontools.service

Vous pouvez désormais utiliser votre disque dur avec, dans un futur immédiat, une garantie raisonnable de ne pas perdre les données que vous allez mettre dessus.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *