3 which tune2fs >/dev/null 2>&1 && tune2fs -l $device >/dev/null 2>&1
19 fstype="`file -s $device | sed -e 's/.*\(ext[0-9]\).*/\1/'`"
22 # Step 6: Get filesystem blocksize and convert sector number to filesystem block number
24 fsblocksize="`tune2fs -l $device | awk '/Block size/{print $3/512}'`"
26 if [ -z "$fsblocksize" ]; then
27 echo "! $device is not ext2/ext3" 1>&2
31 fsblock="`dc -e "$sector $fsblocksize ~ n [ ] n p"`" #`"
32 fssubsector="${fsblock% *}"
33 fsblock="${fsblock#* }"
35 echo "blocksize $fsblocksize"
37 echo "subsector $fssubsector"
39 # Step 7: Check, whether block is in use
41 if echo "testb $fsblock" | debugfs $device 2>/dev/null | grep -qF "not in use"; then
42 echo "blockstate free"
45 echo "blockstate used"
47 # Step 8: Find inode, to which the block belongs
49 inode="`echo "icheck $fsblock" | debugfs $device 2>/dev/null | awk 'FNR>1{print $2}'`" #`"
51 if [ -z "$inode" ]; then
52 echo "blocktype meta?"
58 # Step 9: Find file name(s) referencing the inode
62 echo "ncheck $inode" \
63 | debugfs $device 2>/dev/null \
64 | sed -e '1d' -e 's/^[0-9]*[ ]*//' -e 's/^\/\//\//' \
65 | while read name; do \
66 if [ -z "$firstname" ]; then \
67 echo "blocktype data" 1>&3; \
71 echo "name $name" 1>&3; \
74 if [ -z "$namefound" ]; then
75 echo "blocktype journal?"
80 register_scanner "extfs"