19 Jan 2007
build_it - reads directory entries to obtain information about the physical location of files on a block device along with file access permissions and saves the data to external inode table file.
build_it [-qvVnsafp] directory inode_table
build_it uses Linux OS filesystem drivers to recursively read directory entries in order to obtain information about all of the filesystem inodes. The information is then saved to an external inode table. The original block device can then be mounted along with the external inode table to recover data from the device.
For this utility to work best, the user must have the appropriate filesystem driver (maybe read-only) for Linux OS available along with ioctl(2) FIBMAP syscall support. FIBMAP call requires root permissions. From 0.84.9 version utility use effective identificator if it’s binary file has SUID bit set to call this syscall. So you can run its without root permissions.
The build_it utility has been tested on the following filesystems: EXT2FS/EXT3FS, XFS, ReiserFS, VFAT, JFS, ISO9660, ntfs-3g.
The best results were obtained from those systems with full FIBMAP support. Currently, in NTFS driver has FIBMAP support in FUSE ntfs-3g driver begining from 0.20061212-BETA version. At that if you need mount filesystem with blkdev option. Please, read losetup(8) if you need to mount FS image (not block device).
Bear in mind, that all enough small files on NTFS keeps in packed format and it reflects in inode table as sparse-files. Also as sparse files reflects all crypted/compressed at filesystem level files. Look -s option description.
For ReiserFS(and Reiser4) build_it calls ioctl UNPACK to avoid "tail-packing" and get right files map.
You can use -n option if you don’t want any changes at filesystems (it maybe important for recovering) but in this case you may get not quite right inode table.
|-q||Don’t print any messages.|
|-v||Print some additional information.|
|-V||Print the version number and exit.|
|-n||Don’t unpack ReiserFS and Reiser4 files.|
|-s||Print to stdout all sparse-files list. It used by anyconvertfs(8) utility to form rescue-list with converting from ntfs-3g.|
|-a||Use absolute addressing on the entire drive, not its separate partition. Keep in mind when using this option, that then to mount output inode table you must specify the entire disk (for example, /dev/hda), and not the separate partition (as /dev/hda1, /dev/hdb7). In addition, it means setting inode table blocksize to sector size (512 bytes), because measure units of partition offsets in partition table is sectors.|
|-f||Process other filesystems located on the partiotions of the same device as the specified directory filesystem. So if /dev/hda1 mounted on /mnt/root, /dev/hda3 on /mnt/root/home and /dev/hdb1 on /mnt/root/usr, and you specify /mnt/root as the directory, to inode table will also include all the contents of /mnt/home, but the contents of /mnt/usr was still will not be included to it. Use the option only with -a.|
|-p||Add to inode table also all parent directories from the specified directory to the root directory.|
|Directory, usually root_directory/mount_point of filesystem, build_it will then make an inode table of this mounted filesystem.|
|File for saving of external inode table.|
Building an external inode table of filesystem on device mounted at home directory of user:
# build_it /home/user /tmp/inode.table
# build_it /home/user /tmp/inode.table
Note: will better if future inode.table file will on other device (or in directory which doesn’t located in recursively processed tree)
Note: if mount point in this example /home (not /home/user) then built external inode table will not include files from other directory than /home/user -- it will particular inode table of device.
Note: if there are will other mount points in recursively processed trees (e.g. /home/user/mount/point) -- it will not processed (an inode table can’t keep information from various devices)
Nikolaj Krivchenkov aka unDEFER <undefer>
Translation correction by Adrian Shaw
Messages about any problem with using anyfs-tools package send to undefer
You can obtain the last version of package at http://anyfs-tools.sourceforge.net