HDDがぶっ壊れたので交換して復旧する話

どーもどーも。色んな意味で本気出してるTAMです。

唐突ですが自宅のHDDが悲鳴をあげはじめたので交換した話です。今後もこう言うこと起こりそうなのでなんとなくまとめておきます。フシュー。

さて。
今回おかしくなったのは/home以下に使っていた3TBのHDD。普通に運用してればまあバックアップからHDD装換して戻してEnd、なわけなのですが、bcacheのバッキングデバイスとして運用してたんですね。で、装換して戻すにしてもできれば元と同じようにバッキングデバイスとして戻したい、と。
bcacheはSSDなんかをキャッシュデバイスとして使う、まあ大抵は大容量で遅めのHDDをバッキングデバイスとして控えさせて、HDDの容量とSSDの高速性の両者美味しいトコ取りをしようと言う、TBクラスでSSDが用意出来ない俺のような貧乏人にはたまらない仕組みなわけで、しかもwritebackもできちゃうと。
でまあ、運用としてはキャッシュデバイスであるSSDの方を酷使するイメージなわけなんですが、今回壊れたのはバッキングデバイスであるHDDの方。キャッシュデバイスの交換方法は意外に簡単なのですがバッキングデバイスの交換って結構面倒なのよねえ。まあ、交換と言うか新しく作ってファイル移動ってことになります。

余談なんですが、「bcacheってそんなにいいの?」とか聞かれると、分かりません。そもそもLinuxは空きメモリにがんがんディスクキャッシュを突っ込んでいくような感じだった気がしますので普通に使っててもそこそこ早いような気もしますが、情報を見る限り結構キャッシュデバイスにHitしてるようなので有効なのかも知れません。が、キャッシュデバイスを外した状態での比較はしてないのでねえ。
ま、さておいて。

まずやったこと。
HDDを注文する…は省略して、とりあえず繋いでバッキングデバイスのパーティションを切って、make-bcache -B します。基本的にこれで/dev/bcache?ができる。元あった壊れかけのデバイスが/dev/bcache0、新しいのが/dev/bcache1になるので、/dev/bcache1をmkfsして壊れかけデバイスが死なないよう祈りながら頑張ってファイル移動。
当たり前と言えば当たり前なんですけど、キャッシュデバイスがアタッチされていない状態でも(性能的な意味は全くありませんが)/dev/bcache?は動作しますし、特に特別な動作は不要なわけですが、/dev/bcache?としてbcacheの管理下に置かれたデバイスは基本的に/dev/sd??とかでのアクセスは一切できないと考えた方がいいですねえ。
で、コピーが終わったら壊れかけを外す。UUID指定してる場合は/etc/fstabを書き換える、などなどおなじみの作業となります。

んで、キャッシュデバイスのアタッチ。
make-bcache -C でキャッシュデバイス作れますが、既存のキャッシュデバイスを作りなおす場合は事前に色々とめんどくさい。作りなおす必要があるかどうかは別として。
echo 1 >/sys/fs/bcache/{UUID}/stop でキャッシュデバイスの開放ができるんですが、ちょっと時間経つとご丁寧にまた登録されてしまうと言う状況だったので、キャッシュデバイス開放してすぐさま wipefs -a /dev/sd?? して make-bcache -C –wipe-bcache /dev/sd?? とかしてました。
あとはまあ、バッキングデバイスにキャッシュデバイスをアタッチしたげるだけです。

今回の教訓。
①キャッシュデバイスの入れ替えは簡単なので(デバイスをデタッチして止めて外せばいい)バッキングデバイスをミラーリングとかした方がいいですねえ。
②writeback有効だとキャッシュがフラッシュされるまでバッキングデバイスへの書き込みは発生しないでしょうから、HDDの悲鳴を聞き逃したりするかも知れませんねえ。
③バックアップ大事、あと予備のHDDは持ってた方が良いのかも知れませんねえ。
④夏のPC運用はHDDの温度も気にしないとだめですねえ。
⑤信じる心が力になる。