Вы читаете журнал [info]orekhov_av

Недавно довелось повозиться с установкой драйверов для новых принтеров HP, поддержки которых нет ни в Lenny, ни в Squeeze.

Сыпались абсолютно непонятные мне ошибки, но проблема решилась просто:

Для Squeeze достаточно:

export LANG=C

export LANGUAGE=C

export LC_ALL=C

(проблема видимо в том, что инсталлятор в expect не понимает локализованное приглашение на ввод пароля)

Для Lenny пришлось вдобавок отказаться от определённой автоматом версии дистрибутива 5.0.9 и вручную выбрать Debian 5.0.8 (иначе сыпались дикие сообщения о недоступности internet connection и невозможности установить cups-devel, видимо Debian 5.0.9 (т.к. драйвер знает максимум 5.0.8) не считается Debian'ом, и какие пакеты обеспечивают cups-devel инсталлятор не знает).

После этих телодвижений всё заработало :)
На днях нужно было привести в порядок файлы на винчестере. Необходимые имена файлов были собраны find'ом по -iregex ".*[0-9][0-9][0-9]\/dump.rar". Найденные имена файлов были сохранены в /tmp/dumps.txt. Осталось только слить всё найденное в определённый каталог. Я быстренько наваял вот такую строчку:

perl -e 'open (IN, "</tmp/dumps.txt"); while (<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 рекомендуют переодически собирать статистику файловой системы в виде:
    <имя файла> <контрольная сумма>
при наличии файла с такой статистикой проблем с переименованием вообще не возникает.
у меня такого файла статистики не было, но по файлам в архиве можно было безошибочно вычислить имя каталога, в котором лежал архив, так что мне повезло :)

Вот собственно и всё :)