.\" -*- nroff -*-
.\" Copyright 1993, 1994, 1995 by Theodore Ts'o.  All Rights Reserved.
.\" This file may be copied under the terms of the GNU Public License.
.\" 
.TH DEBUGFS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@"
.SH NAME
debugfs \- ext2/ext3 file system debugger
.SH SYNOPSIS
.B debugfs
[
.B \-Vwci
]
[
.B \-b
blocksize
]
[
.B \-s
superblock
]
[
.B \-f 
cmd_file
]
[
.B \-R
request
]
[
.B \-d
data_source_device
]
[
device
]
.SH DESCRIPTION
The 
.B debugfs 
program is an interactive file system debugger. It can be used to
examine and change the state of an ext2 file system.
.br
.I device
is the special file corresponding to the device containing the ext2
file system (e.g /dev/hdXX).
.SH OPTIONS
.TP
.I \-w
Specifies that the file system should be opened in read-write mode.
Without this option, the file system is opened in read-only mode.
.TP
.I \-c
Specifies that the file system should be opened in catastrophic mode, in
which the inode and group bitmaps are not read initially.  This can be
useful for filesystems with significant corruption, but because of this,
catastrophic mode forces the filesystem to be opened read-only.
.TP
.I \-i
Specifies that 
.I device
represents an ext2 image file created by the
.B e2image
program.  Since the ext2 image file only contains the superblock, block
group descriptor, block and inode allocation bitmaps, and 
the inode table, many
.B debugfs
commands will not function properly.  
.B Warning:
no safety checks are in place, and 
.B debugfs 
may fail in interesting ways if commands such as
.IR ls ", " dump ", " 
etc. are tried without specifying the 
.I data_source_device
using the 
.I \-d
option.
.B debugfs 
is a debugging tool.  It has rough edges!
.TP
.I -d data_source_device
Used with the 
.I \-i
option, specifies that
.I data_source_device
should be used when reading blocks not found in the ext2 image file.
This includes data, directory, and indirect blocks.
.TP
.I -b blocksize
Forces the use of the given block size for the file system, rather than
detecting the correct block size as normal.
.TP
.I -s superblock
Causes the file system superblock to be read from the given block number,
rather than the default (1).  If you give a
.I -s
option, you must also give a
.I -b
option.
.TP
.I -f cmd_file
Causes 
.B debugfs
to read in commands from 
.IR cmd_file , 
and execute them.  When 
.B debugfs
is finished executing those commands, it will exit.
.TP 
.I -R request
Causes 
.B debugfs
to execute the single command 
.IR request ,
and then exit.
.TP
.I -V
print the version number of 
.B debugfs
and exit.
.SH SPECIFYING FILES
Many
.B debugfs
commands take a
.I filespec
as an argument to specify an inode (as opposed to a pathname) 
in the filesystem which is currently opened by 
.BR debugfs . 
The
.I filespec
argument may be specified in two forms.  The first form is an inode 
number surrounded by angle brackets, e.g., 
.IR <2> .
The second form is a pathname; if the pathname is prefixed by a forward slash
('/'), then it is interpreted relative to the root of the filesystem 
which is currently opened by 
.BR debugfs .
If not, the pathname is 
interpreted relative to the current working directory as maintained by 
.BR debugfs .  
This may be modified by using the 
.B debugfs
command
.IR cd .
.\" 
.\"
.\"
.SH COMMANDS
This is a list of the commands which 
.B debugfs
supports.
.TP
.I bmap filespec logical_block
Print the physical block number corresponding to the logical block number
.I logical_block
in the inode
.IR filespec .
.TP
.I cat filespec
Dump the contents of the inode 
.I filespec
to stdout.
.TP
.I cd filespec
Change the current working directory to 
.IR filespec .
.TP
.I chroot filespec
Change the root directory to be the directory 
.IR filespec .
.TP
.I close
Close the currently open file system.
.TP
.I clri file
Clear the contents of the inode 
.IR file .
.TP
.I dump [-p] filspec out_file
Dump the contents of the inode 
.I filespec
to the output file 
.IR out_file .  
If the 
.I -p 
option is given set the owner, group and permissions information on 
.I out_file 
to match 
.IR filespec .
.TP
.I expand_dir filespec
Expand the directory
.IR filespec .
.TP
.I feature [fs_feature] [-fs_feature] ...
Set or clear various filesystem features in the superblock.  After setting
or clearing any filesystem features that were requested, print the current
state of the filesystem feature set.
.TP
.I find_free_block [count [goal]]
Find the first 
.I count
free blocks, starting from
.I goal
and allocate it.
.TP
.I find_free_inode [dir [mode]]
Find a free inode and allocate it.  If present, 
.I dir
specifies the inode number of the directory 
which the inode is to be located.  The second 
optional argument
.I mode
specifies the permissions of the new inode.  (If the directory bit is set
on the mode, the allocation routine will function differently.)
.TP
.I freeb block [count]
Mark the block number
.I block
as not allocated.
If the optional argument 
.I count 
is present, then 
.I count
blocks starting at block number
.I block
will be marked as not allocated.
.TP
.I freei filespec
Free the inode specified by 
.IR filespec .
.TP
.I help
Print a list of commands understood by 
.BR debugfs (8).
.TP
.I icheck block ...
Print a listing of the inodes which use the one or more blocks specified
on the command line.
.TP
.I imap filespec
Print the location of the inode data structure (in the inode table) 
of the inode
.IR filespec .
.TP
.I init_filesys device blocksize
Create an ext2 file system on
.I device
with device size
.IR blocksize .
Note that this does not fully initialize all of the data structures; 
to do this, use the 
.BR mke2fs (8)
program.  This is just a call to the low-level library, which sets up
the superblock and block descriptors.
.TP
.I kill_file filespec
Deallocate the inode 
.I filespec
and its blocks.  Note that this does not remove any directory
entries (if any) to this inode.  See the 
.BR rm (1)
command if you wish to unlink a file.
.TP
.I lcd directory
Change the current working directory of the
.B debugfs
process to
.I directory
on the native filesystem.
.TP
.I ln filespec dest_file
Create a link named 
.I dest_file
which is a link to 
.IR filespec .
Note this does not adjust the inode reference counts.
.TP
.I logdump [-acs] [-b<block>] [-i<filespec>] [-f<journal_file>] [output_file]
Dump the contents of the ext3 journal.  By default, the journal inode as
specified in the superblock.  However, this can be overridden with the 
.I \-i
option, which uses an inode specifier to specify the journal to be
used.  A file containing journal data can be specified using the
.I \-f
option.   Finally, the 
.I \-s
option utilizes the backup information in the superblock to locate the
journal.
.IP
The 
.I \-a
option causes the 
.I logdump
program to print the contents of all of the descriptor blocks.
The 
.I \-b
option causes 
.I logdump
to print all journal records that are refer to the specified block. 
The 
.I \-c
option will print out the contents of all of the data blocks selected by
the 
.I \-a
and 
.I \-b
options.
.TP
.I ls [-l] [-d] filespec
Print a listing of the files in the directory
.IR filespec .
The 
.I \-l
flag will list files using a more verbose format.
The
.I \-d
flag will list deleted entries in the directory.
.TP
.I modify_inode filespec
Modify the contents of the inode structure in the inode
.IR filespec .
.TP
.I mkdir filespec
Make a directory.
.TP
.I mknod filespec [p|[[c|b] major minor]]
Create a special device file (a named pipe, character or block device).
If a character or block device is to be made, the 
.I major
and
.I minor
device numbers must be specified.
.TP
.I ncheck inode_num ...
Take the requested list of inode numbers, and print a listing of pathnames
to those inodes.
.TP
.I open [-w] [-e] [-f] [-i] [-c] [-b blocksize] [-s superblock] device
Open a filesystem for editing.  The 
.I -f 
flag forces the filesystem to be opened even if there are some unknown 
or incompatible filesystem features which would normally 
prevent the filesystem from being opened.  The
.I -e
flag causes the filesystem to be opened in exclusive mode.  The
.IR -b ", " -c ", " -i ", " -s ", and " -w
options behave the same as the command-line options to 
.BR debugfs .
.TP
.I pwd
Print the current working directory.
.TP
.I quit
Quit
.B debugfs
.TP
.I rdump directory destination
Recursively dump
.I directory
and all its contents (including regular files, symbolic links, and other
directories) into the named
.I destination
which should be an existing directory on the native filesystem.
.TP
.I rm pathname
Unlink 
.IR pathname .
If this causes the inode pointed to by 
.I pathname
to have no other references, deallocate the file.  This command functions
as the unlink() system call.
.I 
.TP
.I rmdir filespec
Remove the directory
.IR filespec .
.TP
.I setb block [count]
Mark the block number
.I block
as allocated.
If the optional argument 
.I count 
is present, then 
.I count
blocks starting at block number
.I block
will be marked as allocated.
.TP
.I set_block_group bgnum field value
Modify the block group descriptor specified by
.I bgnum
so that the block group descriptor field
.I field
has value
.I value.
.TP
.I seti filespec
Mark inode 
.I filespec
as in use in the inode bitmap.
.TP
.I set_inode_field filespec field value
Modify the inode specified by 
.I filespec
so that the inode field
.I field
has value 
.I value.
The list of valid inode fields which can be set via this command 
can be displayed by using the command:
.B set_inode_field -l
.TP
.I set_super_value field value
Set the superblock field
.I field
to 
.I value.
The list of valid superblock fields which can be set via this command 
can be displayed by using the command:
.B set_super_value -l
.TP
.I show_super_stats [-h]
List the contents of the super block and the block group descriptors.  If the
.I -h
flag is given, only print out the superblock contents.
.TP
.I stat filespec
Display the contents of the inode structure of the inode
.IR filespec .
.TP
.I testb block [count]
Test if the block number
.I block
is marked as allocated in the block bitmap.
If the optional argument 
.I count 
is present, then 
.I count
blocks starting at block number
.I block
will be tested.
.TP
.I testi filespec
Test if the inode 
.I filespec
is marked as allocated in the inode bitmap.
.TP
.I undel <inode num> [pathname]
Undelete the specified inode number (which must be surrounded by angle
brackets) so that it and its blocks are marked in use, and optionally
link the recovered inode to the specified pathname.  The 
.B e2fsck
command should always be run after using the 
.B undel
command to recover deleted files.
.IP
Note that if you are recovering a large number of deleted files, linking
the inode to a directory may require the directory to be expanded, which
could allocate a block that had been used by one of the
yet-to-be-undeleted files.  So it is safer to undelete all of the 
inodes without specifying a destination pathname, and then in a separate
pass, use the debugfs
.B link
command to link the inode to the destination pathname, or use 
.B e2fsck
to check the filesystem and link all of the recovered inodes to the
lost+found dirctory.
.TP
.I unlink pathname
Remove the link specified by 
.I pathname 
to an inode.  Note this does not adjust the inode reference counts.
.TP
.I write source_file out_file
Create a file in the filesystem named
.IR out_file ,
and copy the contents of
.I source_file
into the destination file.
.SH ENVIRONMENT VARIABLES
.TP
.B DEBUGFS_PAGER, PAGER
The
.BR debugfs (8)
program always pipes the output of the some commands through a
pager program.  These commands include: 
.IR show_super_stats ,
.IR list_directory ,
.IR show_inode_info ,
.IR list_deleted_inodes ,
and
.IR htree_dump .
The specific pager can explicitly specified by the
.B DEBUGFS_PAGER
environment variable, and if it is not set, by the
.B PAGER
environment variable.  
.IP
Note that since a pager is always used, the 
.BR less (1)
pager is not particularly appropriate, since it clears the screen before
displaying the output of the command and clears the output the screen
when the pager is exited.  Many users prefer to use the 
.BR less (1)
pager for most purposes, which is why the 
.B DEBUGFS_PAGER 
environment variable is available to override the more general
.B PAGER
environment variable.
.SH AUTHOR
.B debugfs
was written by Theodore Ts'o <tytso@mit.edu>.
.SH SEE ALSO
.BR dumpe2fs (8),
.BR e2fsck (8),
.BR mke2fs (8)
