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.

Notes

[1] Il est aussi possible de ne faire recompiler que le module umass avec l'option MODULES_OVERRIDE, voir le handbook pour plus de détails.