1 | de - A Minix Disk Editor
|
---|
2 |
|
---|
3 | Terrence W. Holm, Jan. 1989
|
---|
4 |
|
---|
5 |
|
---|
6 | INTRODUCTION
|
---|
7 |
|
---|
8 | The de(1) disk editor allows a system administrator to
|
---|
9 | look at and modify a Minix file system device. Commands
|
---|
10 | allow movement throughout a file system device, displaying
|
---|
11 | information in a couple of formats, writing blocks from
|
---|
12 | the device onto another file, and rewriting words on the
|
---|
13 | disk.
|
---|
14 |
|
---|
15 | A few changes to the Minix file system aid recovering files.
|
---|
16 | I-node numbers are retained in directory entries now (they
|
---|
17 | get moved to the end). And all the i-node information is not
|
---|
18 | zeroed-out when a file is unlinked. So, after a file is
|
---|
19 | accidently rm(1)'ed, you can find the old i-node, and then
|
---|
20 | manually (or automatically) go to each of the freed blocks
|
---|
21 | and write them to a new file.
|
---|
22 |
|
---|
23 |
|
---|
24 | USES FOR THE DISK EDITOR
|
---|
25 |
|
---|
26 | 1) EDUCATION. Students can look at a file system in
|
---|
27 | a painless manner. For example you don't have to
|
---|
28 | use od(1) to look at the zone numbers in i-nodes.
|
---|
29 |
|
---|
30 | A simple assignment is to change the size of an un-mounted
|
---|
31 | floppy disk file system from 360 to 300 blocks. (A more
|
---|
32 | difficult assignment is to explain why this works, even
|
---|
33 | though fsck(1) and df(1) do not report the correct number
|
---|
34 | of free blocks. :-)
|
---|
35 |
|
---|
36 | 2) ADMINISTRATION. You can visually check inconsistencies
|
---|
37 | reported by fsck(1) before letting fsck(1) fix them.
|
---|
38 | You can change any word on the disk, this greatly simplifies
|
---|
39 | editing file system information. For example, changing the
|
---|
40 | size of a block special device is actually fun, no more
|
---|
41 | "blind" writing to your partitions.
|
---|
42 |
|
---|
43 | Bit maps can be displayed with 2048 "bits" per screen,
|
---|
44 | (on the IBM/PC console), see how your zones are allocated!
|
---|
45 |
|
---|
46 | 3) RECOVERING LOST FILES. You can search a disk for an ASCII
|
---|
47 | string, once found, the block can be written out to a file.
|
---|
48 |
|
---|
49 | A one line change to fs/path.c allows users to get the i-node
|
---|
50 | number for a file after it has been removed from a directory.
|
---|
51 |
|
---|
52 | Another couple lines changed in the file system keep the
|
---|
53 | i-node information available until the i-node is reused
|
---|
54 | (normally this information is zeroed out when an i-node is
|
---|
55 | released.) This allows a de(1) user to go to a released
|
---|
56 | i-node, get all the block numbers, go to these blocks and
|
---|
57 | write them back to a new file.
|
---|
58 |
|
---|
59 | The whole recovery process is automated by running "de -r file".
|
---|
60 | So, IF a file is unlink(2)'ed (eg. "rm file"), AND IF no one
|
---|
61 | allocates a new i-node or block in the mean-time, THEN you
|
---|
62 | can recover the file.
|
---|
63 |
|
---|
64 |
|
---|
65 | RECOVERY SECURITY
|
---|
66 |
|
---|
67 | Normally Minix hard disk partitions are r/w only by the super-user,
|
---|
68 | and floppy disks are r/w by anyone. This means that only "root"
|
---|
69 | can look at hard disk partitions, but others can use de(1) to play
|
---|
70 | with their floppy disks.
|
---|
71 |
|
---|
72 | When recovering files ("de -r file"), a user requires access to
|
---|
73 | the major file system partitions. This can be done by:
|
---|
74 |
|
---|
75 | (a) Give everyone access to the hard disks. DON'T DO THIS, it
|
---|
76 | defeats all the file system protection we already have.
|
---|
77 |
|
---|
78 | (b) Make de(1) set-uid "root". This is the way to go, IF you
|
---|
79 | are running a Minix system that has NO ACCESS from the
|
---|
80 | outside. This allows anyone to execute "de -r file", but only
|
---|
81 | root to use "de /dev/hd3". De(1) does some checking when
|
---|
82 | retrieving lost blocks, eg. making sure they really are
|
---|
83 | free blocks and making sure the user owned the i-node.
|
---|
84 | BUT, file system information has been lost when the file
|
---|
85 | was unlink(2)'ed, so de(1) can not be 100% sure that a
|
---|
86 | recovered block really belonged to the user. THIS IS A
|
---|
87 | SECURITY HOLE. [Since the only access to my machine is from
|
---|
88 | observable terminals and their associated humans, I run
|
---|
89 | de(1) as set-uid root.]
|
---|
90 |
|
---|
91 | (c) Keep the disks rw-------, and don't set-uid de(1). This
|
---|
92 | means that only the super-user can recover lost files.
|
---|
93 | So, if you accidently "rm", you must tell the system
|
---|
94 | administrator to "su" and recover your file, (be sure to
|
---|
95 | inform the other users to stop whatever they are doing
|
---|
96 | until the file is restored).
|
---|
97 |
|
---|
98 |
|
---|
99 | INSTALLATION
|
---|
100 |
|
---|
101 | - Install de.1 in /usr/man/cat1.
|
---|
102 |
|
---|
103 | - Install the files: Makefile, README, de.h, de.c, de_stdin.c,
|
---|
104 | de_stdout.c, de_diskio.c and de_recover.c in commands/de.
|
---|
105 | Add -F and -T. to the Makefile, if necessary.
|
---|
106 |
|
---|
107 | - "make" de(1). If a header file is not found, don't worry:
|
---|
108 | You probably have it somewhere, just link it to what de(1)
|
---|
109 | is looking for. This program also requires the subroutine
|
---|
110 | tolower(3), see EFTH MINIX report #50, if you don't have it.
|
---|
111 |
|
---|
112 | - Do you really want set-uid root on de?
|
---|
113 |
|
---|
114 | - Patch the files fs/path.c, fs/link.c and fs/open.c. If
|
---|
115 | you don't patch the file system then the recover option
|
---|
116 | "-r" and associated commands ('x' and 'X') will not work,
|
---|
117 | but de(1) is still functional and useful.
|
---|
118 |
|
---|
119 | - "make" a new fs, using -DRECOVER. Rebuild a boot diskette.
|
---|
120 |
|
---|
121 |
|
---|
122 | USING DE(1) FOR THE FIRST TIME
|
---|
123 |
|
---|
124 | De(1) starts up in "word" mode at block 0 of the specified
|
---|
125 | device. Hit the PGDN (or space bar) a few times, observing
|
---|
126 | all the information on the screen. Each PGUP/PGDN moves to
|
---|
127 | the next 1024 byte block, (de(1) only knows about 1 block per
|
---|
128 | zone file systems). Note that "word" mode only displays 32
|
---|
129 | bytes at a time, so you are only observing the first 32 bytes
|
---|
130 | in the first few blocks when you skip using PGDN.
|
---|
131 |
|
---|
132 | Now go back to block 3, (zone bit map), using "g 3 ENTER".
|
---|
133 | Change to "map" mode "v m", and then use the down arrow key
|
---|
134 | to check each 2 Megs in the zone bit map.
|
---|
135 |
|
---|
136 | Now change to "block" mode using "v b". And go to some data
|
---|
137 | block, eg. "g 1000 ENTER". Use PGUP/PGDN to see what data
|
---|
138 | is in each nearby block.
|
---|
139 |
|
---|
140 | Remember 'h' gives you a help page.
|
---|
141 |
|
---|
142 | Try some more commands, for example: 'END', 'I', '/'.
|
---|
143 | (Note: searching through a whole disk under Minix takes a
|
---|
144 | long time: 30-60 seconds per megabyte, depending on your
|
---|
145 | machine, drive and controller, [Minix is embarrassingly slow].)
|
---|
146 |
|
---|
147 | Don't worry about looking at a mounted device, you must specify
|
---|
148 | the "-w" option before the 's' command is operational, and
|
---|
149 | this command is the only one which will try to modify the
|
---|
150 | contents of the device.
|
---|
151 |
|
---|
152 |
|
---|
153 | MINIX-ST
|
---|
154 |
|
---|
155 | Please contact me if you are interesting in attempting a port
|
---|
156 | to MINIX-ST.
|
---|