Mercurial > hg > Members > kono > nitros9-code
comparison docs/articles/diskcrash.article @ 470:6e1cff14e8c4
Article about recovering from disk crash
author | roug |
---|---|
date | Sat, 05 Oct 2002 16:08:53 +0000 |
parents | |
children | ce6c1122bee6 |
comparison
equal
deleted
inserted
replaced
469:6b15b51ee3ba | 470:6e1cff14e8c4 |
---|---|
1 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> | |
2 <!-- The author has not been contacted about adding this article to the | |
3 documentation set. | |
4 --> | |
5 <article> | |
6 <articleinfo> | |
7 <author><firstname>Dave</><surname>Gantz</></author> | |
8 <title>Arrgh!!!!! My disk crashed, now what do I do?</title> | |
9 </articleinfo> | |
10 <para> | |
11 Fixing crashed disks or at least recovering data from crashed disks can | |
12 be a time consumming ordeal which is why the best recommendation is to | |
13 ALWAYS keep current backups or DON'T use the disk at all if it is your | |
14 only copy. However, crashed disks do not have to mean lost data if you | |
15 know how to go about recovering the data. | |
16 </para> | |
17 <para> | |
18 Thats what this article is all about and comes as a result of the | |
19 three crashed disks I've had this past week as well as Chris Spry's | |
20 current predicament. I have co-written one other article on this | |
21 topic, but that pertained more specifically to boot disk problems. | |
22 (See the OS9 Newletter, Volume III Issue 11B, November 30, 1992) | |
23 </para> | |
24 <para> | |
25 You'll be needing a few tools handy to follow along with this article | |
26 and if your planning to just practice for the eventuallity of a | |
27 crashed disk then for God sakes use a backup of something. | |
28 </para> | |
29 <para> | |
30 ------------------------------Tool List-------------------------------- | |
31 </para> | |
32 <para> | |
33 OS9 Level II Manual, the big thick one that comes with the OS9 Level II | |
34 disks. | |
35 </para> | |
36 <para> | |
37 DED -- Copyright 1987 by Doug DeMartinis -- preferably the edition below | |
38 </para> | |
39 <screen width="80"> | |
40 Header for: dEd This edition has a patch made to it | |
41 Module size: $17A2 #6050 so that it will recognize and | |
42 Module CRC: $299A3F (Good) identify the Bit Allocation Map or | |
43 Hdr parity: $8F BAM for short. The BAM is also | |
44 Exec. off: $0665 #1637 sometimes called DAM or Disk | |
45 Data Size: $0316 #790 Allocation Map.... | |
46 Edition: $05 #5 | |
47 Ty/La At/Rv: $11 $82 Besides its the one I use. You could | |
48 Prog mod, 6809 obj, re-en, R/O also use Qtip, but displays will differ | |
49 </screen> | |
50 <para> | |
51 A screen dump utility of some sort would also come in handy for this | |
52 exercise in avoiding futility. See the end of this article for | |
53 suggested files and source(s). | |
54 </para> | |
55 <para> | |
56 Now to dive in there and rescue Data <Grin>......... | |
57 </para> | |
58 <para> | |
59 | |
60 The first thing will cover is the breakdown of Logical Sector Number | |
61 zero on any OS9 disk, as well as the invocation of DED. All numbers | |
62 with a preceding $ are in hexadecimal (base 16) and others will be | |
63 in decimal (base 10). | |
64 </para> | |
65 <para> | |
66 To invoke DED for this excercise type the following from any OS9 | |
67 prompt on any 80x24 or 80x25 text screen or graphics screen with | |
68 stdfonts merged. | |
69 </para> | |
70 <screen> | |
71 OS9: DED /Dx@ (where x = the drive number with the disk | |
72 to be worked on in it.) | |
73 </screen> | |
74 <note> | |
75 <para> | |
76 The @ in the above command allows us to open any disk just as | |
77 if it were a file by itself, thus allowing us to work with | |
78 any and all data the disk contains with the exception of | |
79 high density disks in most cases. | |
80 </para> | |
81 </note> | |
82 <para> | |
83 Here is an example of my LSN $00. Offsets (Relative Addresses) are | |
84 read as LSN+left most column+top row. See the ** in the last row? | |
85 This would be read as LSN or $00+column or $70+top row or $04 or a | |
86 total offset of $0074. If we were on sector 1 then it would be $0174. | |
87 The definitions of the important bytes follow the excerpt. Also see page | |
88 5-2 in the technical reference section of the OS9 Level II manual. | |
89 </para> | |
90 <screen width="80"> | |
91 ------------------------------------------------------------------------ | |
92 LSN=$00 00 | |
93 | |
94 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E | |
95 00: 00 0B D0 12 01 7A 00 01 00 00 03 00 00 FF D4 E3 ..P..z....... Tc | |
96 10: 07 00 12 00 00 00 00 00 00 00 5D 03 08 10 2D 52 ..........]...-R | |
97 20: 69 42 42 53 20 43 6F 6D 6D 61 6E 64 73 20 44 69 iBBS Commands Di | |
98 30: 73 EB 00 00 00 00 00 00 00 00 00 00 00 00 00 01 sk.............. | |
99 40: 01 03 21 03 00 54 02 00 00 12 00 12 03 09 00 61 ..!..T.........a | |
100 50: 40 00 00 00 00 00 00 00 00 00 00 00 00 74 2D 00 @............t-. | |
101 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
102 70: 00 00 00 00 ** 00 00 00 00 00 00 00 00 00 00 00 ................ | |
103 | |
104 | |
105 Relative Size | |
106 Name Address (Bytes) Use or Function Mine | |
107 ---------------------------------------------------------------------- | |
108 DD.TOT $00 3 Number of sectors on disk. $000BD0 | |
109 DD.TKS $03 1 Track size in sectors. $12 | |
110 DD.MAP $04 2 Number of bytes in allocation map. $017A | |
111 DD.BIT $06 2 Number of sectors per cluster $0001 | |
112 DD.DIR $08 3 Starting Sector of of Root Dir $000003 | |
113 DD.OWN $0B 2 Owners ID number (usually 0) $0000 | |
114 DD.ATT $0D 1 Disk attributes $FF | |
115 DD.DSK $0E 2 Disk identification (internal use) $D4E3 | |
116 DD.FMT $10 1 Disk Format, bit mapped $07 | |
117 DD.SPT $11 2 Number of sectors per track $0012 | |
118 DD.RES $13 2 Reserved for future use $00 | |
119 DD.BT $15 3 Starting sector of bootstrap file $000000 | |
120 DD.BSZ $18 2 Size of bootstrap file $0000 | |
121 DD.DAT $1A 5 Date of creation (Y:M:D:H:M) $5D0308102D | |
122 DD.NAM $1F 32 Disk name, last char has MSB set see above | |
123 DD.OPT $3F Path descriptor options | |
124 </screen> | |
125 <para> | |
126 Probably the most important byte to us here are the bytes at offsets | |
127 $08, $09, and $0A which tell us where the root directory begins. | |
128 Speaking of which, that is our next stop in the CoCo Zone.... | |
129 </para> | |
130 <screen width="80"> | |
131 | |
132 LSN=$03 03 | |
133 | |
134 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E | |
135 00: BF 00 00 5D 04 1A 0D 0A 02 00 00 01 20 00 00 00 ?..]........ ... | |
136 10: 00 00 04 00 07 00 00 00 00 00 00 00 00 00 00 00 ................ | |
137 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
138 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
139 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
140 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
141 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
142 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
143 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
144 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
145 A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
146 B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
147 C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
148 D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
149 E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
150 F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
151 </screen> | |
152 <para> | |
153 Well here we are exactly where LSN $00 said the root directory starts, | |
154 at LSN $000003. But where are the filenames, you ask? Well they | |
155 start on the next sector. | |
156 </para> | |
157 <para> | |
158 This sector is called a File Descriptor sector or FD for short. Every | |
159 file or directory on an OS9 disk has one of these. This is why you can't | |
160 store a true 360K worth of files and user data on a DSDD 40 track drive | |
161 for example. | |
162 </para> | |
163 <para> | |
164 For our purpose I'm going to skip the explanation of the first 16 bytes | |
165 and get on with what we need from this sector to start finding data. | |
166 </para> | |
167 <para> | |
168 Starting with offset $10 ($0310) is what is called a segment list. This | |
169 segment list tells OS9 where a file or directory on disk is located and | |
170 how many sectors that file or directory occupies. There are 48 of these | |
171 segments avaiable each being 5 bytes wide. For you programmers, think of | |
172 it as a two dimensional array such as: DIM segment(48,5). What this | |
173 means is that your file or directory can occupy space in 48 different | |
174 locations on disk if it is badly fragmented. | |
175 </para> | |
176 <para> | |
177 In this case mine only occupies one segment starting at LSN $0400 and | |
178 is 7 sectors in size. So guess where our trip through the OS9 disk | |
179 takes us next? If you said sector 4 or offset $0400 your right! | |
180 </para> | |
181 <screen width="80"> | |
182 | |
183 LSN=$04 04 | |
184 | |
185 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E | |
186 00: 2E AE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
187 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 ................ | |
188 20: AE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
189 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 ................ | |
190 40: 43 4D 44 D3 00 00 00 00 00 00 00 00 00 00 00 00 CMDS............ | |
191 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B ................ | |
192 60: 53 59 D3 00 00 00 00 00 00 00 00 00 00 00 00 00 SYS............. | |
193 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 0A ................ | |
194 80: 72 69 62 62 73 2E 63 66 E7 00 00 00 00 00 00 00 ribbs.cfg....... | |
195 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 2F .............../ | |
196 A0: 72 69 62 62 73 67 EF 00 00 00 00 00 00 00 00 00 ribbsgo......... | |
197 B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 AC ..............., | |
198 C0: 4D 45 4E 55 D3 00 00 00 00 00 00 00 00 00 00 00 MENUS........... | |
199 D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 42 ...............B | |
200 E0: 4C 4F 47 D3 00 00 00 00 00 00 00 00 00 00 00 00 LOGS............ | |
201 F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 09 A3 ...............# | |
202 </screen> | |
203 <para> | |
204 Well here we are, finally. The root directory. Again for our purposes | |
205 I'm going to skip the first 32 bytes of this sector. | |
206 </para> | |
207 <para> | |
208 Each entry for each file or directory is composed of 32 bytes. 29 of | |
209 them represent the file or directory name while the last 3 tell where | |
210 to find that individual files or directories FD is located on the disk. | |
211 Looking at this perhaps you can see the importance of having your | |
212 directory names in ALL UPPERCASE and your file names in all lowercase. | |
213 </para> | |
214 <para> | |
215 In this example I have 4 directories (CMDS, SYS, MENUS, and LOGS) and | |
216 two files (ribbs.cfg and ribbsgo). Lets start with a file, ribbsgo | |
217 in this case. | |
218 </para> | |
219 <para> | |
220 Its entry starts at offset $A0 ($04A0) and ends at $BF ($04BF). The | |
221 first 29 bytes as I said are for the file name, the last character of | |
222 which has its Most Significant Bit set to mark the end of the file | |
223 name. The last 3 bytes tell us where to find the FD for ribbsgo which | |
224 is $0002AC or $02AC since the Most Significant Byte is 0. | |
225 </para> | |
226 <para> | |
227 So this is where we are off to next, sector $02AC. | |
228 </para> | |
229 <screen width="80"> | |
230 | |
231 LSN=$2AC 684 | |
232 | |
233 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E | |
234 00: 0B 00 00 5D 04 19 0C 11 01 00 00 04 A5 5D 04 19 ...]........%].. | |
235 10: 00 02 AD 00 05 00 00 00 00 00 00 00 00 00 00 00 ..-............. | |
236 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
237 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
238 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
239 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
240 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
241 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
242 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
243 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
244 A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
245 B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
246 C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
247 D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
248 E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
249 F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
250 </screen> | |
251 <para> | |
252 Ok here we are. This FD is very similar to the one we examined on our | |
253 way to the root directory. It contains all the same information and | |
254 takes on exactly the same format as the FD for the root directory except | |
255 that this time we are talking about a file and not a directory. | |
256 </para> | |
257 <para> | |
258 It tells us that our file, ribbsgo, begins at sector $0002AD or $02AD and | |
259 occupies 5 sectors. So that is where we will go next. For the purposes | |
260 I will only include the first and last sectors in this text as examples. | |
261 I forgot to mention that we have proceeded through pages 5-3, 5-4, and | |
262 most of 5-5 of the technical reference section at this point. | |
263 </para> | |
264 <screen width="80"> | |
265 | |
266 LSN=$2AD 685 | |
267 | |
268 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E | |
269 00: 6F 6E 65 72 72 20 67 6F 74 6F 20 66 61 74 61 6C onerr goto fatal | |
270 10: 65 72 72 6F 72 0D 63 64 20 2F 64 64 0D 63 78 20 error.cd /dd.cx | |
271 20: 2F 64 64 2F 63 6D 64 73 0D 76 61 72 2E 30 3D 22 /dd/cmds.var.0=" | |
272 30: 22 0D 64 69 73 70 6C 61 79 20 30 43 20 30 32 20 ".display 0C 02 | |
273 40: 33 34 20 32 32 20 31 42 20 33 32 20 30 33 20 30 34 22 1B 32 03 0 | |
274 50: 35 20 32 30 0D 65 63 68 6F 20 50 6C 65 61 73 65 5 20.echo Please | |
275 60: 20 49 6E 73 65 72 74 20 79 6F 75 72 20 4F 53 39 Insert your OS9 | |
276 70: 20 42 6F 6F 74 20 44 69 73 6B 20 69 6E 20 2F 44 Boot Disk in /D | |
277 80: 30 2E 0D 64 69 73 70 6C 61 79 20 30 32 20 34 45 0..display 02 4E | |
278 90: 20 32 45 20 31 42 20 32 32 20 30 31 20 31 41 20 2E 1B 22 01 1A | |
279 A0: 31 30 20 31 39 20 30 33 20 30 30 20 30 31 20 30 10 19 03 00 01 0 | |
280 B0: 31 20 30 32 20 32 36 20 32 32 0D 65 63 68 6F 20 1 02 26 22.echo | |
281 C0: 50 72 65 73 73 20 41 6E 79 20 4B 65 79 0D 76 61 Press Any Key.va | |
282 D0: 72 2E 30 0D 2A 6E 6F 6B 65 79 70 72 65 73 73 0D r.0.*nokeypress. | |
283 E0: 69 66 20 25 30 3D 22 22 0D 67 6F 74 6F 20 6E 6F if %0="".goto no | |
284 F0: 6B 65 79 70 72 65 73 73 0D 65 6E 64 69 66 0D 64 keypress.endif.d | |
285 </screen> | |
286 <para> | |
287 Well we made it! The actual file data. There are no special codes or | |
288 anything of that nature here to explain. Just the ASCII codes for the | |
289 contents of the ribbsgo script file. With program modules it would be | |
290 the hexadecial representations of the commands and variables and such | |
291 within the program. | |
292 </para> | |
293 <para> | |
294 As I said there are 5 consecutive sectors (or 1 segment) that this file | |
295 occupies but I will only include this and the last sector, because | |
296 everything in between is technically the same. | |
297 </para> | |
298 <screen width="80"> | |
299 | |
300 LSN=$2B1 689 | |
301 | |
302 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E | |
303 00: 6F 63 6D 64 73 0D 67 6F 74 6F 20 2B 65 78 69 74 ocmds.goto +exit | |
304 10: 0D 2A 66 61 74 61 6C 65 72 72 6F 72 0D 65 63 68 .*fatalerror.ech | |
305 20: 6F 20 45 72 72 6F 72 20 25 2A 20 69 6E 20 52 69 o Error %* in Ri | |
306 30: 42 42 53 47 6F 2E 20 20 46 69 78 20 61 6E 64 20 BBSGo. Fix and | |
307 40: 74 72 79 20 61 67 61 69 6E 0D 67 6F 74 6F 20 2B try again.goto + | |
308 50: 65 78 69 74 0D 2A 66 69 6E 69 73 68 75 70 0D 64 exit.*finishup.d | |
309 60: 69 73 70 6C 61 79 20 31 62 20 32 33 0D 72 69 62 isplay 1b 23.rib | |
310 70: 62 73 6D 61 69 6E 20 23 31 36 4B 20 3C 3E 3E 3E bsmain #16K <>>> | |
311 80: 2F 77 37 26 0D 2A 65 78 69 74 0D 64 69 73 70 6C /w7&.*exit.displ | |
312 90: 61 79 20 31 62 20 33 32 20 30 30 20 30 35 20 32 ay 1b 32 00 05 2 | |
313 A0: 31 20 30 43 0D 00 00 00 00 00 00 00 00 00 00 00 1 0C............ | |
314 B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
315 C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
316 D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
317 E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
318 F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
319 </screen> | |
320 <para> | |
321 Ok this is the last sector of the ribbsgo file. The important thing | |
322 to mention here is that this file does not contain essential information | |
323 throughout the entire sector. The file ends with a carriage return | |
324 ($0D) at offset $A4 or $355 taking into account for the sector we are on. | |
325 See all the $00's following that carriage return? We don't need them. | |
326 I'll explain how to get rid of them later, for now its enough for you to | |
327 know that there not needed. In some cases those extra bytes may contain | |
328 $E5's which is the value that OS9 writes to each sector when you format | |
329 a disk. | |
330 </para> | |
331 <para> | |
332 Now that you have a basic understanding of how an OS9 disk is put | |
333 together to become an effective storage medium we can go on and discuss | |
334 how we are gonna go about recovering data. | |
335 </para> | |
336 <screen> | |
337 | |
338 Up/Down Arrows Read & display Next/Previous sector | |
339 <CR> Clean up the screen display | |
340 * Restart | |
341 $ Fork a SHELL (Ctrl-BREAK to return) | |
342 * A Append displayed sector to output file | |
343 * C Close output file | |
344 D Diddle (adjust) file length | |
345 E Edit the displayed sector | |
346 F Find a byte or text string (BREAK aborts) | |
347 H Help screen (also use '?') | |
348 L Link to a module - List all modules | |
349 * N Next occurrence of byte(s) or string (Find) | |
350 * O Open a file for output (use with Append) | |
351 P Push current sector onto stack | |
352 Q Quit dEd - Exit to OS9 | |
353 R Remove and display a sector from stack | |
354 * S Skip to given sector (sector # in hex) | |
355 U Unlink from module | |
356 V Verify all modules in file | |
357 W Write the sector back to the disk | |
358 X eXpert mode toggle on/off | |
359 Z Zap (fill in) the sector displayed | |
360 </screen> | |
361 <para> | |
362 What you see above is the built in help from DED. The options we will | |
363 be using most often are the starred options above. | |
364 </para> | |
365 <para> | |
366 * S Skip to given sector (sector # in hex) | |
367 </para> | |
368 <para> | |
369 This option will let us skip to the sector(s) that we have identified | |
370 from the file desciptors (FD's) and will speed things up considerably. | |
371 </para> | |
372 <para> | |
373 * O Open a file for output (use with Append) | |
374 </para> | |
375 <para> | |
376 Once we have found the first sector of the data we wish to recover | |
377 we can use this option to open a path to another disk (or RAM disk) | |
378 on which we will store the recovered data. Since we will have to | |
379 do some editing on the recovered file a RAM disk is recommended. | |
380 </para> | |
381 <para> | |
382 * A Append displayed sector to output file | |
383 </para> | |
384 <para> | |
385 Once we have opened the destination file for the data we are trying | |
386 to recover this option will let us add the current sector to that | |
387 new file. You use this until you either reach the end of that | |
388 particular segment (Another FD will most likely be displayed at the | |
389 end of a segment or file) or the end of the file. | |
390 </para> | |
391 <screen> | |
392 | |
393 Up/Down Arrows Read & display Next/Previous sector | |
394 <CR> Clean up the screen display | |
395 * Restart | |
396 $ Fork a SHELL (Ctrl-BREAK to return) | |
397 * A Append displayed sector to output file | |
398 * C Close output file | |
399 D Diddle (adjust) file length | |
400 E Edit the displayed sector | |
401 * F Find a byte or text string (BREAK aborts) | |
402 H Help screen (also use '?') | |
403 L Link to a module - List all modules | |
404 * N Next occurrence of byte(s) or string (Find) | |
405 * O Open a file for output (use with Append) | |
406 P Push current sector onto stack | |
407 Q Quit dEd - Exit to OS9 | |
408 R Remove and display a sector from stack | |
409 * S Skip to given sector (sector # in hex) | |
410 U Unlink from module | |
411 V Verify all modules in file | |
412 W Write the sector back to the disk | |
413 X eXpert mode toggle on/off | |
414 Z Zap (fill in) the sector displayed | |
415 </screen> | |
416 <para> | |
417 ------------------------------------------------------------------------- | |
418 * C Close output file | |
419 </para> | |
420 <para> | |
421 Now that we have recovered the data or file we must close the file before | |
422 doing anything else with it. | |
423 </para> | |
424 <para> | |
425 * F Find a byte or text string (BREAK aborts) | |
426 * N Next occurrence of byte(s) or string (Find) | |
427 </para> | |
428 <para> | |
429 If you know specific words or byte sequences to look for within the data | |
430 or file your trying to recover then these two are handy for locating | |
431 those words or sequences. | |
432 </para> | |
433 <para> | |
434 Well we've recovered a file or data. There is, if you recall, quite | |
435 likely some extra unwanted bytes. What do we do to get rid of them? | |
436 Thats easy, again using DED (and ident for program modules) we | |
437 diddle with the file length. Now you won't be dealing with real | |
438 sector numbers, just the relative sector offset from the beginning | |
439 of the file. In this case it will read LSN $00 thru $04 although | |
440 we may not actually be on sectors 0-4. | |
441 </para> | |
442 <para> | |
443 | |
444 At any rate you need to find the last relative sector of the file | |
445 probably using the arrow keys to scroll through it. When you reach | |
446 the last sector look and the LSN, left column number, and top row | |
447 number and determine the offset for the last byte (the carriage | |
448 return) and add 1. In this example that last byte will be at | |
449 $04A4 then add 1 giving us $04A5. | |
450 </para> | |
451 <para> | |
452 Hit D for Diddle with file length. It will tell you the old length | |
453 and ask for the new length. Type it in ($04A5 for this example) and | |
454 press enter. You will see the extra bytes disappear in front of you. | |
455 </para> | |
456 <para> | |
457 Now hit Q to quit and answer 'Y' and you have just recovered your first | |
458 file. Give yourself a pat on the back, get a cup of coffee and dig in | |
459 cause your gonna be dancin on the keyboard for several hours to | |
460 completely recover one DSDD disk. | |
461 </para> | |
462 <para> | |
463 It took me roughly 24 hours to recover all data from 3-3 1/2" 756K | |
464 floppies (I have mine formatted for 84 tracks double side rather than | |
465 the usual 80 tracks double side <Evil Grin>). | |
466 </para> | |
467 <para> | |
468 For some disks your directories will get trashed and there is little | |
469 one can do to recover the directories (that I know of) in which case | |
470 you will have to sit there with the arrow keys in DED identifying | |
471 FD's and locating the 'lost' files. This is what took me so long, | |
472 my directories got trashed. | |
473 </para> | |
474 <para> | |
475 This is, as I said, a time consumming method but I know of no program | |
476 that will do it for you. If I ever get some of my other programming | |
477 projects finished I intend to write something, but for now this | |
478 method will have to do. | |
479 </para> | |
480 <para> | |
481 Good luck recovering that lost data! | |
482 </para> | |
483 </article> |