Raspberry Pi 3 B+でFreeBSDを動かしたメモ (3)

なかなか進捗しない…。GW中に少しは進めるかな?

今日はUSB接続のHDDの見え方が怪しいので手を入れてみた。繋いだのはMARSHALのMAL33000EX3-BK × 4本。いや、安かったし…。メーカーのWebを見てもUSB←→SATAのチップに何を使っているか分からないので手探り。

ugen0.6: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD> at usbus0
umass0 on uhub3
umass0: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD, class 0/0, rev 2.10/5.05, addr 6> on usbus0
(probe0:umass-sim0:0:0:0): INQUIRY. CDB: 12 00 00 00 24 00
(probe0:umass-sim0:0:0:0): CAM status: CCB request completed with an error
(probe0:umass-sim0:0:0:0): Retrying command, 3 more tries remain
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0: <MARSHAL SHELTER EXTERNAL 0505> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 000000000001
da0: 40.000MB/s transfers
da0: 2861588MB (5860533168 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
ugen0.7: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD> at usbus0
umass1 on uhub3
umass1: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD, class 0/0, rev 2.10/5.05, addr 7> on usbus0
da1 at umass-sim1 bus 1 scbus1 target 0 lun 0
da1: <MARSHAL SHELTER EXTERNAL 0505> Fixed Direct Access SPC-4 SCSI device
da1: Serial Number 000000000001
da1: 40.000MB/s transfers
da1: 2861588MB (5860533168 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>
ue0: link state changed to UP
muge0: Chip ID 0x7800 rev 0002
ue0: link state changed to DOWN
(da0:umass-sim0:0:0:0): READ(16). CDB: 88 00 00 00 00 01 5d 50 a3 ae 00 00 00 01 00 00
(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): SCSI sense: NOT READY asc:4,1 (Logical unit is in process of becoming ready)
(da0:umass-sim0:0:0:0): Polling device for readiness
ue0: link state changed to UP
(da1:umass-sim1:1:0:0): READ(16). CDB: 88 00 00 00 00 01 5d 50 a3 ae 00 00 00 01 00 00
(da1:umass-sim1:1:0:0): CAM status: SCSI Status Error
(da1:umass-sim1:1:0:0): SCSI status: Check Condition
(da1:umass-sim1:1:0:0): SCSI sense: NOT READY asc:4,1 (Logical unit is in process of becoming ready)
(da1:umass-sim1:1:0:0): Polling device for readiness

この時点で既にいくつかおかしい。

  1. 4本繋いだのに2本しか見えていない → これはUSBメモリ起動していたときに、USBメモリとUSB HDDを一緒に繋ぐと立ち上がらなくなった件と関係あるのかも
  2. da0認識とともに「CAM status: CCB request completed with an error」とか出てきている。ATAとかのプロトコルよく知らないからいろいろ調べなければ
  3. da0、da1ともに「READ(16). CDB: 88 00 00 00 00 01 5d 50 a3 ae 00 00 00 01 00 00」「CAM status: SCSI Status Error」とか出てくる

いろいろググってみたところ、似たようなエラーはUSB quirk設定で討ち取っている事例があったのでUSB quirkから攻めて見る。usb_quirkのmanを見ると、USBデバイスのパラメータチューニングできる模様。特に後者はSCSI系のエラーが出ており、ATAPIプロトコルの使用を強制すると改善できそう?

となるとloader.confにどう仕込むか。manのLOADER TUNABLEの項によるとVendorId、ProductId、LowRevision、HighRevisionを指定してあげればカーネルロードの段階でパラメータを仕込める模様。となるとこのIDが必要。

# usbconfig -d 0.6 dump_device_desc
ugen0.6: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0210
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x0000
  bMaxPacketSize0 = 0x0040
  idVendor = 0x278a
  idProduct = 0x0001
  bcdDevice = 0x0505
  iManufacturer = 0x0001  <MARSHAL SHELTER EXTERNAL HDD>
  iProduct = 0x0002  <MARSHAL SHELTER EXTERNAL HDD>
  iSerialNumber = 0x0003  <000000000001>
  bNumConfigurations = 0x0001

ということでこの製品の場合はVendorId = 0x278a、ProductId = 0x0001の模様。Revisionは分からないのでmanに乗っているサンプルを流用 (0~ffff) してloader.confに仕込んでみた。

usb_quirk_load="YES"
hw.usb.quirk.0="0x278a 0x0001 0 0xffff UQ_MSC_FORCE_PROTO_ATAPI"

仕込んだ後のdmesg該当部分はこんな感じ。

ugen0.6: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD> at usbus0
umass0 on uhub3
umass0: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD, class 0/0, rev 2.10/5.05, addr 6> on usbus0
(probe0:umass-sim0:0:0:0): INQUIRY. CDB: 12 00 00 00 24 00
(probe0:umass-sim0:0:0:0): CAM status: CCB request completed with an error
(probe0:umass-sim0:0:0:0): Retrying command, 3 more tries remain
da0 at umass-sim0 bus 0 scbus0 target 0 lun 0
da0: <MARSHAL SHELTER EXTERNAL 0505> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 000000000001
da0: 40.000MB/s transfers
da0: 0MB (0 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
ugen0.7: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD> at usbus0
umass1 on uhub3
umass1: <MARSHAL SHELTER EXTERNAL HDD MARSHAL SHELTER EXTERNAL HDD, class 0/0, rev 2.10/5.05, addr 7> on usbus0
(probe0:umass-sim1:1:0:0): INQUIRY. CDB: 12 00 00 00 24 00
(probe0:umass-sim1:1:0:0): CAM status: CCB request completed with an error
(probe0:umass-sim1:1:0:0): Retrying command, 3 more tries remain
da1 at umass-sim1 bus 1 scbus1 target 0 lun 0
da1: <MARSHAL SHELTER EXTERNAL 0505> Fixed Direct Access SPC-4 SCSI device
da1: Serial Number 000000000001
da1: 40.000MB/s transfers
da1: 0MB (0 512 byte sectors)
da1: quirks=0x2<NO_6_BYTE>

前はda0だけCCB requestのエラーが出ていたけれど、da1にも出るようになった。多分状況としては進展してそう。今度はこっちのパラメータチューニングかな?

追記: よく見たら容量が0MBになっており、ちゃんと見えていない状態に…。