LINUX.ORG.RU

Найти случайно затёртый с диска исходник

 , , ,


4

6

В очередной (третий-четвёртый за несколько последних лет) раз затерев по неаккуратности файл с кодом (cp не в ту сторону), на который был потрачен предыдущий час или больше, и который ещё не был закоммичен, решил что искать его с помощью dd и grep - занятие утомительное. Слышал тут про binwalk, но, посмотрев описание, то ли не осилил найти способ её для этой цели использовать, то ли она и правда для другого.

Написал свою прогу в итоге: исходник.

Компилировать: gcc -o rawsearch rawsearch.c

Синтаксис: ./rawsearch if=/dev/sda8 str=some_string_from_file

Прога найдёт на диске все текстовые блоки (внимание: если файл фрагментирован то он будет не одним блоком а несколькими, прога их сцеплять не будет), что содержат эту строку и создаст пачку файлов с названиями found-NNN (NNN - байт где начинается) с этими текстами. Границы текстовых блоков определяются так:

static int is_binchar(char c) { return (c==127 || c>=0 && c<=6 || c>=14 && c!=27 && c<=31); }

(это символы которые по мнению проги в текстовых файлах не встречаются).

Возможно кому-то будет полезно.

Исходник максимально простой (всего 300 строк и 12кб), можно легко патчить под какие-то потребности по месту.

★★★★★

Последнее исправление: firkax (всего исправлений: 2)

Я пользую редактор Geany. Для редактора есть плагин SaveActions, который (при соответствующей настройке) (1) сохраняет все файлы при потере редактором фокуса, (2) создаёт резервную копию файла при каждом сохранении, причём в отдельном, предназначенным для этого каталоге (а не разбрасывает по всему диску файлы с суффиксами .bak, ~ и прочими).

Так вот, имея такой бекап, нет нужды писать проги, которые шарят по диску в поисках блоков, похожих на текст, чтобы потом из тысяч или миллионов найденных блоков пытаться руками склеить бывший файл. Просто идёшь в бекап каталог и берёшь оттуда то, что нужно. Да, в бекап-каталоге собираются тысячи файлов, но все они с именами и датами/временами, поэтому найти там нужный — не проблема. А заодно и удалить файлы, которым более года или двух от роду.

Рекомендую. Если уж не сам Geany+SaveActions, то саму идею глобального бекап-каталога в текстовом редакторе.

debugger ★★★★★
()

Тред не читал.

  1. При cp a b ext4 не должна переписывать экстенты b без необходимости, вроде сначала должна поискать другое свободное место;

  2. debugfs, вроде были какие-то ещё готовые утилиты для восстановления только что похеренных файлов.

anonymous
()