DE.9
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:13k
源码类别:

操作系统开发

开发平台:

C/C++

  1. .CD "de (en disk editor"
  2. .SX "defR [fB(enwfR] fIblock_device"
  3. .SX "de (enr fIfile
  4. .FL "(enr" "Recover a file that has been removed"
  5. .FL "(enw" "Enable writing, so device can be modified"
  6. .EX "de (enr /usr/ast/prog.c" "Undo the effects of: fIrm /usr/ast/prog.cfR"
  7. .EX "de (enw /dev/fd0" "Edit fI/dev/fd0fR for writing"
  8. .PP
  9. The fIdefR program allows a system administrator to examine and modify
  10. a s-2MINIXs0 file system device. 
  11. Commands are available to move to any address on the disk
  12. and display the disk block contents. This information may
  13. be presented in one of three visual modes: as two-byte words,
  14. as ASCII characters or as a bit map. The disk may be searched
  15. for a string of characters. If the fB(enwfR option is given,
  16. fIdefR will open the device for writing and words may be
  17. modified.
  18. Without this flag, writing is prohibited.
  19. Lost blocks and files can be recovered using a variety of
  20. commands. The fB(enrfR option supports automated recovery of
  21. files removed by fIunlinkfR.
  22. .SS "Positioning"
  23. .PP
  24. Disks are divided into blocks (also called *(OQzones*(CQ) of 1024
  25. bytes. fIDefR keeps a current address on the disk as a
  26. block number and a byte offset within the block. In some
  27. visual modes the offset is rounded off, for example, in
  28. *(OQword*(CQ mode the offset must be even.
  29. .PP
  30. There are different types of blocks on a file system device,
  31. including a super block, bit maps, i-nodes and data blocks.
  32. fIDefR knows the type of the current block, but will allow
  33. most positioning commands and visual modes to function
  34. anywhere on the disk.
  35. .PP
  36. The fIffR command (or PGDN on the keypad) moves forward to the
  37. next block, similarly fIbfR (PGUP) moves backwards one block.
  38. fIFfR (END) moves to the last block and fIBfR (HOME) moves to the
  39. first block.
  40. .PP
  41. The arrow keys (or 
  42. fIufR, fIdfR, fIlfR, and fIrfR) change the current
  43. address by small increments. The size of the increment
  44. depends on the current display mode, as shown below. The
  45. various sizes suit each display and pointers move on the
  46. screen to follow each press of an arrow key.
  47. .HS
  48. .if t .ta .75iR 1.5iR 2.25iR 3.0iR 3.75iR
  49. .if n .ta .75i 1.5i 2.25i 3.0i 3.75i
  50. .nf
  51. fB Mode Up Down Left RightfR
  52. Word (mi2 +2 (mi32 +32
  53. Block (mi64 +64 (mi1 +1
  54. Map (mi256 +256 (mi4 +4
  55. .fi
  56. .HS
  57. The fIgfR command allows movement to any specified block.
  58. Like all commands that take arguments, a prompt and
  59. subsequent input are written to the bottom line of the
  60. screen. Numerical entry may be decimal, octal or
  61. hexadecimal, for example 234, (mi1, 070, 0xf3, (miX3C.
  62. .PP
  63. While checking an i-node one may want to move to a block
  64. listed as a zone of the file. The fIGfR command takes the
  65. contents at the current address in the device as a block
  66. number and indirectly jumps to that block.
  67. .PP
  68. The address may be set to the start of any i-node using
  69. the fIfR command and supplying an i-node number. The fIIfR
  70. command maps a given file name into an i-node address.
  71. The file must exist on the current device and this
  72. device must be mounted.
  73. .SS "The Display"
  74. .PP
  75. The first line of the display contains the device name,
  76. the name of the current output file (if one is open) and
  77. the current search string. If fIdefR is being run with
  78. the fB(enwfR option then the device name is flagged with *(OQ(w).*(CQ
  79. If a string is too long to fit on the line it is marked with *(OQ...*(CQ.
  80. .PP
  81. The second line contains the current block number, the
  82. total number of blocks, and the type of the current block.
  83. The types are: boot, super, i-node bit map, zone bit map,
  84. i-nodes and data block.
  85. If the current address is
  86. within a data block then the string *(OQin use*(CQ is displayed
  87. if the block corresponds to a set in the zone bit map.
  88. .PP
  89. The third line shows the offset in the current block. If
  90. the current address is within either the i-node or zone bit
  91. maps then the i-node or block number corresponding to the
  92. current bit is shown. If the current address is within an
  93. i-node then the i-node number and *(OQin use*(CQ status is displayed.
  94. If the address is within a bit map or i-node block, but past
  95. the last usable entry, then the string *(OQpadding*(CQ is shown.
  96. .PP
  97. The rest of the screen is used to display data from the
  98. current block. There are three visual display modes:
  99. *(OQword,*(CQ *(OQblock,*(CQ and *(OQmap.*(CQ 
  100. The fIvfR command followed by
  101. fIwfR, fIbfR, or fImfR sets the current display mode.
  102. .PP
  103. In *(OQword*(CQ mode 16 words, of two bytes each, are shown in
  104. either base 2, 8, 10 or 16. The current base is displayed
  105. to the far right of the screen. It can be changed using the
  106. fIofR command followed by either an fIhfR (hexadecimal), fIdfR
  107. (decimal), fIofR (octal) or fIbfR (binary).
  108. .PP
  109. fIDefR knows where i-nodes are, and will display the
  110. contents in a readable format, including the fIrwxfR bits,
  111. the user name and the time field. If the current page
  112. is at the beginning of the super block, or an executable
  113. file or an fIarfR archive, then fIdefR will also inform
  114. the user. In all other cases the contents of the 16
  115. words are shown to the right as equivalent ASCII
  116. characters.
  117. .PP
  118. In *(OQblock*(CQ mode a whole block of 1024 bytes is displayed
  119. as ASCII characters, 64 columns by 16 lines. Control codes
  120. are shown as highlighted characters. If the high order bit
  121. is set in any of the 1024 bytes then an *(OQMSB*(CQ flag is shown
  122. on the far right of the screen, but these bytes are not
  123. individually marked.
  124. .PP
  125. In *(OQmap*(CQ mode 2048 bits (256 bytes) are displayed from the
  126. top to the bottom (32 bits) and from the left to the right
  127. of the screen. Bit zero of a byte is towards the top of the
  128. screen. This visual mode is generally used to observe
  129. the bit map blocks. The number of set bits displayed is
  130. written on the far right of the screen.
  131. .SS "Searching"
  132. .PP
  133. A search for an ASCII string is initiated by the fI/fR command.
  134. Control characters not used for other purposes may be
  135. entered in the search string, for example CTRL-J is an end-of-line 
  136. character. The search is from the current position to
  137. the end of the current device.
  138. .PP
  139. Once a search string has been defined by a use of fI/fR, the
  140. next search may be initiated with the fInfR command, (a fI/fR
  141. followed immediately by an ENTER is equivalent to an fInfR).
  142. .PP
  143. Whenever a search is in progress fIdefR will append
  144. one fI.fR to the prompt line for every 500 blocks searched. If the
  145. string is found between the end of the file system and the
  146. actual end of the device, then the current address is set to
  147. the end of the file system.
  148. .PP
  149. Some of the positioning commands push the current address
  150. and visual mode in a stack before going to a new address.
  151. These commands are 
  152. fIBfR, fIFfR, fIgfR, fIGfR, fIifR, fIIfR, fInfR, fIxfR and 
  153. fI/fR. 
  154. The fIpfR
  155. (previous) command pops the last address and visual mode
  156. from the stack. This stack is eight entries deep.
  157. .SS "Modifying the File System"
  158. .PP
  159. The fIsfR command will prompt for a data word and store it at
  160. the current address on the disk. This is used to change
  161. information that can not be easily changed by any other
  162. means.
  163. .PP
  164. The data word is 16 bits wide, it may be entered in decimal,
  165. octal or hexadecimal. Remember that the fB(enwfR option must
  166. be specified for the fIsfR command to operate. Be careful
  167. when modifying a mounted file system.
  168. .SS "Recovering Files"
  169. .PP
  170. Any block on the disk may be written to an output file.
  171. This is used to recover blocks marked as free on the
  172. disk. A write command will request a file name the first
  173. time it is used, on subsequent writes the data is appended
  174. to the current output file.
  175. .PP
  176. The name of the current output file is changed using the
  177. fIcfR command. This file should be on a different file system,
  178. to avoid overwriting an i-node or block before it is
  179. recovered.
  180. .PP
  181. An ASCII block is usually recovered using the fIwfR command.
  182. All bytes will have their most significant bit cleared before
  183. being written to the output file. Bytes containing '\0'
  184. or '\177' are not copied. The fIWfR command writes the current
  185. block (1024 bytes exactly) to the output file.
  186. .PP
  187. When a file is deleted using fIunlinkfR the i-node number
  188. in the directory is zeroed, but before its removal, it is
  189. copied into the end of the file name field. This allows
  190. the i-node of a deleted file to be found by searching
  191. through a directory. The fIxfR command asks for the path
  192. name of a lost file, extracts the old i-node number and
  193. changes the current disk address to the start of the
  194. i-node.
  195. .PP
  196. Once an i-node is found, all of the freed blocks may be
  197. recovered by checking the i-node zone fields, using 'G'
  198. to go to a block, writing it back out using 'w', going
  199. back to the i-node with fIpfR and advancing to the next
  200. block. This file extraction process is automated by using
  201. the fIXfR command, which goes through the i-node, indirect
  202. and double indirect blocks finding all the block pointers
  203. and recovering all the blocks of the file.
  204. .PP
  205. The fIXfR command closes the current output file and asks
  206. for the name of a new output file. All of the disk blocks
  207. must be marked as free, if they are not the command stops
  208. and the file must be recovered manually.
  209. .PP
  210. When extracting lost blocks fIdefR will maintain *(OQholes*(CQ in
  211. the file. Thus, a recovered sparse file does not allocate
  212. unused blocks and will keep its efficient storage scheme.
  213. This property of the fIXfR command may be used to move a sparse
  214. file from one device to another.
  215. .PP
  216. Automatic recovery may be initiated by the fB(enrfR option on
  217. the command line. Also specified is the path name of a
  218. file just removed by fIunlinkfR. fIDefR determines which
  219. mounted file system device held the file and opens it for
  220. reading. The lost i-node is found and the file extracted by
  221. automatically performing an fIxfR and an fIXfR command.
  222. .PP
  223. The recovered file will be written to fI/tmpfR. fIDefR will
  224. refuse to automatically recover a file on the same file
  225. system as fI/tmpfR. The lost file must have belonged to the
  226. user. If automatic recovery will not complete, then manual
  227. recovery may be performed.
  228. .SS "Miscellaneous"
  229. .PP
  230. The user can terminate a session with fIdefR by typing
  231. fIqfR, CTRL-D, or the key associated with SIGQUIT.
  232. .PP
  233. The fImfR command invokes the s-2MINIXs0 fIshfR shell as a subprocess.
  234. .PP
  235. For help while using fIdefR use fIhfR.
  236. .SS "Command Summary"
  237. .LP
  238. .ta 0.25i 1.0i 1.5i
  239. .nf
  240. .sp
  241. PGUP b Back one block
  242. PGDN f Forward one block
  243. HOME B Goto first block
  244. END F Goto last block
  245. UP u Move back 2/64/256 bytes
  246. DOWN d Move forward 2/64/256 bytes
  247. LEFT l Move back 32/1/4 bytes
  248. RIGHT r Move forward 32/1/4 bytes
  249. g Goto specified block
  250. G Goto block indirectly
  251. i Goto specified i-node
  252. I Filename to i-node
  253. / Search
  254. n Next occurrence
  255. p Previous address
  256. h Help
  257. EOF q Quit
  258. m s-2MINIXs0 shell
  259. v Visual mode (w b m)
  260. o Output base (h d o b)
  261. c Change file name
  262. w Write ASCII block
  263. W Write block exactly
  264. x Extract lost directory entry
  265. X Extract lost file blocks
  266. s Store word
  267. .fi
  268. .sp
  269. NOTES:
  270. When entering a line in response to a prompt from fIdefR
  271. there are a couple of editing characters available. The
  272. previous character may be erased by typing CTRL-H and the
  273. whole line may be erased by typing CTRL-U. ENTER terminates
  274. the input. If DELETE or a non-ASCII character is typed
  275. then the command requesting the input is aborted.
  276. .PP
  277. The commands fIGfR, fIsfR and fIXfR will only function if
  278. the current visual display mode is *(OQword.*(CQ 
  279. The commands
  280. fIifR, fIIfR and fIxfR change the mode to *(OQword*(CQ on
  281. completion. The commands fIGfR and fI/fR change the mode
  282. to *(OQblock*(CQ. These restrictions and automatic mode
  283. conversions are intended to aid the user.
  284. .PP
  285. The *(OQmap*(CQ mode uses special graphic characters, and
  286. only functions if the user is at the console.
  287. .PP
  288. fIDefR generates warnings for illegal user input or if
  289. erroneous data is found on the disk, for example a
  290. corrupted magic number. Warnings appear in the middle
  291. of the screen for two seconds, then the current page
  292. is redrawn. Some minor errors, for example, setting
  293. an unknown visual mode, simply ring the bell. Major
  294. errors, for example I/O problems on the file system
  295. device cause an immediate exit from fIdefR.
  296. .PP
  297. The i-node and zone bit maps are read from the device
  298. when fIdefR starts up. These determine whether *(OQin use*(CQ
  299. or *(OQnot in use*(CQ is displayed in the status field at
  300. the top of the screen. The bit maps are not re-read
  301. while using fIdefR and will become out-of-date if
  302. observing a mounted file system.
  303. .PP
  304. fIDefR requires termcap definitions for *(OQcm*(CQ and *(OQcl*(CQ.
  305. Furthermore, *(OQso*(CQ and *(OQse*(CQ will also be used if available. 
  306. The ANSI strings generated by the keypad arrows are recognized,
  307. as well as any single character codes defined by *(OQku*(CQ,
  308. *(OQkd*(CQ, *(OQkl*(CQ and *(OQkr*(CQ.
  309. .SS "Author"
  310. .PP
  311. The fIdefR program was written by Terrence Holm.