Aller au contenu
Sylvain Joffraud l4w
Retour

SATA `PHYRdyChg` + 0 CRC : c’est l’alim, pas le disque

Un disque de mon NAS se met à décrocher son lien SATA en boucle, à peu près toutes les 50 secondes. dmesg :

ata2.00: exception Emask 0x10 SAct 0x0 SErr 0x10000 action 0xe frozen
ata2: SError: { PHYRdyChg }
ata2.00: failed command: FLUSH CACHE EXT
ata2: hard resetting link
ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
ata2.00: configured for UDMA/33

Le lien tombe (PHYRdyChg), une commande d’écriture est perdue en route (FLUSH CACHE EXT), le noyau fait un hard resetting link, et le lien remonte… en 1.5 Gbps (au lieu de 6.0). Puis ça recommence. C’est aussi audible : le disque fait des cycles moteur à répétition.

Le réflexe serait de condamner le disque. Ce serait une erreur.

Diagnostic : trois questions, dans l’ordre

1. Est-ce un seul disque, ou tout le contrôleur ?

sudo dmesg | grep -c "ata1.*PHYRdyChg"   # 0
sudo dmesg | grep -c "ata2.*PHYRdyChg"   # 4

Seul ata2 décroche, ata1 est parfait. Donc ce n’est pas un problème global de contrôleur ni de configuration système — c’est spécifique à ce lien.

2. Est-ce le link power management (ALPM) ?

L’ALPM agressif est une cause classique de PHYRdyChg : le noyau met le lien en basse conso, certains couples disque/contrôleur le supportent mal.

for h in /sys/class/scsi_host/host*/link_power_management_policy; do
  echo "$h = $(cat $h)"
done
# tous = max_performance

Déjà en max_performance → l’ALPM n’y est pour rien. (Si ça avait été min_power ou medium_power, un echo max_performance > … aurait pu régler l’affaire.)

3. Signal ou alimentation ? Le SMART tranche.

sudo smartctl -d sat -A /dev/sdX | grep -iE "UDMA_CRC|Pending|Reallocated"
# 199 UDMA_CRC_Error_Count   ...  0

UDMA_CRC_Error_Count = 0 est la clé. Des erreurs CRC signeraient un câble qui corrompt les bits en transit. Zéro CRC + des PHYRdyChg = le lien ne se corrompt pas, il tombe entièrement. Ça pointe vers une perte de contact ou d’alimentation, pas un défaut de signal ni de média.

La preuve : tester le disque ailleurs

Pour confirmer que le disque est sain, je le sors et je le branche sur un PC via un adaptateur USB-SATA (un lien totalement différent de la baie du NAS) :

sudo dd if=/dev/sdX of=/dev/null bs=1M count=5000 status=progress
# 5.2 GB copiés, 23 s, 221 MB/s
sudo dmesg | tail   # aucun reset, aucune erreur

5 Go lus à pleine vitesse, zéro erreur, SMART propre. Le disque est irréprochable. Le défaut est donc côté NAS : baie, câble, backplane… ou alimentation.

Dans mon cas, l’alimentation du NAS a fini par lâcher complètement quelques minutes plus tard. Le fin mot de l’histoire : une alim en fin de vie, incapable de tenir la tension pendant le spin-up d’un disque récent plus gourmand, faisait décrocher le PHY. Tous les symptômes (PHYRdyChg, chute à 1.5 Gbps, cycles moteur) découlaient de ça — pas du disque.

Lessons learned

Questions fréquentes

dmesg affiche « PHYRdyChg » et « hard resetting link » sur un disque SATA, il est mort ?
Pas forcément. PHYRdyChg (PHY Ready Changed) signifie que le lien SATA a physiquement chuté puis est remonté — le disque a perdu le contact ou l’alimentation, pas ses données. Regardez UDMA_CRC_Error_Count dans le SMART : s’il est à 0, il n’y a pas de corruption de signal sur le câble, ce sont des coupures franches du lien → soupçonnez l’alimentation ou un connecteur, pas le média.
Pourquoi mon lien SATA négocie à 1.5 Gbps au lieu de 3 ou 6 Gbps tout seul ?
Après plusieurs erreurs de lien, la couche libata du noyau réduit volontairement la vitesse (6→3→1.5 Gbps) pour tenter de stabiliser la liaison. Une négociation qui retombe à 1.5 Gbps après des hard resetting link est un symptôme d’instabilité physique (alim, câble, backplane), pas une caractéristique du disque.
Comment savoir si le problème vient du disque, du câble/baie ou de l’alimentation ?
Sortez le disque suspect et branchez-le sur une autre machine via un adaptateur USB-SATA. Lancez un test de lecture soutenu (dd if=/dev/sdX of=/dev/null bs=1M count=5000) et un smartctl -a. S’il lit à pleine vitesse sans erreur et que le SMART est propre, le disque est sain : le défaut est la baie, le câble ou l’alimentation d’origine.
Une alimentation défaillante peut-elle provoquer des resets de lien SATA ?
Oui, c’est un grand classique et sournois. Une alim en fin de vie délivre une tension instable, surtout sous la charge d’un spin-up de disque (a fortiori un modèle récent plus gourmand). La chute de tension fait décrocher le PHY SATA → PHYRdyChg et resets à répétition. Le disque paraît coupable alors que le vrai problème est l’alimentation.

Partager cet article :

Article précédent
Réparer un RAID1 mdadm sur n’importe quel PC Linux
Article suivant
`mdadm --add` en échec : le Bad Block Log en cause