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.
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 :
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.
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)
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 :
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
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.