dimanche 30 mars 2008

Seagate FreeAgent sous linux

0 commentaires
Un problème fréquent sous linux avec quelques materiels de type stockage (Disque dur, clé USB, ...) est l'erreur suivante...

sd 6:0:0:0: Device not ready: <6>: Current: sense key: Not Ready

Additional sense: Logical unit not ready, initializing command required
end_request: I/O error, dev sde, sector 450262279
metapage_read_end_io: I/O error

...puis le volume remonte de temps en temps en lecture seule.

Le matériel fonctionnant correctement sous Windows... le problème est donc logiciel.

Après une longue recherche, j'ai fini par trouver le fautif : "udev"

La solution (pour une Debian like ; mais cela fonctionne aussi avec Gentoo & surement d'autre.)

Lancer la commande
$ dmesg | grep Vendor
Vendor: Seagate Model: FreeAgent Go Rev: 100F
Note : Il se peut que la commande vous retourne plusieurs lignes ; identifier la bonne en fonction de votre matériel

Créer le fichier : (en adaptant les parties en gras)
  • /etc/udev/rules.d/85-usb-hd-fix.rules :
    • BUS=="scsi", SYSFS{vendor}=="Seagate", RUN+="/usr/bin/usbhdfix %k"
  • /usr/bin/usbhdfix
    • #!/bin/bash
      echo 1024 > /sys/block/$1/device/max_sectors
      echo 1 > /sys/block/$1/device/scsi_disk:*/allow_restart
Puis le rendre exécutable avec la commande : chmod +x /usr/bin/usbhdfix

Après un restart du démon UDEV ou de la machine le disque devrait fonctionner au moins aussi bien que sous Windows ;).