Как восстановить файлы в разделе btrfs?

Как восстановить удаленный файл в разделе btrfs?

Я еще не сделал снимок, поэтому я не могу использовать эту функцию. Я знаю, что есть некоторые инструменты для других файловых систем Linux, но google не обнаружил ничего конкретного для btrfs. Я наткнулся на одно неопределенное упоминание о том, что btrfs включает в себя инструмент восстановления, но я не могу его найти. Прежде чем попробовать инструменты для другой файловой системы, я спрашиваю здесь.

больше информация:

  • (два) удаленных файла были удалены удаленным rsync команда пошла не так.
  • это небольшие текстовые файлы.
  • я знаю имена файлов.
  • я мог бы вспомнить некоторые строки в файлах.
  • диск является обычным HDD, но он большой (2 ТБ).
  • я запускаю Kubuntu 12.04 (beta2) со всеми последними обновлениями.
  • я не написал Никаких новых данных раздел, из которого были удалены файлы.
  • у меня нет моментального снимка или резервной копии этих файлов. (Последняя резервная копия всего на несколько часов старше этих файлов.)
  • как ни странно, файловая система COW, похоже, имеет меньше параметров восстановления файлов, чем ext3/4...

3 ответа:

поскольку ваши файлы небольшие и простой текст, я бы попытался сканировать вывод "строк" в устройство, где находится файловая система, т. е.

strings /dev/sda1 | less

затем использовать "/" для поиска строк, которые могут быть в этом файле. Когда вы найдете текст, разделите его начало с "m", затем перейдите к концу и используйте" |cat >file", чтобы сохранить его в файл.

Я действительно сделал это, когда у меня была аналогичная ситуация на другой файловой системе без восстановления, несколько лет назад, и это отлично сработало для меня.

Йорг Вальтер реализовал btrfs-undelete shell-скрипт с использованием find-root и restore инструменты btrfs-progs, который можно найти здесь, и должны помочь другим в подобном положении.

поскольку он лицензирован под GPLv2, я не могу включить его здесь.

если ваша система Btrfs диск имеет подразделов нужно сдать дополнительные до btrfs restore. К сожалению скрипты там, как один user414471 размещены (http://oelkers.de/tips/undeleteBtrfs.sh), не имеют возможности для этого, но они, вероятно, могут быть адаптированы к этому.

если вы хотите сделать это вручную, вам нужно получить правильный subvol-id, либо с:

# mount /dev/sdXY /mnt/blah
# btrfs subvolume list /mnt/blah
# umount /mnt/blah

или с:

# btrfs restore -l /dev/sdXY | grep ROOT_ITEM

после этого вы используете btrfs-find-root чтобы получить номер блока, к которому вы хотите вернуться (обычно перед максимальным, который является текущим корнем). Для этого вам нужно сначала установить подпространство по умолчанию на тот, из которого вы хотите вернуть файлы (и вернуть это изменение впоследствии):

# mount /dev/sdXY /mnt/blah
# btrfs subvolume set-default <subvol-id> /mnt/blah
# umount /mnt/blah
# btrfs-find-root /dev/sdXY
Well block 4321280 seems great, but generation doesn't match, have=400760, want=400984 level 0
...
Well block 9928704 seems great, but generation doesn't match, have=400764, want=400984 level 1
Well block 1094836224 seems great, but generation doesn't match, have=400983, want=400984 level 1
Found tree root at 1095270400 gen 400984 level 1

вы можете, наконец, использовать btrfs restore С -r <subvol-id> для восстановления (первоначально с