314 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .so mnx.mac
 | |
| .TH DE 9
 | |
| .CD "de \(en disk editor"
 | |
| .SX "de\fR [\fB\(enw\fR] \fIblock_device"
 | |
| .SX "de \(enr \fIfile
 | |
| .FL "\(enr" "Recover a file that has been removed"
 | |
| .FL "\(enw" "Enable writing, so device can be modified"
 | |
| .EX "de \(enr /usr/ast/prog.c" "Undo the effects of: \fIrm /usr/ast/prog.c\fR"
 | |
| .EX "de \(enw /dev/fd0" "Edit \fI/dev/fd0\fR for writing"
 | |
| .PP
 | |
| The \fIde\fR program allows a system administrator to examine and modify
 | |
| a \s-2MINIX\s0 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 \fB\(enw\fR option is given,
 | |
| \fIde\fR 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 \fB\(enr\fR option supports automated recovery of
 | |
| files removed by \fIunlink\fR.
 | |
| .SS "Positioning"
 | |
| .PP
 | |
| Disks are divided into blocks (also called \*(OQzones\*(CQ) of 1024
 | |
| bytes. \fIDe\fR 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
 | |
| \*(OQword\*(CQ mode the offset must be even.
 | |
| .PP
 | |
| There are different types of blocks on a file system device,
 | |
| including a super block, bit maps, i-nodes and data blocks.
 | |
| \fIDe\fR knows the type of the current block, but will allow
 | |
| most positioning commands and visual modes to function
 | |
| anywhere on the disk.
 | |
| .PP
 | |
| The \fIf\fR command (or PGDN on the keypad) moves forward to the
 | |
| next block, similarly \fIb\fR (PGUP) moves backwards one block.
 | |
| \fIF\fR (END) moves to the last block and \fIB\fR (HOME) moves to the
 | |
| first block.
 | |
| .PP
 | |
| The arrow keys (or 
 | |
| \fIu\fR, \fId\fR, \fIl\fR, and \fIr\fR) 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.
 | |
| .HS
 | |
| .if t .ta .75iR 1.5iR 2.25iR 3.0iR 3.75iR
 | |
| .if n .ta .75i 1.5i 2.25i 3.0i 3.75i
 | |
| .nf
 | |
| \fB	Mode	Up	Down	Left	Right\fR
 | |
| 	Word	\(mi2	+2	\(mi32	+32
 | |
| 	Block	\(mi64	+64	\(mi1	+1
 | |
| 	Map	\(mi256	+256	\(mi4	+4
 | |
| .fi
 | |
| .HS
 | |
| The \fIg\fR 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, \(mi1, 070, 0xf3, \(miX3C.
 | |
| .PP
 | |
| While checking an i-node one may want to move to a block
 | |
| listed as a zone of the file. The \fIG\fR command takes the
 | |
| contents at the current address in the device as a block
 | |
| number and indirectly jumps to that block.
 | |
| .PP
 | |
| The address may be set to the start of any i-node using
 | |
| the \fI\fR command and supplying an i-node number. The \fII\fR
 | |
| 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.
 | |
| .SS "The Display"
 | |
| .PP
 | |
| 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 \fIde\fR is being run with
 | |
| the \fB\(enw\fR option then the device name is flagged with \*(OQ(w).\*(CQ
 | |
| If a string is too long to fit on the line it is marked with \*(OQ...\*(CQ.
 | |
| .PP
 | |
| 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 \*(OQin use\*(CQ is displayed
 | |
| if the block corresponds to a set in the zone bit map.
 | |
| .PP
 | |
| 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 \*(OQin use\*(CQ status is displayed.
 | |
| If the address is within a bit map or i-node block, but past
 | |
| the last usable entry, then the string \*(OQpadding\*(CQ is shown.
 | |
| .PP
 | |
| The rest of the screen is used to display data from the
 | |
| current block. There are three visual display modes:
 | |
| \*(OQword,\*(CQ \*(OQblock,\*(CQ and \*(OQmap.\*(CQ 
 | |
| The \fIv\fR command followed by
 | |
| \fIw\fR, \fIb\fR, or \fIm\fR sets the current display mode.
 | |
| .PP
 | |
| In \*(OQword\*(CQ 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
 | |
| \fIo\fR command followed by either an \fIh\fR (hexadecimal), \fId\fR
 | |
| (decimal), \fIo\fR (octal) or \fIb\fR (binary).
 | |
| .PP
 | |
| \fIDe\fR knows where i-nodes are, and will display the
 | |
| contents in a readable format, including the \fIrwx\fR 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 \fIar\fR archive, then \fIde\fR will also inform
 | |
| the user. In all other cases the contents of the 16
 | |
| words are shown to the right as equivalent ASCII
 | |
| characters.
 | |
| .PP
 | |
| In \*(OQblock\*(CQ 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 \*(OQMSB\*(CQ flag is shown
 | |
| on the far right of the screen, but these bytes are not
 | |
| individually marked.
 | |
| .PP
 | |
| In \*(OQmap\*(CQ 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.
 | |
| .SS "Searching"
 | |
| .PP
 | |
| A search for an ASCII string is initiated by the \fI/\fR 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.
 | |
| .PP
 | |
| Once a search string has been defined by a use of \fI/\fR, the
 | |
| next search may be initiated with the \fIn\fR command, (a \fI/\fR
 | |
| followed immediately by an ENTER is equivalent to an \fIn\fR).
 | |
| .PP
 | |
| Whenever a search is in progress \fIde\fR will append
 | |
| one \fI.\fR 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.
 | |
| .PP
 | |
| Some of the positioning commands push the current address
 | |
| and visual mode in a stack before going to a new address.
 | |
| These commands are 
 | |
| \fIB\fR, \fIF\fR, \fIg\fR, \fIG\fR, \fIi\fR, \fII\fR, \fIn\fR, \fIx\fR and 
 | |
| \fI/\fR. 
 | |
| The \fIp\fR
 | |
| (previous) command pops the last address and visual mode
 | |
| from the stack. This stack is eight entries deep.
 | |
| .SS "Modifying the File System"
 | |
| .PP
 | |
| The \fIs\fR 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.
 | |
| .PP
 | |
| The data word is 16 bits wide, it may be entered in decimal,
 | |
| octal or hexadecimal. Remember that the \fB\(enw\fR option must
 | |
| be specified for the \fIs\fR command to operate. Be careful
 | |
| when modifying a mounted file system.
 | |
| .SS "Recovering Files"
 | |
| .PP
 | |
| 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.
 | |
| .PP
 | |
| The name of the current output file is changed using the
 | |
| \fIc\fR command. This file should be on a different file system,
 | |
| to avoid overwriting an i-node or block before it is
 | |
| recovered.
 | |
| .PP
 | |
| An ASCII block is usually recovered using the \fIw\fR 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 \fIW\fR command writes the current
 | |
| block (1024 bytes exactly) to the output file.
 | |
| .PP
 | |
| When a file is deleted using \fIunlink\fR 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 \fIx\fR 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.
 | |
| .PP
 | |
| 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 \fIp\fR and advancing to the next
 | |
| block. This file extraction process is automated by using
 | |
| the \fIX\fR 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.
 | |
| .PP
 | |
| The \fIX\fR 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.
 | |
| .PP
 | |
| When extracting lost blocks \fIde\fR will maintain \*(OQholes\*(CQ in
 | |
| the file. Thus, a recovered sparse file does not allocate
 | |
| unused blocks and will keep its efficient storage scheme.
 | |
| This property of the \fIX\fR command may be used to move a sparse
 | |
| file from one device to another.
 | |
| .PP
 | |
| Automatic recovery may be initiated by the \fB\(enr\fR option on
 | |
| the command line. Also specified is the path name of a
 | |
| file just removed by \fIunlink\fR. \fIDe\fR 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 \fIx\fR and an \fIX\fR command.
 | |
| .PP
 | |
| The recovered file will be written to \fI/tmp\fR. \fIDe\fR will
 | |
| refuse to automatically recover a file on the same file
 | |
| system as \fI/tmp\fR. The lost file must have belonged to the
 | |
| user. If automatic recovery will not complete, then manual
 | |
| recovery may be performed.
 | |
| .SS "Miscellaneous"
 | |
| .PP
 | |
| The user can terminate a session with \fIde\fR by typing
 | |
| \fIq\fR, CTRL-D, or the key associated with SIGQUIT.
 | |
| .PP
 | |
| The \fIm\fR command invokes the \s-2MINIX\s0 \fIsh\fR shell as a subprocess.
 | |
| .PP
 | |
| For help while using \fIde\fR use \fIh\fR.
 | |
| .SS "Command Summary"
 | |
| .LP
 | |
| .ta 0.25i 1.0i 1.5i
 | |
| .nf
 | |
| .sp
 | |
| 	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	\s-2MINIX\s0 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
 | |
| .fi
 | |
| .sp
 | |
| NOTES:
 | |
| When entering a line in response to a prompt from \fIde\fR
 | |
| 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.
 | |
| .PP
 | |
| The commands \fIG\fR, \fIs\fR and \fIX\fR will only function if
 | |
| the current visual display mode is \*(OQword.\*(CQ 
 | |
| The commands
 | |
| \fIi\fR, \fII\fR and \fIx\fR change the mode to \*(OQword\*(CQ on
 | |
| completion. The commands \fIG\fR and \fI/\fR change the mode
 | |
| to \*(OQblock\*(CQ. These restrictions and automatic mode
 | |
| conversions are intended to aid the user.
 | |
| .PP
 | |
| The \*(OQmap\*(CQ mode uses special graphic characters, and
 | |
| only functions if the user is at the console.
 | |
| .PP
 | |
| \fIDe\fR 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 \fIde\fR.
 | |
| .PP
 | |
| The i-node and zone bit maps are read from the device
 | |
| when \fIde\fR starts up. These determine whether \*(OQin use\*(CQ
 | |
| or \*(OQnot in use\*(CQ is displayed in the status field at
 | |
| the top of the screen. The bit maps are not re-read
 | |
| while using \fIde\fR and will become out-of-date if
 | |
| observing a mounted file system.
 | |
| .PP
 | |
| \fIDe\fR requires termcap definitions for \*(OQcm\*(CQ and \*(OQcl\*(CQ.
 | |
| Furthermore, \*(OQso\*(CQ and \*(OQse\*(CQ 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 \*(OQku\*(CQ,
 | |
| \*(OQkd\*(CQ, \*(OQkl\*(CQ and \*(OQkr\*(CQ.
 | |
| .SS "Author"
 | |
| .PP
 | |
| The \fIde\fR program was written by Terrence Holm.
 | 
