Undelete restore Compact Flash за 5 минут

Случилось то, чего стоило бы ожидать - фотоаппарат был подвергнут насильственному досмотру и с него стерта вся медия. Побродив немного по интернету понял, что программа обойдется мне в минимум 20$, ибо Trial версия не известно что откажется делать, и...

вообщем я было загрустил, пока не набрел на одну вещь.
Вообще, решение задачи нахождения стертых файлов во многом зависит от файловой системы. Узнать тип файловой системы просто:

vaulter@vaulter-desktop:~$ fdisk -l
 
Диск /dev/sdb: 1055 МБ, 1055416320 байт
16 heads, 63 sectors/track, 2045 cylinders
Units = цилиндры of 1008 * 512 = 516096 bytes
Disk identifier: 0x00000000
 
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *           1        2045     1030648+   6  FAT16

То есть, по сути, восстановить файлы надо с FAT16. Это "волшебство" (за которые просют денег) доступно нам с начала 90х. Однако, был сделан еще один финт ушами:

vaulter@vaulter-desktop:~$ RESTORE_FILE=~/sony.`date +%F`.dd
vaulter@vaulter-desktop:~$ dd if=/dev/sdb1 of=$RESTORE_FILE bs=1024

, тем самым скопировав полный образ Flash ки (у меня копирование с CompactFlash емкостью 1Gb заняло несколько минут) я избавил фотоаппарат от мучений, отключив его - информация уже была в надежных руках! :)
Пока я ждал копирования, смотрел watch du -h $RESTORE_FILE в отдельной консольке :)
Затем скачав по упомянутой ссылке foremost, make и

vaulter@vaulter-desktop:~$ src/foremost/foremost -t mpg,jpeg -i $RESTORE_FILE

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

зы: скриптик, выдающий изменения в /dev папке :)
vaulter@vaulter-desktop:~$ cat ./mondev.sh

#!/bin/sh
#Monitor of devices?
# TODO just KDE popup for a now,
# but MUST be chippy and configurable
# via COMMAND LINE :)
DELAY=1
TTY=`tty | sed s/\\\//./g`
MYNAME=`namei $0 | grep -`
TMPDIR=/tmp
LASTTMPFILE=$TMPDIR/$MYNAME$TTY
TMPFILE=$TMPDIR/.$MYNAME$TTY
while [ 1 ]; do
  ls -la /dev > "$TMPFILE"
  if [ -f "$LASTTMPFILE" ]; then
    diff -u "$LASTTMPFILE" "$TMPFILE";
  fi
  cat "$TMPFILE" > "$LASTTMPFILE"
  sleep $DELAY
done