以前からviで保存しようとするとなかなか終わらないことがあり、ディスクがだめだったようなのですが、案の定zfs statusで見るとDEGRADEDになっています。/var/log/messageにもada1のエラーが出ています。再起動するとONLINEに戻ったりするのですが、諦めて対応することにしました。
自宅のMicroserver gen7には元から入っていた250Gがufsでシステムが入っていて、2Tx3でraidzを組んでいました。ネットのページを参考にzfsとjailの組み合わせで使っていました。ZRouter.orgのビルド用のjailとmruby on YABMの開発用のjailなどを作ってあります。
通常であれば、ディスクを購入してreplaceするのでしょうが、貧乏でお金がないので、新たに購入せずに対応できる方法を考えてみました。そもそもあまり容量を使ってなかったので、3発のraidzから2発のmirrorに変更することにしました。
まずバックアップを取るために、各ボリュームにスナップショットを設定します。
% zfs snapshot storage/zrouter@20200220
次にada0の/var/tmpなどでsendしてバックアップを作ります。
% zfs send storage/zrouter@20200220 > zrouter.bin
幸いあまり使っていなかったので250Gで収まりました。バックアップを作ったらボリュームをdestroyしてzpoolもdestroyします。
壊れたディスクを抜いて、zpool create mirrorでプールを作ります。
これにバックアップしたボリュームをrecvで戻せば元通りです。
% zfs recv storage/zrouter < zrouter.bin
ざっくり200Gくらいのデータ量で、2時間くらいで上記の作業が終わりました。ミスオペがないように慎重に作業しました。
昔はtarコマンドでバックアップを取っていました。対象の容量が大きくなりtarコマンドでは遅かったり失敗したりすることがありますが、zfsは安定して操作できて素晴らしいです。
結構長いこと不調だったと思うのですが、今後は早めに対応できるように.loginにzpool status -xを入れてみました。