355 lines
14 KiB
Groff
355 lines
14 KiB
Groff
|
||
|
||
|
||
|
||
|
||
Command: de - disk editor
|
||
Syntax: de [-w] block_device
|
||
de -r file
|
||
Flags: -r Recover a file that has been removed
|
||
-w Enable writing, so device can be modified
|
||
Examples: de -r /usr/ast/prog.c # Undo the effects of: rm
|
||
/usr/ast/prog.c
|
||
de -w /dev/fd0 # Edit /dev/fd0 for writing
|
||
|
||
The de program allows a system administrator to examine and modify
|
||
a MINIX file system device. Commands are available to move to any
|
||
address on the disk and display the disk block contents. This
|
||
information may be presented in one of three visual modes: as two-byte
|
||
words, as ASCII characters or as a bit map. The disk may be searched for
|
||
a string of characters. If the -w option is given, de will open the
|
||
device for writing and words may be modified. Without this flag,
|
||
writing is prohibited. Lost blocks and files can be recovered using a
|
||
variety of commands. The -r option supports automated recovery of files
|
||
removed by unlink.
|
||
|
||
Positioning
|
||
|
||
Disks are divided into blocks (also called 'zones') of 1024 bytes.
|
||
De keeps a current address on the disk as a block number and a byte
|
||
offset within the block. In some visual modes the offset is rounded off,
|
||
for example, in 'word' mode the offset must be even.
|
||
|
||
There are different types of blocks on a file system device,
|
||
including a super block, bit maps, i-nodes and data blocks. De knows
|
||
the type of the current block, but will allow most positioning commands
|
||
and visual modes to function anywhere on the disk.
|
||
|
||
The f command (or PGDN on the keypad) moves forward to the next
|
||
block, similarly b (PGUP) moves backwards one block. F (END) moves to
|
||
the last block and B (HOME) moves to the first block.
|
||
|
||
The arrow keys (or u, d, l, and r) change the current address by
|
||
small increments. The size of the increment depends on the current
|
||
display mode, as shown below. The various sizes suit each display and
|
||
pointers move on the screen to follow each press of an arrow key.
|
||
|
||
Mode Up Down Left Right
|
||
Word -2 +2 -32 +32
|
||
Block -64 +64 -1 +1
|
||
Map -256 +256 -4 +4
|
||
|
||
The g command allows movement to any specified block. Like all commands
|
||
that take arguments, a prompt and subsequent input are written to the
|
||
bottom line of the screen. Numerical entry may be decimal, octal or
|
||
hexadecimal, for example 234, -1, 070, 0xf3, -X3C.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
While checking an i-node one may want to move to a block listed as
|
||
a zone of the file. The G command takes the contents at the current
|
||
address in the device as a block number and indirectly jumps to that
|
||
block.
|
||
|
||
The address may be set to the start of any i-node using the
|
||
command and supplying an i-node number. The I command maps a given file
|
||
name into an i-node address. The file must exist on the current device
|
||
and this device must be mounted.
|
||
|
||
The Display
|
||
|
||
The first line of the display contains the device name, the name of
|
||
the current output file (if one is open) and the current search string.
|
||
If de is being run with the -w option then the device name is flagged
|
||
with '(w).' If a string is too long to fit on the line it is marked with
|
||
'...'.
|
||
|
||
The second line contains the current block number, the total number
|
||
of blocks, and the type of the current block. The types are: boot,
|
||
super, i-node bit map, zone bit map, i-nodes and data block. If the
|
||
current address is within a data block then the string 'in use' is
|
||
displayed if the block corresponds to a set in the zone bit map.
|
||
|
||
The third line shows the offset in the current block. If the
|
||
current address is within either the i-node or zone bit maps then the i-
|
||
node or block number corresponding to the current bit is shown. If the
|
||
current address is within an i-node then the i-node number and 'in use'
|
||
status is displayed. If the address is within a bit map or i-node
|
||
block, but past the last usable entry, then the string 'padding' is
|
||
shown.
|
||
|
||
The rest of the screen is used to display data from the current
|
||
block. There are three visual display modes: 'word,' 'block,' and
|
||
'map.' The v command followed by w, b, or m sets the current display
|
||
mode.
|
||
|
||
In 'word' mode 16 words, of two bytes each, are shown in either
|
||
base 2, 8, 10 or 16. The current base is displayed to the far right of
|
||
the screen. It can be changed using the o command followed by either an
|
||
h (hexadecimal), d (decimal), o (octal) or b (binary).
|
||
|
||
De knows where i-nodes are, and will display the contents in a
|
||
readable format, including the rwx bits, the user name and the time
|
||
field. If the current page is at the beginning of the super block, or an
|
||
executable file or an ar archive, then de will also inform the user. In
|
||
all other cases the contents of the 16 words are shown to the right as
|
||
equivalent ASCII characters.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
In 'block' mode a whole block of 1024 bytes is displayed as ASCII
|
||
characters, 64 columns by 16 lines. Control codes are shown as
|
||
highlighted characters. If the high order bit is set in any of the 1024
|
||
bytes then an 'MSB' flag is shown on the far right of the screen, but
|
||
these bytes are not individually marked.
|
||
|
||
In 'map' mode 2048 bits (256 bytes) are displayed from the top to
|
||
the bottom (32 bits) and from the left to the right of the screen. Bit
|
||
zero of a byte is towards the top of the screen. This visual mode is
|
||
generally used to observe the bit map blocks. The number of set bits
|
||
displayed is written on the far right of the screen.
|
||
|
||
Searching
|
||
|
||
A search for an ASCII string is initiated by the / command.
|
||
Control characters not used for other purposes may be entered in the
|
||
search string, for example CTRL-J is an end-of-line character. The
|
||
search is from the current position to the end of the current device.
|
||
|
||
Once a search string has been defined by a use of /, the next
|
||
search may be initiated with the n command, (a / followed immediately by
|
||
an ENTER is equivalent to an n).
|
||
|
||
Whenever a search is in progress de will append one . to the prompt
|
||
line for every 500 blocks searched. If the string is found between the
|
||
end of the file system and the actual end of the device, then the
|
||
current address is set to the end of the file system.
|
||
|
||
Some of the positioning commands push the current address and
|
||
visual mode in a stack before going to a new address. These commands
|
||
are B, F, g, G, i, I, n, x and /. The p (previous) command pops the last
|
||
address and visual mode from the stack. This stack is eight entries
|
||
deep.
|
||
|
||
Modifying the File System
|
||
|
||
The s command will prompt for a data word and store it at the
|
||
current address on the disk. This is used to change information that can
|
||
not be easily changed by any other means.
|
||
|
||
The data word is 16 bits wide, it may be entered in decimal, octal
|
||
or hexadecimal. Remember that the -w option must be specified for the s
|
||
command to operate. Be careful when modifying a mounted file system.
|
||
|
||
Recovering Files
|
||
|
||
Any block on the disk may be written to an output file. This is
|
||
used to recover blocks marked as free on the disk. A write command will
|
||
request a file name the first time it is used, on subsequent writes the
|
||
data is appended to the current output file.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The name of the current output file is changed using the c command.
|
||
This file should be on a different file system, to avoid overwriting an
|
||
i-node or block before it is recovered.
|
||
|
||
An ASCII block is usually recovered using the w command. All bytes
|
||
will have their most significant bit cleared before being written to the
|
||
output file. Bytes containing '\0' or '\177' are not copied. The W
|
||
command writes the current block (1024 bytes exactly) to the output
|
||
file.
|
||
|
||
When a file is deleted using unlink the i-node number in the
|
||
directory is zeroed, but before its removal, it is copied into the end
|
||
of the file name field. This allows the i-node of a deleted file to be
|
||
found by searching through a directory. The x command asks for the path
|
||
name of a lost file, extracts the old i-node number and changes the
|
||
current disk address to the start of the i-node.
|
||
|
||
Once an i-node is found, all of the freed blocks may be recovered
|
||
by checking the i-node zone fields, using 'G' to go to a block, writing
|
||
it back out using 'w', going back to the i-node with p and advancing to
|
||
the next block. This file extraction process is automated by using the X
|
||
command, which goes through the i-node, indirect and double indirect
|
||
blocks finding all the block pointers and recovering all the blocks of
|
||
the file.
|
||
|
||
The X command closes the current output file and asks for the name
|
||
of a new output file. All of the disk blocks must be marked as free, if
|
||
they are not the command stops and the file must be recovered manually.
|
||
|
||
When extracting lost blocks de will maintain 'holes' in the file.
|
||
Thus, a recovered sparse file does not allocate unused blocks and will
|
||
keep its efficient storage scheme. This property of the X command may
|
||
be used to move a sparse file from one device to another.
|
||
|
||
Automatic recovery may be initiated by the -r option on the command
|
||
line. Also specified is the path name of a file just removed by unlink.
|
||
De determines which mounted file system device held the file and opens
|
||
it for reading. The lost i-node is found and the file extracted by
|
||
automatically performing an x and an X command.
|
||
|
||
The recovered file will be written to /tmp. De will refuse to
|
||
automatically recover a file on the same file system as /tmp. The lost
|
||
file must have belonged to the user. If automatic recovery will not
|
||
complete, then manual recovery may be performed.
|
||
|
||
Miscellaneous
|
||
|
||
The user can terminate a session with de by typing q, CTRL-D, or
|
||
the key associated with SIGQUIT.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The m command invokes the MINIX sh shell as a subprocess.
|
||
|
||
For help while using de use h.
|
||
|
||
Command Summary
|
||
|
||
PGUP b Back one block
|
||
PGDN f Forward one block
|
||
HOME B Goto first block
|
||
END F Goto last block
|
||
UP u Move back 2/64/256 bytes
|
||
DOWN d Move forward 2/64/256 bytes
|
||
LEFT l Move back 32/1/4 bytes
|
||
RIGHT r Move forward 32/1/4 bytes
|
||
g Goto specified block
|
||
G Goto block indirectly
|
||
i Goto specified i-node
|
||
I Filename to i-node
|
||
/ Search
|
||
n Next occurrence
|
||
p Previous address
|
||
h Help
|
||
EOF q Quit
|
||
m MINIX shell
|
||
v Visual mode (w b m)
|
||
o Output base (h d o b)
|
||
c Change file name
|
||
w Write ASCII block
|
||
W Write block exactly
|
||
x Extract lost directory entry
|
||
X Extract lost file blocks
|
||
s Store word
|
||
|
||
NOTES: When entering a line in response to a prompt from de there are a
|
||
couple of editing characters available. The previous character may be
|
||
erased by typing CTRL-H and the whole line may be erased by typing CTRL-
|
||
U. ENTER terminates the input. If DELETE or a non-ASCII character is
|
||
typed then the command requesting the input is aborted.
|
||
|
||
The commands G, s and X will only function if the current visual
|
||
display mode is 'word.' The commands i, I and x change the mode to
|
||
'word' on completion. The commands G and / change the mode to 'block'.
|
||
These restrictions and automatic mode conversions are intended to aid
|
||
the user.
|
||
|
||
The 'map' mode uses special graphic characters, and only functions
|
||
if the user is at the console.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
De generates warnings for illegal user input or if erroneous data
|
||
is found on the disk, for example a corrupted magic number. Warnings
|
||
appear in the middle of the screen for two seconds, then the current
|
||
page is redrawn. Some minor errors, for example, setting an unknown
|
||
visual mode, simply ring the bell. Major errors, for example I/O
|
||
problems on the file system device cause an immediate exit from de.
|
||
|
||
The i-node and zone bit maps are read from the device when de
|
||
starts up. These determine whether 'in use' or 'not in use' is displayed
|
||
in the status field at the top of the screen. The bit maps are not re-
|
||
read while using de and will become out-of-date if observing a mounted
|
||
file system.
|
||
|
||
De requires termcap definitions for 'cm' and 'cl'. Furthermore,
|
||
'so' and 'se' will also be used if available. The ANSI strings generated
|
||
by the keypad arrows are recognized, as well as any single character
|
||
codes defined by 'ku', 'kd', 'kl' and 'kr'.
|
||
|
||
Author
|
||
|
||
The de program was written by Terrence Holm.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|