2015年12月21日月曜日

btrfsでsnapshotを使わず消してしまったファイル復活

ext4だとextundeleteとか使うけどbtrfsはそれそのものの機能でなんとかなる(ことがある)
メモ.

まず,
# btrfs-find-root /dev/sdXY
これで大量にリストが出てくるうちの,
Well block 25240 seems great, but generation doesn't match, have=1000, want=1001
とかseems greatと書いてある行が出てきたらラッキー.
このWell blockのうしろにある数字(bytenr)を覚えておいて,
たとえばデスクトップ上のpngファイルを復活させたいなら,
# btrfs restore -t 25240 -v --path-regex '^/(|home(|/username(|/Desktop(|/.*\.png))))$' /dev/sdXY /tmp/restore
とすれば,btrfsでフォーマットされた/dev/sdXYから,btrfsのツリーのうちbtrfs-find-rootで見つけた25240という木の中の,--path-regexに渡した 正規表現にマッチするファイルを/tmp/restoreにダンプする事になる.

また,この一連の操作を行なうbtrfs-undeleteというシェルスクリプトがGPLv2で公開されている.
http://comments.gmane.org/gmane.comp.file-systems.btrfs/22560

以上

P.S.
やっぱりbtrfsは便利だし安心安定高機能,みなさん使うべきですね