USB 3.0 接続の SSD の不調を直した話

私は普段、データ保存領域として 1TB の SSD を USB 3.0 接続で使っているのですが、 最近になって、

どうも時々データの読み書きが詰まってるっぽい

と言う状態になっているのに気が付き、実際に dmesg とか調べてフォーマットからやり直したりした所、 ある程度はマシになったっぽいので今日はその辺りの話を書きたいと思います。

手直しする前の状態・症状

メインの症状……というか状態としては、

時々データの書き込みが詰まる

というモノだったんですが、dmesg を調べた所、

adding target device sdc caused an alignment inconsistency

と言うエラーが SSD をマウントする時に出ていたり、あるいは実際に読み書きが詰まっている時には、

uas_eh_abort_handler 0 uas-tag 1 inflight

というエラーが出ていました。

それで私の SSD は cryptsetup で luksを使って暗号化してあるのですが、先のエラーメッセージの内、前者のモノについては、

cryptsetup luksFormat した時のアラインメントがズレてる

と言う類いのエラーで、後者のエラーについては、

USB 3.0 接続した際に UAS 接続になるとUSB Enclosure が上手く動作しない

という類いのエラーである事が色々調べた時に判明しました。

cryptsetup 時のアラインメントのズレを直す

これの修正方法についてですが、色々調べた所、

cryptsetup--align-payload 引数に正しい値を渡せば良い

という事が判ったので、lsblk -t /dev/sdXPHY-SEC の値を調べ、

$ sudo cryptsetup --align-payload 4096 luksFormat /dev/sdc

とフォーマットし直したところ、とりえずこのエラーは出なくなりました。

ちなみにこれを参考にアラインメントを修正する場合には、4096 は UAS 接続した状態で lsblk -t /dev/sdX した時の PYH-SEC の値で、 /dev/sdc は実際に使用するデバイスへのパスで各自読み替えて下さい。

USB 3.0 接続時に UAS を使うと USB Enclosure が上手く動かない事への対処

これについては、どうも、

該当デバイスで UAS を無効化するカーネルモジュールのオプションを指定する

というので何とかできるっぽい、というのが判ったので lsusb で該当するデバイスの ID を調べた後、 usb_storage カーネルモジュールの quirks 引数で、

usb_storage.quirks=152d:0578:u

と言う指定をして再起動した所、問題は出なくなりました。

ちなみにこのカーネルモジュールへの引数の内、 152d:0578 の部分は lsusb で調べた実際のデバイスID で、 :u というのは UAS を無効化するフラグです。

あと、私は今メインマシン(Dell XPS 9560) の OS として NixOS を使っているので、実際の設定では、 boot.kernelParams の値に usb_storage.quirks=152d:0578:u をそのまま足して使っています。

以上

と言う感じで、ここの所の SSD の不調は直せました。

ちなみに、私が実際に使っている SSD と USB Enclosure は、Amazon.co.jp で買った、

の2つです。(ちなみに上記リンクは アフィリエイトを含んでいません

まー今回の不調は設定ミスと UAS が上手く動いてないって話だったんでとりあえず直せた感じですが、 これがハードウェア自体のトラブルだったりすると、たぶんこれやっても上手く動かないんじゃないかなーと思ったりもします。

あと UAS が上手く動いてない問題については、なんでそうなってるのかが良く分かってないため、 場合によっては UAS が有効でも他のフラグの調整でなんとか出来るのかもしれません。 が、そこまで調べて調整するスキルが自分には無かったため、今回は UAS 自体を無効にしています。

と言う事で、今回の話は以上でした。はい。

nyarlaが大体

Scrapbox でコメントや意見を書く