Inhaltsverzeichnis
FreeBSD - USB-Probleme
umass-Problem (FreeBSD+USB)
Meine USB-Probleme mit FreeBSD 8.
Die sehen in dmesg mit ZFS so aus:
(da2:umass-sim1:1:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 (da2:umass-sim1:1:0:0): CAM Status: SCSI Status Error (da2:umass-sim1:1:0:0): SCSI Status: Check Condition (da2:umass-sim1:1:0:0): ILLEGAL REQUEST asc:20,0 (da2:umass-sim1:1:0:0): Invalid command operation code (da2:umass-sim1:1:0:0): Unretryable error (da2:umass-sim1:1:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 (da2:umass-sim1:1:0:0): CAM Status: SCSI Status Error (da2:umass-sim1:1:0:0): SCSI Status: Check Condition (da2:umass-sim1:1:0:0): ILLEGAL REQUEST asc:20,0 (da2:umass-sim1:1:0:0): Invalid command operation code (da2:umass-sim1:1:0:0): Unretryable error (da2:umass-sim1:1:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 (da2:umass-sim1:1:0:0): CAM Status: SCSI Status Error (da2:umass-sim1:1:0:0): SCSI Status: Check Condition (da2:umass-sim1:1:0:0): ILLEGAL REQUEST asc:20,0 (da2:umass-sim1:1:0:0): Invalid command operation code (da2:umass-sim1:1:0:0): Unretryable error (da2:umass-sim1:1:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 (da2:umass-sim1:1:0:0): CAM Status: SCSI Status Error (da2:umass-sim1:1:0:0): SCSI Status: Check Condition (da2:umass-sim1:1:0:0): ILLEGAL REQUEST asc:20,0 (da2:umass-sim1:1:0:0): Invalid command operation code (da2:umass-sim1:1:0:0): Unretryable error
oder mit UFS so:
g_vfs_done():da2a[READ(offset=268136448000, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=769928986624, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=65536, length=2048)]error = 5 g_vfs_done():da2a[WRITE(offset=6144000, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6160384, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6176768, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6193152, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6209536, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6225920, length=2048)]error = 5 g_vfs_done():da2a[READ(offset=268329074688, length=16384)]error = 5 g_vfs_done():da2a[READ(offset=268521701376, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=769928986624, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=65536, length=2048)]error = 5 g_vfs_done():da2a[WRITE(offset=6144000, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6160384, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6176768, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6193152, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6209536, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6225920, length=2048)]error = 5 g_vfs_done():da2a[READ(offset=268714328064, length=16384)]error = 5 g_vfs_done():da2a[READ(offset=268906954752, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=769928986624, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=65536, length=2048)]error = 5 g_vfs_done():da2a[WRITE(offset=6144000, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6160384, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6176768, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6193152, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6209536, length=16384)]error = 5 g_vfs_done():da2a[WRITE(offset=6225920, length=2048)]error = 5 g_vfs_done():da2a[READ(offset=269099581440, length=16384)]error = 5
1. Lösungsansatz
I've been running with the patch for two and a half hours, and I'm seeing a steady increase in bounced buffers, with no further complaints of checksum errors. I can usually trigger the problem about two hours into load generation, so things are looking good so far.
2. Lösungsansatz (für FreeBSD 8.0): quirks
# usbconfig -u 1 -a 3 dump_device_desc ugen1.3: <JM20336 SATA, USB Combo JMicron> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0200 bDeviceClass = 0x0000 bDeviceSubClass = 0x0000 bDeviceProtocol = 0x0000 bMaxPacketSize0 = 0x0040 idVendor = 0x152d idProduct = 0x2336 bcdDevice = 0x0100 iManufacturer = 0x0001 <retrieving string failed> iProduct = 0x0002 <retrieving string failed> iSerialNumber = 0x0005 <retrieving string failed> bNumConfigurations = 0x0001
Und so soll es wohl gemacht werden:
# vi /usr/src/sys/cam/scsi/scsi_da.c
{
/*
* JM20336 SATA, USB Combo JMicron
* meine externe 3,5-Zoll-USB-Festplatte
*/
{T_DIRECT, SIP_MEDIA_REMOVABLE, "0x152d", "0x2336", "*"},
/*quirks*/ DA_Q_NO_SYNC_CACHE
},
Und jetzt am besten erneut das ganze FreeBSD-System bauen, geht ja schnell. Das ist zwar nicht nötig, aber dann passt wenigstens alles.
Zu beachten ist hierbei auch, dass manche Treiber mehr als einen quirk und/oder quirks in unterschiedlichen Treibersektionen benötigen oder auch einen Eintrag in der /usr/src/sys/cam/scsi/scsi_da.c und der /sys/dev/usb/storage/umass.c Datei erfordern!
3. Lösungsansatz (ist totsicher)
Kauf nur externe USB-Plattengehäuse, die mit FreeBSD funktionieren: http://www.bsdforen.de/showthread.php?p=220733#post220722
Ich habe prima Erfahrungen mit dem WD My Book Essential 3TB an USB 2.0 mit ZFS gemacht. Da hab ich über 500 GB in einem Rutsch rauf geschoben, absolut ohne Zicken. USB 3.0 ist deutlich schneller aber leider gehen bei mir laufend die USB3-Ports, mit diesen Platten dran, kaputt. Deshalb nutze ich sie nur noch an USB 2.0.
