На днях нужно было привести в порядок файлы на винчестере. Необходимые имена файлов были собраны find'ом по -iregex «.*[0-9][0-9][0-9]\/dump.rar». Найденные имена файлов были сохранены в /tmp/dumps.txt. Осталось только слить всё найденное в определённый каталог. Я быстренько наваял вот такую строчку:
perl -e 'open (IN, ") { chomp ($_); system («mv -vf '\''$_'\'' /tmp/DUMPs/"); }'
и запустил её на выполнение. Когда перемещение подходило к концу, я вдруг понимаю, что все найденные файлы переносятся в один и тот же файл /tmp/DUMPs/dump.rar. Осознав это, я примерно за 3 секунды прервал выполнение команды и отмонтировал разделы с данными.
Как восстановить данные? Файловые системы — ext3, reiserfs, xfs. Я вспомнил, что на linux.org.ru что-то в новостях пробегало про anyfs-tools. Эти утилиты мне помогли. Порядок действий:
— скачиваем с сайта проекта http://anyfs-tools.sourceforge.net/ исходные тексты.
— компилируем и устанавливаем (для Debian GNU/Linux в исходниках есть всё необходимое, так что просто: dpkg-buildpackage -rfakeroot).
— монтируем нужную файловую систему (с атрибутом ro).
— строим таблицу inode'ов:
build_it <точка монтирования нужной фс> /tmp/<файл inodов>
— запускаем реставрацию файлов:
anysurrect -i <файл inodов> -t archieve_RAR -p tmp-RAR /dev/<устройство файловой системы, например sda1> <выходной файл inodeов>
— монтируем /dev/<устройство файловой системы, например sda1> используя файловую систему any и сгенерированный на предыдущем этапе <выходной файл inodeов>
anyfuse <выходной файл inodeов> /dev/<устройство файловой системы, например sda1> /tmp/1/
— в каталоге /tmp/1/tmp-RARarchieves/RAR/ получаем восстановленные rar'ы (имена их — что-то вроде inode_2312431_block_231321).
— далее простеньким скриптиком выцепляем «живые» rar'ы (используя rar t <имя файла архива>, если $? == 0 — то архив в порядке)
— а вот дальше надо скопировать и переименовать «живые» rar'ы. разработчики anyfs-tools рекомендуют переодически собирать статистику файловой системы в виде:
<имя файла> <контрольная сумма>
при наличии файла с такой статистикой проблем с переименованием вообще не возникает.
у меня такого файла статистики не было, но по файлам в архиве можно было безошибочно вычислить имя каталога, в котором лежал архив, так что мне повезло :)
Вот собственно и всё :)