# [HDD usb] Comment régler le timeout ?

## Zoboulo

Hello !

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 :

```

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

```

l'erreur est bien déclenchée au bout de 5 secondes et non de trente, ce qui entraine un gain de vitesse appréciable !

Cependant pour d'autres erreurs de lecture, celles  qui provoquent dans les logs le message suivant :

```

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

```

l'erreur est déclenchée au bout de 30s, et je n'ai pas trouvé comment raccourcir ce temps.

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 !

----------

## netfab

Salut,

Est ce que ton kernel est compilé avec CONFIG_SCSI_SAS_ATTRS, et si oui, peux-tu essayer sans, pour voir si le timeout de 30 secondes est toujours présent ?

----------

## Zoboulo

 *netfab wrote:*   

> Salut,
> 
> Est ce que ton kernel est compilé avec CONFIG_SCSI_SAS_ATTRS, et si oui, peux-tu essayer sans, pour voir si le timeout de 30 secondes est toujours présent ?

 

Non, cette option est désactivée !

----------

