====== 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 ==== * [[http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2009-04/msg00503.html|dma_pg/dma_sg soll helfen]] * [[http://people.freebsd.org/~jhb/patches/dma_sg.patch|dma_sg.patch]] * [[http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2009-04/msg00506.html|soll geholfen haben]] 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 ==== * [[http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2009-04/msg00306.html|idVendor und idProduct: usbconfig dump_device_desc]] * [[http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2009-04/msg00285.html|Your device probably needs the no synchronize cache quirk. See quirk table in /sys/dev/usb/storage/umass.c]] * [[http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2009-04/msg00341.html|Try adding more of the possible quirks.]] # usbconfig -u 1 -a 3 dump_device_desc ugen1.3: 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 iProduct = 0x0002 iSerialNumber = 0x0005 bNumConfigurations = 0x0001 Und so soll es wohl gemacht werden: * [[http://www.root.org/~nate/freebsd/scsi/quirks.html|FreeBSD Quirk Guidelines]] # 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 [[::freebsd: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.