Disques ATA

Mise à jour Debian : 10.10 / Buster

On s’intéresse ici aux périphériques blocs de type disque dur rotatif ou ssd, disposant d'une interface ATA (SATA ou IDE)

Sommaire

1 - Identification du type d'interface

$ lspci |grep -i ata
00:17.0 SATA controller: Intel Corporation Cannon Point-LP SATA Controller [AHCI Mode] (rev 30)
$ ls -l /sys/class/block/sda
lrwxrwxrwx 1 root root 0 sept. 8 16:41 /sys/class/block/sda -> ../../devices/pci0000:00/0000:00:17.0/ata3/host2/target2:0:0/2:0:0:0/block/sda

Le disque /dev/sda est connecté sur le bus pci via une interface ata3

Pour un disque connecté par une interface usb ou pcie on aurait les mentions respectives usb ou nvme

$ ls -l /sys/class/block/sdb
lrwxrwxrwx 1 root root 0 sept. 8 16:41 /sys/class/block/sdb -> ../../devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.1/2-4.1:1.0/host3/target3:0:0/3:0:0:0/block/sdb

$ ls -l /sys/class/block/nvme0n1
lrwxrwxrwx 1 root root 0 sept. 8 16:41 /sys/class/block/nvme0n1 -> ../../devices/pci0000:00/0000:00:1d.0/0000:01:00.0/nvme/nvme0/nvme0n1
$ lsscsi -t
[2:0:0:0] disk sata:50026b767a012c69 /dev/sda
[3:0:0:0] disk usb:2-4.1:1.0 /dev/sdb
[N:0:5:1] disk pcie 0x144d:0xa801 /dev/nvme0n1

2 - hdparm

2.1 - Avertissement

DESCRIPTION
hdparm provides a command line interface to various kernel interfaces supported by
the Linux SATA/PATA/SAS "libata" subsystem and the older IDE driver subsystem. Many
newer (2008 and later) USB drive enclosures now also support "SAT" (SCSI-ATA Command
Translation) and therefore may also work with hdparm. E.g. recent WD "Passport"
models and recent NexStar-3 enclosures. Some options may work correctly only with
the latest kernels.

2.2 - Installation

$ sudo aptitude install hdparm

$ aptitude versions hdparm
i 9.58+ds-1 stable 500
p 9.58+ds-4~bpo10+1 buster-backports 100
p 9.58+ds-5 testing 10

2.3 - Caractéristiques principales du disque

La commandes hdparm -I fournit les caractéristiques détaillées du disque. A noter que selon les modèles de disque, certaines caractéristiques et commandes peuvent ne pas être présentes.

$ sudo hdparm -I /dev/sda |head -11

/dev/sda:

ATA device, with non-removable media
Model Number: KINGSTON SHSS37A480G
Serial Number: 50026B767A012C69
Firmware Revision: SAFM02.H
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Supported: 9 8 7 6 5
Likely used: 9

Le disque supporte la dernière version Sata : version 3. Il est utilisé selon la norme 9.

$ sudo hdparm -I /dev/sda |head -10

/dev/sda:

ATA device, with non-removable media
Model Number: IC25N060ATMR04-0
Serial Number: MRG309K3H2GZSK
Firmware Revision: MO3OAD1A
Standards:
Used: ATA/ATAPI-6 T13 1410D revision 3a
Supported: 6 5 4

Le disque est utilisé selon la norme ATA/ATAPI-6 : ATA-6

2.4 - Vitesse de rotation

$ sudo hdparm -I /dev/sdb |grep Rotation
Nominal Media Rotation Rate: 5400

Les vitesses usuelles sont 5400 ou 7200 tours par minute.

$ sudo hdparm -I /dev/sda |grep Rotation
Nominal Media Rotation Rate: Solid State Device

2.5 - Accès directe mémoire

Le mode d'accès direct mémoire est indiqué dans la ligne dma des caractéristiques détaillées :

$ sudo hdparm -I /dev/sda |grep dma
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6

Le mode de fonctionnement est indiqué par une étoile, ici il s'agit de udma6 (ultra dma mode 6).

2.6 - Gestion de la consommation

L'APM (Advanced Power Management) a pour but de réduire la consommation du disque, en particulier en jouant sur la vitesse de la rotation du disque. Le gain sur la consommation s'effectue au détriment de la performance d'entrée / sortie. Cette fonction est utilisée par les gestionnaires de consommation (laptop-mode-tools par exemple). L'APM est noté entre 1 et 255 :

APM = 1 - Max power management - Min IO efficiency
APM = 254 - Min power management - Max IO efficiency
A partir de 128 le ralentissement de la vitesse de rotation n'est plus autorisé
APM = 255 - APM disabled
$ sudo hdparm -I /dev/sdb |grep -i "power management"
Advanced power management level: 128
* Power Management feature set
* Advanced Power Management feature set
* Host-initiated interface power management
* Device-initiated interface power management
$ sudo hdparm -B /dev/sdb

/dev/sda:
APM_level = 128

Note : la valeur est modifiable, mais n'est pas mémorisée en cas de redémarrage. Par exemple, pour charger la valeur 1 :

$ sudo hdparm -B 1 /dev/sdb

/dev/sdb:
setting Advanced Power Management level to 0x01 (1)

2.7 - Temps d'attente avant arrêt du disque

Le temps d'attente (standby), avant arrêt de la rotation du disque, lorsque le disque n'est pas utilisé, est programmable entre 0 et 255 (voir man hdparm pour le détail). Exemple : programmation d'un temps d'attente de 5 secondes :

$ sudo hdparm -S 1 /dev/sr0

/dev/sr0:
setting standby to 1 (5 seconds)

Note : la valeur courante est modifiable mais n'est pas affichable ....

2.8 - Gestion acoustique

Certains disques supportent la gestion acoustique qui a pour but de réduire le bruit généré par la rotation du disque. Le disque ci-dessous ne supporte que deux valeurs : 128 = silencieux et 254 =rapide.

$ sudo hdparm -M /dev/sda

/dev/sda:
acoustic = 254 (128=quiet ... 254=fast)

Une valeur peut-être recommandée :

$ sudo hdparm -I /dev/sda |grep -i acoustic
Recommended acoustic management value: 128, current value: 254
* Automatic Acoustic Management feature set

Pour modifier, jusqu'au prochain redémarrage la valeur :

$ sudo hdparm -M 128 /dev/sda

3 - Protocole SMART

3.1 - Principe

3.2 - Installation

Description : Contrôle et surveillance de systèmes de stockage utilisant S.M.A.R.T.
Le paquet smartmontools contient deux utilitaires (smartctl et smartd) pour contrôler et
surveiller les systèmes de stockage utilisant le système S.M.A.R.T. (Self-Monitoring,
Analysis and Reporting Technology) intégré dans les disques durs ATA et SCSI modernes. Il est
dérivé du paquet smartsuite et inclut la gestion des disque ATA/ATAPI-5. Il devrait
fonctionner sur n'importe quel système Linux moderne.
$ sudo aptitude install smartmontools
$ sudo smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdb -d sat # /dev/sdb [SAT], ATA device
/dev/sdc -d sat # /dev/sdc [SAT], ATA devic

3.3 - Récapitulatif des caractéristiques du disque

smartcl -i fournit un récapitulatif des caractéristiques du disque :

$ sudo smartctl -i /dev/nvme0n1
smartctl 6.6 2017-11-05 r4594 [x86_64-linux-5.4.0-0.bpo.4-amd64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number: Samsung SSD 970 EVO 250GB
Serial Number: S465NX0KA72576V
Firmware Version: 2B2QEXE7
PCI Vendor/Subsystem ID: 0x144d
IEEE OUI Identifier: 0x002538
Total NVM Capacity: 250 059 350 016 [250 GB]
Unallocated NVM Capacity: 0
Controller ID: 4
Number of Namespaces: 1
Namespace 1 Size/Capacity: 250 059 350 016 [250 GB]
Namespace 1 Utilization: 74 967 281 664 [74,9 GB]
Namespace 1 Formatted LBA Size: 512
Namespace 1 IEEE EUI-64: 002538 5a81b3db92
Local Time is: Sat Apr 11 19:07:24 2020 CEST

3.4 - Température, heures de fonctionnement, santé du disque

Quelques informations supplémentaires intéressantes :

$ sudo smartctl -A /dev/nvme0n1 |grep Temperature
Temperature: 32 Celsius
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Temperature Sensor 1: 32 Celsius
Temperature Sensor 2: 31 Celsius
$ sudo smartctl -A /dev/nvme0n1 |grep Power
Power Cycles: 1 266
Power On Hours: 288
$ sudo smartctl -H /dev/nvme0n1 |tail -2
SMART overall-health self-assessment test result: PASSED

3.5 - Détails des "SMART data" (ATA seulement)

Des informations détaillées, reprenant les informations ci-dessus, sont disponibles :

$ sudo smartctl -A /dev/nvme0n1
smartctl 6.6 2017-11-05 r4594 [x86_64-linux-5.4.0-0.bpo.4-amd64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF SMART DATA SECTION ===
SMART/Health Information (NVMe Log 0x02, NSID 0x1)
Critical Warning: 0x00
Temperature: 32 Celsius
Available Spare: 100%
Available Spare Threshold: 10%
Percentage Used: 0%
Data Units Read: 3 297 851 [1,68 TB]
Data Units Written: 4 453 899 [2,28 TB]
Host Read Commands: 67 941 535
Host Write Commands: 29 311 982
Controller Busy Time: 210
Power Cycles: 1 266
Power On Hours: 288
Unsafe Shutdowns: 167
Media and Data Integrity Errors: 0
Error Information Log Entries: 69
Warning Comp. Temperature Time: 0
Critical Comp. Temperature Time: 0
Temperature Sensor 1: 32 Celsius
Temperature Sensor 2: 32 Celsius

3.6 - Réalisation de tests "off line"

La réalisation d'un test "off line" s'effectue en deux temps :

$ sudo smartctl -t short /dev/sda
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-4.7.0-0.bpo.1-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== 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.
Test will complete after Wed Oct 26 11:45:31 2016

Use smartctl -X to abort test.-
$ sudo smartctl -l selftest /dev/sda
smartctl 6.4 2014-10-07 r4002 [x86_64-linux-4.7.0-0.bpo.1-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== 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% 318 -
# 2 Extended offline Completed without error 00% 225 -
# 3 Extended offline Completed without error 00% 62 -
# 4 Short offline Completed without error 00% 62 -
# 5 Short offline Completed without error 00% 62

4 - hddtemp

Note :  Nowadays the 'drivetemp' kernel module is a better alternative. It uses the
Linux Hardware Monitoring kernel API (hwmon), so the temperature is returned
the same way and using the same tools as other sensors.

Loading this module is as easy as creating a file in the /etc/modules-load.d directory:

echo drivetemp > /etc/modules-load.d/drivetemp.conf


4.1 - Installation

$ sudo aptitude install hddtemp

4.2 - Utilisation

$ sudo hddtemp /dev/sda
/dev/sda: KINGSTON SHSS37A240G: 34°C
$ sudo hddtemp /dev/sdb
/dev/sdb: ST9750420AS: lecteur connu, mais il ne possède pas de capteur de température.
$ sudo hddtemp /dev/nvme0n1
ERREUR: /dev/nvme0n1: impossible de déterminer le type de bus (ou ce type de bus est inconnu)