Lから始まるLinux

7章9話
ウォッチドッグ
7章10話 UASP無効化
もくじ
8章1話
これから
UASP無効化
若木 みどり
お兄ちゃん! USB 3.0 に接続した USB メモリの読み込みが なんだかおかしいんだ ちょっと読み込んだと思ったら 待たされたりして 何だか安定して 動いていないようなんだよ…
若木 しげる
これは Raspberry Pi ユーザの間で 有名な問題なんだ 今回はこの対処法を紹介するね!
原因
若木 しげる
ストレージを USB 3.0 に接続すると 「UASP(USB Attached SCSI Protocol)」という 高速通信を実現する仕組みが使われるんだ
若木 しげる
でも Raspberry Pi の USB コントローラと 一部の USB ストレージの互換性が不完全で 通信が不安定になる場合があるんだよ 特に大容量データ転送時に 顕著になることが多いんだ
若木 みどり
高速化の仕組みなのに安定しなくて 読み込みが遅くなると本末転倒だよ どうにかならないものなのかな?
若木 しげる
UASP を無効にして対処できるよ 今回はこの方法で対応するね
USB ID 確認
若木 しげる
lsusb USB デバイス情報を 表示するよ
lsusb [オプション]...
若木 しげる
まずは USB デバイスを特定する「USB ID」という値を確認しよう問題の USB ストレージを接続しlsusb を実行してね
lsusb
若木 みどり
へぇ!実行してみるね!
...
Bus 001 Device 004: ID 1234:5678 Example USB Flash Drive
...
若木 しげる
各行が USB デバイスの情報だよ自分の USB メモリのメーカ名などを手がかりにしてID の後ろにあるxxxx:xxxx という番号をメモしよう
若木 みどり
私の場合 1234:5678USB ID だね!メモに控えておいたよ!
無効化
若木 しげる
今度はこの USB デバイスでUASP を無効にするよう設定しよう設定ファイル /boot/firmware/cmdline.txt以下の記述を記述するよ
usb-storage.quirks=1234:5678:u
若木 しげる
最初に USB_ID 変数に目的の USB ID 1234:5678 を設定しよう値は実際の内容に置き換えてね
USB_ID=1234:5678
若木 みどり
設定したよ!
若木 しげる
この変数を使ってsed で設定を追記しよう!
sudo sed -i.dist \
  "s/$/ usb-storage.quirks=$USB_ID:u/" \
  /boot/firmware/cmdline.txt
若木 みどり
できたよ!
若木 しげる
では設定がちゃんと記述されているか確認しよう
cat /boot/firmware/cmdline.txt
若木 しげる
設定末尾に以下のような記述があるはずだよこれは USB ID が xxxx:xxxxUSB デバイスではUASP を使わないという指定だよ
usb-storage.quirks=xxxx:xxxx:u
若木 みどり
usb-storage.quirks=1234:5678:uという記述があるね設定は大丈夫みたい!
若木 しげる
設定ができたら再起動しよう!これで指定された USB デバイスでUASP が使われなくなるんだ
sudo systemctl reboot
若木 みどり(驚き)
おお!再起動後は安定してUSB メモリを読み込めるようになったよ!
まとめ
若木 みどり
今回は USB 3.0 の読み込みが不安定になる問題をUASP を無効にして解決したよ!
若木 しげる
UASP が使われない場合「BOT (Bulk-Only Transport)」が使われるんだBOT は UASP のような最適化が行われずアクセス速度は少し落ちるよそれでも USB 3.0 は USB 2.0 より十分高速に利用可能だよ