Btrfsが死んだ
- 2015/05/09
- Arch Linux
- Linux
> 突然の死 <
それは昨日の朝のことだった.
dmesgがbtrfsのwarningで埋まってるyabai
— とさいぬ (@myon\_\_\_) May 8, 2015
ちょっとまって
— とさいぬ (@myon\_\_\_) May 8, 2015
chromiumのExtensionがいくつか死んでたり, git statusができなくなったプロジェクトができたりしてる. とりあえず今日作業できない....
— とさいぬ (@myon\_\_\_) May 8, 2015
とうとうTweetDeckでTweetできなくなった(Something wrongうんちゃら)から笑えない. とりあえず書いてたプログラムとか実験レポートのコピーだけして復旧は学校から帰ったらだ
— とさいぬ (@myon\_\_\_) May 8, 2015
ちーん
— とさいぬ (@myon\_\_\_) May 8, 2015
予兆…?
直接大きな影響はなかったものの, 実は少し前から嫌な予感はしていた.
4/3 起動しなくなる
アアアアアアアアアアア💓💓💓💓💓💓💓💓💓💓💓💓💓💓 pic.twitter.com/qyjdr2RIrf
— とさいぬ (@myon\_\_\_) April 3, 2015
シャットダウンを掛けたところところ, 何故かいつまでたっても電源が切れなかった.
ディスクのアクセスランプも消えてるし, まぁいっかと強制終了させたところ, 次の起動でこうなった.
幸い, この時はArch Linuxのインストールメディアから起動しbtrfs scrub
掛けたりしていたら治った.
4/16 checksum errorが出始める
(・∀・;) pic.twitter.com/owm0DQNAdt
— とさいぬ (@myon\_\_\_) April 17, 2015
某活動に参加することになり, その関係でどうしてもWindows環境が必要となった.
とりあえずの対応としてKVMにWindows 8.1 Enterprise Evaluationを入れて作業をしていたのだが, 余程負荷がエグかったのか, その仮想HDDイメージにchecksum errorが出るようになった.
とはいえ, 特別何か支障があったわけではないので放置していた.
(KVM上の窓で若干プチフリが起きていた気もするが)
5/6 read errorが出始める
— とさいぬ (@myon\_\_\_) May 6, 2015
仮想で入れた窓のWindows updateを掛けたところ, Cドライブの空きがやばくなったので, ディスククリーンアップをかけていた.
しかし, どういう訳か処理に1時間半もかかった.
もしやと思いdmesgを叩いたところ, いつもと違うエラーが出ていた…
復旧作業
いろいろ粘ってみたけれど, マウントもできないしbtrfs check --repair
が仕事放棄(スタックトレース?吐いて落ちる)するなど復旧する見込みがなさそうなので, 抜き出せるデータだけ取り出して環境を再構築することにした.
環境
エラーを起こした環境
- Arch Linux x86_64
- linux-4.0.2
- btrfs-progs 4.0
復旧作業に使った環境
- archlinux-2015.05.01-dual.iso
- btrfs-progsは4.0に更新
エラーが起きているファイルシステムは/dev/md126
で認識されている
btrfs restore
死にそうなbtrfsからデータを取り出そうとしてくれるbtrfs restore
というコマンドがあるっぽい.
$ man btrfs-restore
BTRFS-RESTORE(8) Btrfs Manual BTRFS-RESTORE(8)
NAME
btrfs-restore - try to restore files from a damaged btrfs filesystem(unmounted)
SYNOPSIS
btrfs restore [options] <device> <path> | -l <device>
DESCRIPTION
btrfs restore is used to try to salvage files from a damaged filesystem and restore them into <path> or just
list the tree roots.
Since current btrfs-check(8) or btrfs-rescue(8) only has very limited usage, btrfs restore is normally a
better choice.
Note
It is recommended to read the following btrfs wiki page if your data is not salvaged with default option:
https://btrfs.wiki.kernel.org/index.php/Restore
重要なファイルはホームディレクトリ内の幾つかのディレクトリにしか置いていないので, それらを可能な限り抜き出すことを試みた.
// バックアップ先となるUSBメモリをマウント
# mount /dev/sdd1 /mnt
// /home/myon/(codes|Documents|Downloads|Pictures)から取り出せそうなファイルを確認する
// -v : 詳細表示
// -i : エラーを無視して処理を継続
// -D : dry-run (復旧できそうなファイルを表示するだけ)
// --path-regex : 正規表現にマッチするディレクトリ/ファイルのみ抜き出す
# btrfs restore -v -i -D \
--path-regex "^/(|home(|/myon(|/(codes|Documents|Downloads|Pictures)(|/.*))))$" \
/dev/md126 /mnt | less
// 抜き出し開始
# btrfs restore -v -i \
--path-regex "^/(|home(|/myon(|/(codes|Documents|Downloads|Pictures)(|/.*))))$" \
/dev/md126 /mnt
抜き出すことができなかったファイルも多少あったが, 無事データの救出に成功した.
おわり
Btrfsはまだ開発中/実験的なファイルシステムで, 公式のドキュメントにも気をつけてね的な記述がちらほらある.
Twitterをはじめ, よく落ちたという話も耳にはしていた.
僕はBtrfsにSSD向けのオプションが用意されていることを知った時から非常に魅力を感じていて, 手元のSSDなArch Linuxマシンのファイルシステムは全部(2台しかないけど)Btrfsで運用している.
実際に使ってみると, SubvolumeやPartitioning?等の機能は本当に便利だし, また管理に必要なコマンドも綺麗にまとまっていて使いやすいなと思った.
今回ファイルシステムが死んだわけだけど, Btrfsじゃなかったら僕にデータの復旧はできなかったんじゃないか1とまで思っている.
このPCでBtrfsを使い続けるのは流石に不安なのでXFSあたりに乗り換え, また素直にWindowsとのデュアルブート環境を組む予定でいるけれど, いずれはまた, より安定したBtrfsに戻りたいなと思っています.
Footnotes
-
そもそもBtrfsにしなかったらファイルシステムは死ななかったんじゃないかというツッコミはなしで ↩