FreeBSD > USB接続HDD SCSI Status Error

Top > FreeBSD > USB接続HDD SCSI Status Error

USB接続HDD SCSI Status Error



ZFSプールを作成しkernelをATA_CAM化した後に"SCSI Status Error"が大量に出るようになり、その対処作業の備忘録です

新規USBデバイス追加
USB quirk を追加: uyota 匠の一手

以上のサイトを参考にさせていただきました



エラー内容の確認


GENERIC kernelでは発生しなかったエラーだったのでkernel configに問題があるような気もしますが、ともかく対応します
FreeBSD 8.1-Release時にZFSのテストでUSB flashに導入後、kernelをカスタマイズした時にUSB flashにアクセスすると"SCSI Status Error"になり、その時のGENERIC kernelでは"SCSI Status Error"にならなかった記憶があります

SCSI Status Errorの確認 [dmesg]

  • SCSI Status Errorのデバイスを確認します
    # dmesg
    ...(省略)
    (da3:umass-sim4:4:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 
    (da3:umass-sim4:4:0:0): CAM status: SCSI Status Error
    (da3:umass-sim4:4:0:0): SCSI status: Check Condition
    (da3:umass-sim4:4:0:0): SCSI sense: ILLEGAL REQUEST asc:20,0 (Invalid command 
    operation code)
    (da5:umass-sim6:6:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 
    (da5:umass-sim6:6:0:0): CAM status: SCSI Status Error
    (da5:umass-sim6:6:0:0): SCSI status: Check Condition
    (da5:umass-sim6:6:0:0): SCSI sense: ILLEGAL REQUEST asc:20,0 (Invalid command o
    peration code)
    (da1:umass-sim2:2:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 
    (da1:umass-sim2:2:0:0): CAM status: SCSI Status Error
    (da1:umass-sim2:2:0:0): SCSI status: Check Condition
    (da1:umass-sim2:2:0:0): SCSI sense: ILLEGAL REQUEST asc:24,0 (Invalid field in 
    CDB)
    (da0:umass-sim1:1:0:0): SYNCHRONIZE CACHE(10). CDB: 35 0 0 0 0 0 0 0 0 0 
    (da0:umass-sim1:1:0:0): CAM status: SCSI Status Error
    (da0:umass-sim1:1:0:0): SCSI status: Check Condition
    (da0:umass-sim1:1:0:0): SCSI sense: ILLEGAL REQUEST asc:24,0 (Invalid field in 
    CDB)
    

    "SYNCHRONIZE CACHE"の際にSCSI Status Errorがでています
    エラーが出ているドライブは ZFSプールを作成しているUSB接続したHDDのみでしたので、USBの確認を行います

USBデバイスアドレスの確認 [dmesg]

  • エラーを出しているusbデバイスのアドレスを確認します
    # dmesg
    ...(省略)
    ugen3.3: <vendor 0x05e3> at usbus3
    umass1: <vendor 0x05e3 USB Storage, class 0/0, rev 2.00/0.09, addr 3> on usbus3
    umass1:  SCSI over Bulk-Only; quirks = 0x0000
    ...(省略)
    umass1:7:1:-1: Attached to scbus7
    ...(省略)
    da0 at umass-sim1 bus 1 scbus7 target 0 lun 0
    da0: <WDC WD15 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    da0: 40.000MB/s transfers
    da0: 1430799MB (2930277164 512 byte sectors: 255H 63S/T 182401C)
    ...(省略)
    ugen3.4: <vendor 0x05e3> at usbus3
    umass2: <vendor 0x05e3 USB Storage, class 0/0, rev 2.00/0.09, addr 4> on usbus3
    umass2:  SCSI over Bulk-Only; quirks = 0x0000
    ...(省略)
    umass2:8:2:-1: Attached to scbus8
    da1 at umass-sim2 bus 2 scbus8 target 0 lun 0
    da1: <WDC WD20 EARS-00MVWB0 0009> Fixed Direct Access SCSI-0 device 
    da1: 40.000MB/s transfers
    da1: 1907729MB (3907029164 512 byte sectors: 255H 63S/T 243201C)
    ...(省略)
    ugen3.5: <JMicron> at usbus3
    umass4: <MSC Bulk-Only Transfer> on usbus3
    umass4:  SCSI over Bulk-Only; quirks = 0x0000
    ...(省略)
    umass4:10:4:-1: Attached to scbus10
    da3 at umass-sim4 bus 4 scbus10 target 0 lun 0
    da3: <WDC WD50 00AAKS-00YGA0 > Fixed Direct Access SCSI-2 device 
    da3: 40.000MB/s transfers
    da3: 476938MB (976771055 512 byte sectors: 255H 63S/T 60801C)
    ...(省略)
    ugen3.6: <JMicron> at usbus3
    umass6: <MSC Bulk-Only Transfer> on usbus3
    umass6:  SCSI over Bulk-Only; quirks = 0x0000
    ...(省略)
    umass6:12:6:-1: Attached to scbus12
    da5 at umass-sim6 bus 6 scbus12 target 0 lun 0
    da5: <Hitachi HDP725050GLA360 > Fixed Direct Access SCSI-2 device 
    da5: 40.000MB/s transfers
    da5: 476940MB (976773168 512 byte sectors: 255H 63S/T 60801C)
    ...(省略)
    

    da0 unit:3 address:3
    da1 unit:3 address:4
    da2 unit:3 address:5
    da3 unit:3 address:6
    とわかりました
    同じUSB Hubに接続しているのでunitが同じなのも頷けます

idVenderとidProduceの確認 [usbconfig]

  • usbconfigを使用してidVenderとidProduceを確認します
    # usbconfig -d 3.3 dump_device_desc
    ugen3.3: <USB Storage vendor 0x05e3> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps
    ) pwr=ON
    
      bLength = 0x0012 
      bDescriptorType = 0x0001 
      bcdUSB = 0x0200 
      bDeviceClass = 0x0000 
      bDeviceSubClass = 0x0000 
      bDeviceProtocol = 0x0000 
      bMaxPacketSize0 = 0x0040 
      idVendor = 0x05e3 
      idProduct = 0x0718 
      bcdDevice = 0x0009 
      iManufacturer = 0x0000  <no string>
      iProduct = 0x0001  <USB Storage>
      iSerialNumber = 0x0002  <000000000033>
      bNumConfigurations = 0x0001 
    
    # usbconfig -d 3.4 dump_device_desc
    ugen3.4: <USB Storage vendor 0x05e3> at usbus3, cfg=0 md=HOST spd=HIGH (480Mbps
    ) pwr=ON
    
      bLength = 0x0012 
      bDescriptorType = 0x0001 
      bcdUSB = 0x0200 
      bDeviceClass = 0x0000 
      bDeviceSubClass = 0x0000 
      bDeviceProtocol = 0x0000 
      bMaxPacketSize0 = 0x0040 
      idVendor = 0x05e3 
      idProduct = 0x0718 
      bcdDevice = 0x0009 
      iManufacturer = 0x0000  <no string>
      iProduct = 0x0001  <USB Storage>
      iSerialNumber = 0x0002  <000000000033>
      bNumConfigurations = 0x0001 
    
    # usbconfig -d 3.5 dump_device_desc
    ugen3.5: <USB to ATA/ATAPI Bridge JMicron> at usbus3, cfg=0 md=HOST spd=HIGH (4
    80Mbps) pwr=ON
    
      bLength = 0x0012 
      bDescriptorType = 0x0001 
      bcdUSB = 0x0200 
      bDeviceClass = 0x0000 
      bDeviceSubClass = 0x0000 
      bDeviceProtocol = 0x0000 
      bMaxPacketSize0 = 0x0040 
      idVendor = 0x152d 
      idProduct = 0x2339 
      bcdDevice = 0x0100 
      iManufacturer = 0x0001  <JMicron>
      iProduct = 0x0002  <USB to ATA/ATAPI Bridge>
      iSerialNumber = 0x0005  <DCA84831844F>
      bNumConfigurations = 0x0001 
    
    # usbconfig -d 3.6 dump_device_desc
    ugen3.6: <USB to ATA/ATAPI Bridge JMicron> at usbus3, cfg=0 md=HOST spd=HIGH (4
    80Mbps) pwr=ON
    
      bLength = 0x0012 
      bDescriptorType = 0x0001 
      bcdUSB = 0x0200 
      bDeviceClass = 0x0000 
      bDeviceSubClass = 0x0000 
      bDeviceProtocol = 0x0000 
      bMaxPacketSize0 = 0x0040 
      idVendor = 0x152d 
      idProduct = 0x2339 
      bcdDevice = 0x0100 
      iManufacturer = 0x0001  <JMicron>
      iProduct = 0x0002  <USB to ATA/ATAPI Bridge>
      iSerialNumber = 0x0005  <EA534F3BBAFF>
      bNumConfigurations = 0x0001 
    
  • idVendorで検索します
    # cd /usr/src/sys/dev/usb
    # find . -type f | xargs grep -i 5e3
    usbdevs:vendor GENESYS				0x05e3  Genesys Logic
    # find . -type f | xargs grep -i 152d
    usbdevs:vendor JMICRON				0x152d  JMicron
    

    idVendor:0x05e3 idProduct:0x0718

idVendor:0x152d idProduct:0x2339
とわかりました

エラーの修正


修正する箇所がわかりましたので、それぞれのデバイスに対応していきます

USB quirk設定 [usbconfig]

  • "SYNCHRONIZE CACHE"の際にSCSI Status Errorがでているそれぞれのデバイスに対して、USB quirk "UQ_MSC_NO_SYNC_CACHE"を設定します
    # usbconfig -d 3.3 add_quirk UQ_MSC_NO_SYNC_CACHE
    # usbconfig -d 3.3 reset
    # usbconfig -d 3.4 add_quirk UQ_MSC_NO_SYNC_CACHE
    # usbconfig -d 3.4 reset
    # usbconfig -d 3.5 add_quirk UQ_MSC_NO_SYNC_CACHE
    # usbconfig -d 3.5 reset
    # usbconfig -d 3.6 add_quirk UQ_MSC_NO_SYNC_CACHE
    # usbconfig -d 3.6 reset
    

    今回はこれでエラーがなくなりました

USB quirk設定 [ソース修正]

  • ソースの修正をします
    まずはchipの確認をします
    エアリア 迅龍SUは商品ページに"JMicronコントローラー搭載"、"※S-ATAⅡ機能であるNCQ等には対応しておりません"と記載があります
    また外見が透明なので、すぐに確認できました
    chipは"JMicron JM20339"です
    Groovy UD-505SA の方は中身が見えないので、開けてみました
    ピントが合わず、見えにくいですが"GENESYS Logic GL830"でした
  • /usr/src/sys/dev/usb/usbdevsに以下を挿入します
    product GENESYS GL830USB2SATA	0x0718	GL830USB USB-SATA Brigde
    product JMICRON JM20339		0x2339	USB to SATA Bridge
    
  • /usr/src/sys/dev/usb/quirk/usb_quirk.cに以下を挿入します
    USB_QUIRK(GENESYS, GL830USB2SATA, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
    USB_QUIRK(JMICRON, JM20339, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
    

修正後、buildkernel、installkernelし再起動して対応終了です

資料

アーカイブ


関連ページ


名前:
コメント:
最終更新:2012年08月20日 16:22