ZFS et USB. Erreur sur la synchronisation du cache
Par Dante le samedi 17 octobre 2009, 14:07 - Linux/BSD - Lien permanent
J'ai un vieux serveur que j'utilise comme entité de stockage et sauvegarde. La carte mère n'étant pas très récente (A7N8X-X), il n'y a pas de port SATA à disposition. J'ai donc acheté une carte promise TX4 qui marche à perfection. Manquant d'espace, je me suis aussi procuré deux boitiers externes USB Cooler Master X-Craft 350.
Le tout est dans un même zpool avec une configuration mirror.
Seul souci : les disques durs USB flood mon dmesg avec l'erreur suivante :
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 (da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error (da0:umass-sim0:0:0:0): SCSI Status: Check Condition (da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:20,0 (da0:umass-sim0:0:0:0): Invalid command operation code (da0:umass-sim0:0:0:0): Unretryable error
Pour m'en débarrasser il m'a suffit d'indiquer au driver
umass le fait que ces disques ne supporte pas l'opération
SYNCHRONIZE CACHE.
J'ai tout d'abord récupéré les codes vendor et product du chipset sata des boitiers.
lsusb # Présent dans le port sysutils/usbutils Bus /dev/usb Device /dev/ugen2.2: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge Bus /dev/usb Device /dev/ugen5.2: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
Voici donc mes deux boitiers externes, 152d correspond au
code vendor et 2338 au code
product Je vais ensuite éditer le fichier
/usr/src/sys/dev/usb/usbdevs :
Y ajouter le vendor JMicron :
... vendor UBIQUAM 0x1529 UBIQUAM Co., Ltd. vendor JMICRON 0x152d JMicron Technology Corp. vendor UBLOX 0x1546 U-blox ...
Et la catégorie lui correspondant avec le produit JM20337 :
/* Jaton products */ .... /* JMicron products */ product JMICRON JM20337 0x2338 Hi-Speed USB to SATA & PATA Combo Bridge /* JVC products */ ....
Ensuite, dans /usr/src/sys/dev/usb/storage/umass.c J'indique
que ce produit ne support pas la synchronisation du cache :
{USB_VENDOR_JMICRON, USB_PRODUCT_JMICRON_JM20337, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_SYNCHRONIZE_CACHE
},
{USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_FINECAM_L3, RID_WILDCARD,
...
Puis on recompile et réinstalle le kernel:[1]
cd /usr/src make buildkernel make installkernel
Et on redémarre dessus.