私は普段、データ保存領域として 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/sdX
で PHY-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 が上手く動かない事への対処
これについては、どうも、
というので何とかできるっぽい、というのが判ったので 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 自体を無効にしています。
と言う事で、今回の話は以上でした。はい。