fsdb(1m) DG/UX 4.30 fsdb(1m)
NAME
fsdb - file system debugger
SYNOPSIS
/etc/fsdb special [ - ]
DESCRIPTION
Fsdb views and alters information on the disk. This
information includes inodes, directory entries, and any
other disk information.
Special is the pathname of a special file referring to a
device containing a file system. The - or an O argument
suppresses error-checking routines that verify inode,
directory, and block addresses. To do these checks, fsdb
reads the fs_nodes_per_dar (inodes per disk allocation
region) and fs_size (file system size) fields of of the file
system's super-block.
Fsdb is intended mainly for emergencies where fsck(1m) and
clri(1m) are ineffective in dealing with problems on the
disk. To use fsdb effectively, you must be familiar with
the contents of inodes and directory entries and how these
structures are used.
Fsdb can display disk information in the following formats:
inode
directory entry
double word
word
byte
character
Fsdb supports decimal and octal numbers. A zero prefix
indicates an octal number. Decimal is the default.
Examining Inodes
To view an inode, type an integer followed by a lowercase i.
Fsdb then lists the specified inode's number, mode, link
count, user ID, group ID, size, the fragment numbers stored
in its direct and indirect block arrays, and the creation,
last-modification, and last-access times. The default is
the current inode. When you enter fsdb, the current inode
is number 2, indicating the root directory. Otherwise the
current inode is the last inode referenced.
To change the fields of the inode, use the mnemonics given
for a particular field followed by an equal sign and the
desired contents for that field. For example, sz=1024 sets
the file size for the current inode to 1024 bytes. The i-
number of an inode cannot be changed.
Licensed material--property of copyright holder(s) Page 1
fsdb(1m) DG/UX 4.30 fsdb(1m)
The following mnemonics are used to change inodes:
md Mode
ln Link count
uid User ID number
gid Group ID number
sz File size in bytes
a# Data block numbers (0-12 for ordinary files, and 0-10
for non-ordinary files)
at Time of last access
mt Time of last modification
ct Time of creation
maj Major device number (special files only)
min Minor device number (special files only)
For control point directories only:
Max space usage Total amount of space allowed in this and
subordinate directories.
Cur space usage Current amount of space allowed in this
directory and subordinates.
Max file node Total number of inodes allowed in this
and subordinate directories.
Cur file node Current number of inodes allowed in this
directory and subordinate directories.
An inode's first 10 data blocks are direct blocks; the next
3 are indirect. To print the contents of the data blocks,
type an f. The f can be followed by a logical block number
and a print option or by a print option alone. If you omit
the number, block 0 is printed. The data in the specified
block are printed according to the mode indicated by a print
option. The print options are:
d Print as directories.
Licensed material--property of copyright holder(s) Page 2
fsdb(1m) DG/UX 4.30 fsdb(1m)
o Print as octal words.
e Print as decimal words.
c Print as characters.
b Print as octal bytes.
The f command does not work on a special file (device) or on
empty data blocks. (The pointer in the inode for an empty
block in a file is 0.)
The a field of the inode is examined and changed in a manner
different from other fields. To examine a data block entry,
specify a followed by a logical block number and then b.
The address of the array element within the inode for the
logical block number is printed, followed by A. Then the
octal and the decimal disk block number of the data block
itself is printed.
Examining Directory Entries
To view a directory entry, type a d followed by an integer.
A directory entry consists of an inode number, the name
length, entry length, sequence number, and filename. Since
directory entries are found in the data of a directory
inode, fsdb displays the directory entry specified relative
to the current inode. If the current inode is not a
directory inode or there are fewer directory entries than
the one you indicate, fsdb prints this message:
nonexistent block
Cannot scan directory
All fields of the directory entry except the inode number
can be changed by giving the mnemonic for the field followed
by an equal sign and then a value. For the name field, the
character string following the equal sign should be enclosed
in double quotation marks if the first character is not
alphabetic; otherwise, double quotation marks are optional
for this field. To alter the inode number for a directory
entry, omit the mnemonic. The mnemonics are as follows:
nl Name length in characters
el Entry length - total byte count used by the entry
nm Filename
sq Sequence number
Licensed material--property of copyright holder(s) Page 3
fsdb(1m) DG/UX 4.30 fsdb(1m)
Use extreme care in changing names, name lengths, and entry
lengths, because following entries can be corrupted or made
unreachable.
Examining Other Data
Information can also be printed as double words, words,
bytes, or characters. To view data in these forms, one can
use D, W, or B for double words, words, or bytes,
respectively. Used alone, these options print the current
address in octal, followed by an indicator of the mode
requested (D., W., or B.). The contents of the current
location follow in octal and then in decimal. If the mode
desired is preceeded by a number, that number is taken as
the address and becomes the current address.
To alter the contents of a double word, word, or byte,
follow the address and mode indicator (B, W, or D) by an
equal sign and a value. For example, 01006W=0177777 sets
the contents of word 01006 to 0177777.
Current Address
The contents of the current address can also be viewed by
following the letter p with an i for inodes or one of the
print options described above for use with the f command.
If the p is followed by a number, that many elements
(inodes, words, etc., depending on the print option used)
are printed.
The current address is normalized to an appropriate boundary
before printing begins. The current address advances with
the printing and is left at the address of the last item
printed.
The current address can be saved by using the < symbol. The
symbol > restores the saved address. Only one address can
be saved at any one time; a subsequent use of < replaces a
previously saved address with the current address.
Commands and Symbols
Following is a summary of fsdb commands:
[n]i Print inode n; current is the default.
dn Print directory entry number n.
p[n]o|i Print the next n inodes according to option o or
in inode format.
f[n]o Print logical data block n according to option
o; block 0 is the default.
[a]B Enter byte mode at address a; default is the
current address.
[a]W Enter word mode at address a; default is the
current address.
[a]D Enter double-word mode at address a; default is
Licensed material--property of copyright holder(s) Page 4
fsdb(1m) DG/UX 4.30 fsdb(1m)
the current address.
+,- Print next item, last item.
>,< Save current address, restore saved address.
O Set or unset error-checking toggle.
! Escape to the shell.
q Quit; terminate the program.
<NL> Print next item of the previously specified
type.
The following symbols are used for assignment to inode and
directory fields and also to locations directly:
=n Assignment
=+n Incremental assignment
=-n Decremental assignment
You can use dots, tabs, and spaces as delimiters within
commands to fsdb, but they are not necessary. A line with
just a new-line character increases the current address by
the size of the data type last printed. That is, the
address is set to the next byte, word, double word,
directory entry, or inode, letting you step through a region
of the file system. A line with just a + or - takes you to
the next or previous item, respectively.
Miscellaneous
Fsdb cannot print more than a block's worth of data at once
because only one block of data is kept in memory at any one
time. If a count of 0 is used with the p command, all
entries to the end of the current block are printed.
Because fsdb deals with only a block at a time, raw devices
and block devices can be debugged.
All assignment operations result in immediate write-through
of the current block. During any assignment operation,
numbers are checked for a possible truncation error due to
the size of the destination address. The message
"alignment" is printed if such a truncation would have taken
place if the assignment had been made.
To terminate output at any time, type the delete character.
EXAMPLES
2i Prints the root inode of the current file
system.
386i Prints inode number 386 in inode format; this
becomes the current inode.
ln=4 Changes the link count for the current inode
to 4.
Licensed material--property of copyright holder(s) Page 5
fsdb(1m) DG/UX 4.30 fsdb(1m)
ln=+1 Increases the current inode's link count by 1.
fc Prints, in ASCII, block zero of the file
associated with the current inode.
f2c Prints the third data block of the current
inode as characters.
2i.fd Prints the root inode's first data block in
the form of directory entries. This example
combines several operations on one command
line; the same effect would occur if the `2i'
were followed by `fd' as a separate command.
d2 Prints the third directory entry in the
current inode.
d0=32 Sets the inode number of the first directory
entry of the current inode to 32.
d5i.fc Changes the current inode to that associated
with the sixth directory entry of the current
inode; the first logical block of the file is
then printed in ASCII.
0B.p0o Prints the super-block of a DG/UX file system
in octal.
2i.a0b.d7=3 Changes the i-number for the eighth directory
slot in the root directory to 3.
d7.nm="name" Changes the name field in the directory slot
to "name."
a2b.p0d Prints the third block of the current inode as
directory entries.
0140B Produces the output
0140B.: 14 (12)
if location 0140 happens to contain 014.
SEE ALSO
clri(1m), fsck(1m).
Licensed material--property of copyright holder(s) Page 6