FreeBSD Daily Topics

2011年9月16日ZFS活用シリーズ - scrubで直らない問題の修正(アドホック版)

heads-up

一度使い出したらその便利さに抜け出せなくZFS。ZFSの提供するさまざまな機能を使わなくても基本的な使い方だけでも便利なものですが、運用するうえでいくつか知っておくと便利なこともあります。数回だけ、そんなティップスを紹介していきます。

Do exclusive tar for ZFS rescue

ZFSは壊れにくいファイルシステムだと言われてはいますが、なんらかの原因で壊れることもあります。スクラブで直らない場合にはzdb(1M)で直すのが順当な修正方法となります。

パニック時のメッセージを見て、もしそれが「panic: solaris assert: BSWAP_32(sa_hdr_phys->sa_magic) == SA_MAGIC, file: /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c, line: 1261」のようにSA回りの問題である場合、次のようにパニックを引き起こすファイルやディレクトリ以外のすべてのデータを新しいデータセット(この場合は/parhto/srcがパニックを起こすファイルやディレクトリを含んだデータセットで、/pathto/dstが新しく作った空のデータセット)に対して、tarでまるまるコピーしてしまうという方法で対処することもできます。

(cd /pathto/src && tar --exclude pattern -cpf - .) | \
(cd /pathto/dst && tar xpvf -)

このケースだと、ls -lやcatなどでデータにアクセスした瞬間にカーネルがパニックするので、tarの-exclude指定で、そのファイルやディレクトリ以外をコピーするところがポイントとなります。パニックを引き起こすファイルはバックアップであったり別の場所から調達して復活させます。コピーが完了したら/pathto/srcのデータセットはアンマウントして放置しておくか、不要であればdestoryします。

zdb(1M)を使わない方法としては、この方法がわかりやすい解決方法ではありますが、パニックメッセージやクラッシュダンプ、ソースコードを追うなどして何が問題になっているのかをある程度突き止める必要があるので、それなりのスキルが必要という面もあります。

おすすめ記事

記事・ニュース一覧