心が折れました。

先日から自宅鯖のハードディスクを交換しておりました。

元々はUSB接続の320GB×2と400GB+IDE接続の200GBをLVMで1.2TBのストレージにしてたのですが、恐ろしいことに空き容量が100GBを切る事態に。で、これをUSB接続の1TB×2に転換しようとしておったのですよ。

まず最初に困ったのがUSBコネクタが足りないこと。鯖マシンは今さらのVIA C3マシンということもあってUSB2.0非対応。なのでPCIにI/Fカードを増設していたのですが、このカードのUSBコネクタが3個しかない。もう既に全部埋まっちゃってるんですよ。なので最初はネットワーク経由でバックアップ。とりあえず320GBのドライブ分を空けるべく延々とコピーしましたよ。

なんとか空きを確保したところでLVMパーティションのサイズを縮小して1台削除。空いたコネクタに新しいドライブを接続して、やっとローカルコピーできるやバンザーイとか思ってたら、

[ 55.615317] usb 4-2: reset high speed USB device using ehci_hcd and address 3

とか言われてドライブが見えなくなる現象が頻発。全然コピーが進まない。勘弁してくださいよ。
あれやこれやと調べていると、どうやら昔からある不具合らしい。
USB2.0接続のマスストレージデバイス間で大量のファイル転送を実行すると、バッファ周りがおかしくなって死ぬんだそうな。
対処としてはUSB1.1で接続する、syncモードでマウントするといった「やったら確実だろうけど実用に耐えない」ってものばかり。
そんな中で唯一パフォーマンスとの釣り合いが取れそうだったのが、

echo 128 > /sys/block/sdc/device/max_sectors

てな感じでデバイスのmax_sectorsを小さくしてやるというもの。この値がバッファリングされる最大サイズになって、↑の現象が抑制されるらしい。

早速設定を変更してコピーを再開すると、さっきまでとは打って変わってスイスイとコピーが進む。別段遅くなった感じもしない。
おーこれきたんじゃねーの?とか思いながらネットを見て回ってたら、いきなりエラーを吐いて終了。まじでー?
あーこれもダメかーとか思いながら再起動したら、コピー先のドライブが見えてない。 あれ?

これは一体どうなってるのかとハードディスクの電源を入れ直すと、「ギー、カタンッ、ギー、カタンッ」……マジで死にましたか、1TB。

というわけで、心が折れました。もう寝る。