[ale] debugfs :: handy utility to debug an ext2 or ext3 file system

Jerry Yu jjj863 at gmail.com
Tue Nov 7 12:29:17 EST 2006


My apologies :: a quick note to myself ended up posting to the group. Should
any ALEr find it useful,  I'd feel much better about bad grammar and such.

On 11/7/06, Jerry Yu <jjj863 at gmail.com> wrote:
>
> I am learning a useful utility program named 'debugfs'. It is part of
> e2fsprogs package, an essential packages containing axillary programs for
> ext2 and ext3 file system under Linux. For a regular file, you can find an
> inode by any data block the file or dir entry is using. Then you can turn
> around and ask for the name of the inode. This could be handy when some
> mysterious files causing df and du disagree whether the filie system is
> full, or the file system is corrupted or can't mounted to be accessed as
> usual. More advanced file system features are available too.
>
> # to find what inode is claiming a given data block
> # debugfs -R "icheck 12345" /dev/hda1
> debugfs 1.35 (28-Feb-2004)
> Block   Inode number
> 12345   340
>
> # to find the file name given the inode number
> # debugfs -R "ncheck 49153" /dev/hda1
>  debugfs 1.35 (28-Feb-2004)
> Inode   Pathname
> 49153   /usr/share/locale/ar/LC_MESSAGES/libbonobo-2.0.mo
>
> # Print the location of the inode data structure
> # debugfs -R "imap /boot/vmlinuz-2.6.9-42.0.2.EL" /dev/hda1
> debugfs 1.35 (28-Feb-2004)
> Inode 557516 is part of block group 34
>         located at block 1114128, offset 0x0580
>
> # to dump the direntry (filespec, per man page)
> debugfs -R "dump -p /boot/vmlinuz- 2.6.9-42.0.2.EL /tmp/vmlinuz_dumped"
> /dev/hda1
> # md5sum /boot/vmlinuz-2.6.9-42.0.2.EL /tmp/vmlinuz_dumped
> e5c536b539b5ffcaa03b22bd7fcc164a  /boot/vmlinuz-2.6.9-42.0.2.EL
> e5c536b539b5ffcaa03b22bd7fcc164a  /tmp/vmlinuz_dumped
>
> # to get the  contents of a file, assume the fs can't be mounted and
> accessed the usually way.
> # debugfs -R "cat /etc/redhat-release" /dev/hda1
> debugfs 1.35 (28-Feb-2004)
> CentOS release 4.4 (Final)
>
> Noteworthy is, for files under /selinux ( a pseudo fs), it can find inode
> number associated with a data block. However, it couldn't find  the file
> name for the very inode number.
> # debugfs -R "ncheck 8" /dev/hda1
> debugfs 1.35 (28-Feb-2004)
> Inode   Pathname
> 8       <inode not found>
> # find / -inum 8
> /selinux/relabel
> # ls -id /selinux/relabel
> 8 /selinux/relabel
> # debugfs -R "icheck 4567" /dev/hda1
> debugfs 1.35 (28-Feb-2004)
> Block   Inode number
> 4567    8
> # / is on /dev/hda1
> /dev/hda1              8127400   6738524   1306308  84% /
>
> There's a lot of powerful (and dangerous features) such as
>
>    - feature  you can set or clear various file system features in the
>    superblock
>    - freeb to mark data blocks as unallocated  vs. setb
>    - freei to free the inode specified
>    - clri  to clear the contents of the inode
>    - chroot  to chroot to the directory
>    - find_free_block
>    - find_free_inode
>    - init_filesys  to create an ext2 file system
>    - kill_file deallocate the file and its blocks. It doesn't remove
>    any direntry to this inode. not ' rm' or 'unlink'.
>    - logdump to dump the ext3 journal
>    - modify_inode  modify the contents of the inode structure
>    - ls/mkdir/mknod/rm/rmdir
>
> 'debugfs' starts interactively by default, unless you have '-R' to request
> one-time use only. An session would be like below:
> # debugfs
> debugfs 1.35 (28-Feb-2004)
> debugfs:  open /dev/hda1
> debugfs:  icheck 12345
> Block   Inode number
> 12345   340
> debugfs:  ncheck 340
> Inode   Pathname
> 340     /usr/X11R6/lib/xscreensaver/mountain
> debugfs:  close
> debugfs:  quit
>
>
-------------- next part --------------
An HTML attachment was scrubbed...




More information about the Ale mailing list