Je tente de récupérer un max de données d'un disque dur externe (WD my passport) en train de mourir (pas le mien bien sur, moi je fais des sauvegardes ...)
Problème : ces connards de WD ont soudé l'adaptateur vers usb directement sur le disque dur ! Donc aucun moyen de brancher le disque en sata, je dois le brancher en usb.
J'ai donc branché le disque en usb et lancé ddrescue, mais c'est très lent puisqu'un tas de secteurs sont morts. J'utilise donc le flag "-n" de ddrescue, qui permet de ne pas essayer de relire les blocs qui provoquent une erreur de lecture. Mais ça ne suffit pas : avant d'abandonner la lecture d'un bloc, le kernel essaie pendant 30s, et vu le nombre d'erreurs de lecture j'en ai pour des semaines à ce rythme la !
Je suis donc allé trifouiller un peu dans /sys et dans de la doc, et j'ai trouvé le fichier "/sys/block/sdd/device/timeout", sensé configurer le temps au bout duquel la lecture d'un bloc doit être abandonnée et renvoyer une erreur, qui contient la valeur 30 par défaut. En y mettant la valeur 5, les résultats ne sont pas exactement ceux attendus :
Pour certaines erreur de lecture, plus précisément celles qui provoquent dans les logs le message suivant :
Code: Select all
sd 24:0:0:0: [sdd] Unhandled sense code
[671091.474952] sd 24:0:0:0: [sdd]
[671091.474954] Result: hostbyte=0x00 driverbyte=0x08
[671091.474956] sd 24:0:0:0: [sdd]
[671091.474957] Sense Key : 0x3 [current]
[671091.474961] sd 24:0:0:0: [sdd]
[671091.474963] ASC=0x11 ASCQ=0x0
[671091.474965] sd 24:0:0:0: [sdd] CDB:
[671091.474966] cdb[0]=0x28: 28 00 06 e9 95 80 00 00 80 00
[671091.474974] end_request: critical target error, dev sdd, sector 115971456
Cependant pour d'autres erreurs de lecture, celles qui provoquent dans les logs le message suivant :
Code: Select all
671127.655965] sd 24:0:0:0: timing out command, waited 30s
[671127.655974] sd 24:0:0:0: [sdd] Unhandled sense code
[671127.655976] sd 24:0:0:0: [sdd]
[671127.655978] Result: hostbyte=0x00 driverbyte=0x08
[671127.655980] sd 24:0:0:0: [sdd]
[671127.655981] Sense Key : 0x4 [current]
[671127.655985] sd 24:0:0:0: [sdd]
[671127.655986] ASC=0x44 ASCQ=0x0
[671127.655989] sd 24:0:0:0: [sdd] CDB:
[671127.655990] cdb[0]=0x28: 28 00 06 e9 9b 80 00 00 80 00
[671127.655998] end_request: I/O error, dev sdd, sector 115972992
J'ai cherché partout dans /sys, essayé de désactiver certaines options du firmware avec smartctl, hdparm et sdparm, mais rien à faire ! Vos idées sont les bienvenues !

