Восстановление данных anyfs-tools

утилитка anyfs-tools (узнал тут), по описанию как раз то что надо для задачи по восстановлению данных
начнем установку на Debian 5.0.7 (Linux)
скачать самій последний релиз:
wget http://ignum.dl.sourceforge.net/project/anyfs-tools/anyfs-tools/0.85.1c/...
сходу установить оказалось не очень сложно (я справился)

ставим зависимости
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
apt-get install pkg-config
apt-get install e2fsprogs
apt-get install autotools-dev ext2fs-dev xfslibs-dev libbz2-dev libmpeg2-4-dev uuid-dev libblkid-dev libfuse-dev debhelper

в папке, куда распаковали исходники
dpkg-buildpackage -rfakeroot
./configure
make
make install
установилось все не по системным путям (прописанным в path), ищем куда и добавляем путь к бинарнику (у меня /usr/local/sbin/ )
storage:/home/andreyv# whereis build_it
build_it: /usr/local/sbin/build_it

Комментарии

структура данных (из

структура данных (из исходников)

00073 typedef uint32_t        any_blk_t;
00074
00075 typedef uint64_t any_size_t;
00076 typedef int64_t any_ssize_t;
00077 typedef int64_t any_off_t;
00078
00079 #ifdef __GNUC_STDC_INLINE__
00080 #define __inline__ inline __attribute__((__gnu_inline__))
00081 #endif
00082
00083 #define inline inline __attribute__((always_inline))
00084
00085 /*min_t, max_t Macroses from Linux kernel*/
00086 #define min_t(type,x,y) \
00087 ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
00088 #define max_t(type,x,y) \
00089 ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
00090
00091 #define ANY_SUPER_MAGIC 0x414e59 /*ANY*/
00092 #define ANY_BUFFER_SIZE 1024
00093 #define ANY_NAME_LENGTH 255
00094 #define ANY_LINK_MAX 50000
00095 #define ANY_ITOPTIONS "inodetable="
00096
00097 #define ANY_BLOCK_SIZE_HEAD "BLOCK_SIZE "
00098 #define ANY_INODES_HEAD "INODES "
00099 #define ANY_INODE_TABLE_HEAD "INODE_TABLE\n"
00100 #define ANY_DATA_HEAD "DATA\n"
00101 #define ANY_LNK_HEAD "LNK "
00102 #define ANY_REG_HEAD "REG "
00103 #define ANY_DIR_HEAD "DIR "
00104
00105 #define ANY_BLOCK_SIZE_LEN strlen(ANY_BLOCK_SIZE_HEAD"xxxxxxxx\n")
00106 #define ANY_INODES_LEN strlen(ANY_INODES_HEAD"xxxxxxxx\n")
00107
00108 #define ANY_INODE_TABLE_INFOLEN(inodes) (inodes*73)
00109
00110 #define ANY_INODE_TABLE_LEN(inodes) \
00111 (strlen(ANY_INODE_TABLE_HEAD) + ANY_INODE_TABLE_INFOLEN(inodes))
00112
00113 #define ANY_BLOCK_SIZE_HEAD_OFFSET 0
00114 #define ANY_INODES_HEAD_OFFSET \
00115 (ANY_BLOCK_SIZE_HEAD_OFFSET + ANY_BLOCK_SIZE_LEN)
00116 #define ANY_INODE_TABLE_HEAD_OFFSET \
00117 (ANY_INODES_HEAD_OFFSET + ANY_INODES_LEN)
00118 #define ANY_DATA_HEAD_OFFSET(inodes) \
00119 (ANY_INODE_TABLE_HEAD_OFFSET + ANY_INODE_TABLE_LEN(inodes))
00120
00121 #define ANY_BLOCK_SIZE_OFFSET \
00122 (ANY_BLOCK_SIZE_HEAD_OFFSET + strlen(ANY_BLOCK_SIZE_HEAD))
00123 #define ANY_INODES_OFFSET \
00124 (ANY_INODES_HEAD_OFFSET + strlen(ANY_INODES_HEAD))
00125 #define ANY_INODE_TABLE_OFFSET \
00126 (ANY_INODE_TABLE_HEAD_OFFSET + strlen(ANY_INODE_TABLE_HEAD))
00127 #define ANY_DATA_OFFSET(inodes) \
00128 (ANY_DATA_HEAD_OFFSET(inodes) + strlen(ANY_DATA_HEAD))
00129
00130 struct any_file_fragment {
00131 uint32_t fr_start;
00132 uint32_t fr_length;
00133 };
00134
00135 struct any_file_frags {
00136 uint32_t fr_nfrags;
00137 struct any_file_fragment* fr_frags;
00138 };
00139
00140 struct any_dirent {
00141 char* d_name;
00142 uint32_t d_inode;
00143 struct any_dirent *d_next;
00144 };
00145
00146 struct any_dir {
00147 uint32_t d_ndirents;
00148 struct any_dirent* d_dirent;
00149 void* d_data;
00150 };
00151
00152 struct any_inode {
00153 uint16_t i_mode; /* File mode */
00154 uint16_t i_uid; /* Low 16 bits of Owner Uid */
00155 uint16_t i_gid; /* Low 16 bits of Group Id */
00156 uint64_t i_size; /* Size in bytes */
00157 uint32_t i_atime; /* Access time */
00158 uint32_t i_ctime; /* Creation time */
00159 uint32_t i_mtime; /* Modification time */
00160 uint16_t i_links_count; /* Links count */
00161 union {
00162 struct any_file_frags *file_frags;
00163 struct any_dir *dir;
00164 char* symlink;
00165 dev_t device;
00166 } i_info;
00167 size_t i_it_file_offset;
00168 };
00169
00170 struct any_sb_info {
00171 char *si_itfilename;
00172 unsigned long si_blocksize;
00173 unsigned long si_inodes;
00174 unsigned long *si_inode_bitmap;
00175 struct any_inode *si_inode_table;
00176 };