|
|
1.1 root 1: dmsdos.doc
2:
3: This is the main documentation for the DMSDOS CVF module. 18AUG1998
4:
5: ------------------------------------------------------------------------------
6:
7: This is version 0.9.1.5.
8:
9: This version has been designed for Linux 2.0.35, but it should run with all
10: kernels from 2.0.29 to 2.0.35. It very likely also works with older ones,
11: but it has at least been reported to fail with 2.0.0. For the 2.1.xx series
12: you need at least 2.1.80 though it is recommended to use 2.1.94 or newer.
13: Has 2.2 been released yet? :)
14:
15: Installation notes see file ../INSTALL.TXT.
16:
17:
18: Contents:
19:
20: 1. DMSDOS capabilities
21: 2. Restrictions
22: 3. Mount options
23: 4. Kernel messages [moved to file messages.doc]
24: 5. Installation [moved to file ../INSTALL.TXT]
25: 6. Troubleshooting [moved to file troubleshooting.doc]
26: 7. Defragment procedures
27: 8. How to contribute to dmsdos development
28: 9. The external dmsdos utility 'dutil'
29: 10. The dmsdos daemon 'dmsdosd'
30: 11. The dmsdos library 'libdmsdos.a'
31: 12. The dmsdos filesystem checker 'dmsdosfsck'
32: 13. Authors and email addresses
33:
34: ------------------------------------------------------------------------------
35:
36:
37: 1. DMSDOS capabilities
38: ------------------------------------------------------------------------------
39:
40: * 'mount'
41: - doublespace/drivespace compressed msdos 6.x partitions (read-write),
42: - doublespace and drivespace 3 compressed win95 partitions (read-write),
43: - and stacker 3 and 4 compressed partitions (read-write)
44: under Linux via the loopback block device
45: * supports compressed floppies (yes, and even cdroms[**])
46: * can use umsdos extensions in compressed partitions
47: * when writing, compression level may be selected by user
48: * supports standard text conversion like the msdos driver
49: * simple internal fs check on mount (can be switched off)
50: * dmsdos daemon for compressing data in the background
51: * works with all drivers that base on the fat driver, also with FAT32
52: * stand-alone dmsdos library for CVF related programming (experimental)
53: * stand-alone dmsdosfsck (experimental)
54:
55: [**] No, don't really think of burning a CVF onto a cdrom. Dos cannot read
56: it unless you copy it to your hard disk. REALLY BAD. Linux+dmsdos can.
57:
58: In detail:
59:
60: Dos compressed partitions are always stored inside an uncompressed host
61: partition as large files (CVFs, Compressed Volume Files). In order to
62: access them from Linux, you need
63: * the CVF-FAT interface, which is present in kernels 2.1.80 and newer
64: and must be patched into the 2.0.xx kernel series - the patches are
65: included in this dmsdos release
66: * and the loopback block device.
67: The latter lets you mount a file as a filesystem. You must compile the
68: loopback block device into your kernel or as a loadable module in order
69: to use this feature.
70:
71: This version works with compressed hard disks and with compressed floppies.
72: It has been tested successfully with MS-DOS 6.2 Doublespace and MS-DOS 6.22
73: Drivespace compressed formats. win95 doublespace is supported, also the
74: drivespace 3 format from the Micro$ Plus package (rumors tell that this
75: package has been integrated into Win95OSR2). Stacker version 3 and 4
76: are supported too. Dmsdos can even mount CVFs from cdrom (Dos can't).
77:
78: Francesco Potorti([email protected]) has reported that dmsdos
79: also mounts Superstore compressed filesystems. I can't test this as I
80: don't have Superstore. They are recognized as old Dos 6.0 Doublespace
81: format. I'm interested in further reports about this. I still can't
82: believe that M$ simply copied (bought?) Superstore and renamed it to
83: Doublespace without further modifications...
84:
85: Dmsdos runs now *below* the msdos/fat filesystem. This makes it compatible
86: with all fat based filesystems including FAT32, NLS and other things :)
87:
88: Dmsdos does a lot of internal caching in order to reach a reasonable speed
89: with a compressed (and really badly organised, but simple) filesystem. As
90: a side effect, this cache may eat a lot of system memory (you can change the
91: size limit).
92:
93: Dmsdos was initially inspired by the THS filesystem (once found under
94: ftp://sunsite.unc.edu/pub/Linux/system/Filesystems/dosfs/thsfs.tgz)
95: written 1994 by Thomas Scheuermann (email address out of date), which was
96: the first filesystem available under Linux that could read some CVFs.
97:
98: When mounting a compressed filesystem, the dmsdos driver does some quick
99: and simple consistency checking. If it finds a serious filesystem error
100: that might cause further damage on write access, it sets the compressed
101: filesystem to read-only mode. The filesystem check can be switched off if
102: you don't like it.
103:
104: The dmsdos daemon included in this release can speed up dmsdos write
105: access on systems that usually run at high processor load using delayed
106: compression in the background when the system is idle. I recommend to
107: use it if you are going to write much to compressed partitions from Linux
108: and need the processor time mostly for other tasks. The daemon also has a
109: significant effect on dmsdos memory management which might be important
110: for systems with little memory (well yes, dmsdos *is* a memory monster
111: that can eat up to 2MB of system memory for caching in the default
112: configuration). See chapter 'The dmsdos daemon' for details.
113:
114: The dmsdos library is a stand-alone tool for raw CVF programming.
115: 'Stand-alone' means that it works independently from the dmsdos kernel
116: module, on *raw* CVFs (i.e. those large files lying around in an
117: uncompressed host partition). It's the same source code, though, just
118: compiled in a slightly different way. :)
119:
120:
121: 2. Restrictions
122: ------------------------------------------------------------------------------
123:
124: (See also file BUGS for a list of known bugs.)
125:
126: Performance degradiation (well, not really bad in most cases...)
127: ------------------------
128:
129: Access to compressed filesystems slows down your system. This is a fact
130: that results from additional time needed to decompress or compress the
131: data and to maintain additional filesystem structures. It's an untrue
132: rumor (sometimes spread by compressed filesystem software sellers) that
133: compressed filesystems speeded up slow ISA bus systems because of the
134: smaller amount of data to be transferred through the slow ISA bus -
135: there's too much overhead otherwhere.
136:
137: Though most time-consuming actions like compression and finding free
138: sectors have been greatly improved since dmsdos 0.8.0, there are still
139: sudden system freezes reported. Reasons for this include (in rising order):
140:
141: * Decompressing the data takes some time, but that is supposed to be
142: minimal.
143:
144: * Badly written programs issuing many redundant reads. Such programs
145: kill performance on every filesystem, but it's extremely bad under
146: dmsdos because of the filesystem layout.
147:
148: * Large files, especially accessing them near their end. Again the
149: filesystem layout is the cause. (How do you find the end of a file
150: in a fat filesystem? Right, read the fat. And if the file is large
151: there are tons of fat access necessary to find the end.)
152:
153: * Huge directories. It's again the fat access problem like above. (In
154: 2.1.xx kernels it's faster due to the gain from dentry caching.)
155:
156: * Compression on write access. Compression speed depends heavily on
157: the data to compress. In general you can say, the better the data
158: compress the faster the compression.
159:
160: * Compressing incompressible data. This only wastes time since the
161: driver throws the compressed data away and uses the uncompressed
162: data if the compressed data turn out to be in fact larger. The only
163: thing you can do against this is disabling compression if you know
164: the data you want to write don't compress any more (e.g. when
165: writing already compressed files).
166:
167: * Highly fragmented (at internal MDFAT level) filesystems. This
168: puts the search algorithm that searches for free space in a long
169: loop finding a fitting hole for data to be written. This is probably
170: the most important reason for sudden system freezes. It's also the
171: most annoying one since there's really nothing to do against it.
172: This kind of fragmentation is normal to every compressed filesystem
173: and cannot be avoided. The more you write the worse it becomes.
174: (See below for details on that kind of fragmentation. Note that it's
175: very different from that FAT level fragmentation known from FAT
176: based filesystems.)
177:
178: Compression and free sector finding may be fine-tuned with some of
179: the dmsdos options. This is not really explained here, see mount
180: options cf:xx and speedup:xx.
181:
182: Dmsdos never freezes the system totally, it periodically unfreezes even on
183: extremely hard disk access. You *can* login into another console and you
184: *can* enter commands there. No keystroke gets lost though you may not see
185: a reaction on the console immediately, but after some seconds you should
186: see something. Just be warned and prepared :)
187:
188: Compressed formats
189: ------------------
190:
191: The scheme I named the compression methods is simply this: Take the first
192: four bytes of a compressed cluster. For the DS-0-2 method, for example,
193: they are 'D','S',0x00,0x02.
194:
195: Format: Used by: Readable: Writable:
196: DS-0-0 win95 doublespace yes yes
197: DS-0-1 never reported to exist works in theory :)
198: DS-0-2 msdos 6.2 doublespace yes yes
199: JM-0-0 msdos 6.22 drivespace yes yes
200: and win95 drivespace 3 yes yes
201: JM-0-1 win95 drivespace 3 'High' yes yes
202: SQ-0-0 win95 drivespace 3 'Ultra' yes yes
203: uncompressed all versions yes yes
204: (no header) Stacker 3 yes yes
205: 0x81-0 Stacker 4 yes yes
206:
207: Yes, meanwhile all currently known methods are supported (hmm, why is this
208: still listed under restrictions...)
209:
210: Fragmented clusters in drivespace 3 volumes
211: -------------------------------------------
212:
213: They can be read since dmsdos 0.8.1pl5. They can be written since
214: 0.9.0pl10, but writing fragmented clusters is supposed extremely
215: experimental. If dmsdos needs to rewrite data that are stored in a
216: fragmented cluster it first deletes the old data and saves the new
217: data in the usual linear order. Fragmentation writes are only done
218: if the data do not fit on the disk in an unfragmented way. Currently,
219: dmsdos becomes VERY noisy when it writes fragmented clusters...
220: This is considered experimental and needs further testing. You can
221: currently switch off this feature by setting speedup bit#8 (this is
222: a mount option, see below).
223:
224: Fragmented and suballocated clusters in Stacker volumes
225: -------------------------------------------------------
226:
227: Of course, they can be read. But currently, they cannot be written.
228: If dmsdos needs to rewrite data that are stored in a fragmented or
229: suballocated cluster it currently deletes the old data and saves the new
230: data in the usual linear order. Fragmentation write may come soon,
231: suballocation write is more complex and currently considered not very
232: important for dmsdos. We'll see...
233:
234: Swapping to a file on the compressed partition
235: ----------------------------------------------
236:
237: Just No. It doesn't work. Don't bother me with ideas of swapping to a
238: compressed ram disk which would be a memory compressor... bah!
239: That's all gibberish, crap, and dogsh*t. I won't write code to support
240: this. You know very well that swapping has to be extremely fast, so use
241: a partition on your fastest disk for this purpose. Not a swapfile, and
242: never in a fat based filesystem (just imagine what a filesystem driver
243: has to do in order to access the *end* of a large file... yeah, tons
244: of fat access...)
245:
246: DOSEMU users attention
247: ----------------------
248:
249: You may have to unmount all fat based partitions before running
250: DOSEMU depending on your configuration. If DOSEMU is configured to use
251: wholedisk or partition access (this is often the case to let DOSEMU access
252: compressed partitions) there's a risk of destroying your compressed
253: partitions or crashing your system because of confused drivers.
254:
255: Let me explain why. Dmsdos does a lot of internal caching, but cache
256: contents won't be up to date if DOSEMU directly modifies the disk. This
257: confuses dmsdos and may mess up your data. On the other hand, dos
258: dblspace/drvspace.bin also has a kind of caching mechanism that gets
259: confused by the Linux dmsdos driver's write access. Confusion even
260: occurs if one party mounts read-only and the other mounts read-write.
261:
262: Note that it is always safe to redirect the compressed partitions with
263: lredir or emufs.sys. Refer to this table for configurations that are safe
264: (marked with +) and which are dangerous (marked with -):
265:
266: DOSEMU: Linux fat-based filesystems:
267: -------------- --------------------------------
268: not mounted mounted
269: mounted ro rw
270: wholedisk ro + + -
271: wholedisk rw + - -
272: partition ro + + -
273: partition rw + - -
274: lredir/emufs.sys ro/rw + +
275:
276: Memory mapping
277: --------------
278:
279: *Should* work. :^)
280:
281: Underlying dos filesystem limitations
282: -------------------------------------
283:
284: None. Really, they're gone since the CVF-FAT interface is used.
285:
286: Umsdos users warning
287: --------------------
288:
289: If you want to use umsdos-style long filenames in compressed filesystems,
290: use kernel 2.0.xx or get at least kernel 2.1.94.
291:
292: Win98 compatibility
293: -------------------
294:
295: Has someone tried? Just let me know :)
296:
297: Last but least
298: --------------
299:
300: Dmsdos has been written for dos/win95 compatibility. It's just a relict
301: from the time when I programmed some software that had to run both under
302: dos and Linux and I had to compress my drive because hard disk space was
303: rather expensive. Times and prices have changed a lot since then, but
304: dmsdos has still been improved for fun.
305:
306: If you don't need dos/win95 compatibility, i.e. if you want to compress
307: Linux-only data, let me say: DON'T DO IT. Clean up your disk, or buy a
308: larger one, but don't compress it. Really. Compress single files (e.g.
309: manpages) with gzip. Throw away the crap you don't need. Shrink your
310: dos partition or remove it completely :)
311:
312: If you still want to compress Linux data, dmsdos may not be the software
313: you want. The msdos filesystem is extremely unsuited for fast disk access,
314: umsdos suffers from it too. The CVF structure msdos uses is even more
315: unsuited, and the time required by msdos online compression may kill the
316: rest of Linux' performance on these filesystems.
317:
318: Just to let you know about some other online compression software for Linux:
319: There's a package 'double' available on sunsite for Linux online
320: compression. There are also compression patches for the ext2 filesystem
321: available under the name 'hufs' and 'e2compr'. I've also heard about a
322: 'zlibc' project which lets you access gzip compressed files as if they were
323: uncompressed - it works by a patched libc. Look at common Linux ftp sites.
324:
325: Like dmsdos, all those packages may have their specific advantages and
326: disadvantages. Some are said to be not 100% stable, but who can claim that
327: his software is really 100% stable :-) Please don't flame at me if the
328: packages don't do what you want - I haven't tested them and I don't know
329: much about their qualilty.
330:
331:
332: 3. Mount options
333: ------------------------------------------------------------------------------
334:
335: Summary:
336: --------
337:
338: The dmsdos driver currently recognizes the following options:
339:
340: comp:xxx, cf:xxx, bitfaterrs:xxx, loglevel:xxx, speedup:xxx
341:
342: (for backwards compatibility, also comp=xxx, cf=xxx, bitfaterrs=xxx and
343: loglevel=xxx, speedup=xxx are accepted)
344:
345: The xxx has to be replaced by an appropriate parameter, of course. All
346: options have to be specified separated by plus signs (not commas) in a list
347: in the mount command:
348: 'mount -t msdos -o cvf_options=option1+option2+option3 ...'.
349: Consider the string 'cvf_options=option1+option2+option3' as *one* FAT
350: driver option! For backwards compatibility, also a dot (.) is recognized
351: as option separator symbol.
352:
353: comp:xxx
354: The comp option selects which compression method to use for compressing
355: files when they are written to a compressed partition. The default value
356: (which is used if no comp option is specified) is hard-coded to guess.
357:
358: Don't get confused by this list. Dmsdos usually determines automatically
359: the right and, if there's a choice, the best compression for you (by
360: scanning the filesystem and analysing the compressed data written by
361: dos/win95). But if you explicitely tell dmsdos to use a specific
362: compression, the driver does what you tell it to do. So be careful.
363:
364: comp:no Selects no compression for write access i.e. all files written
365: to a compressed partition are stored in fact uncompressed.
366: This option may speed up write access, but doesn't make much
367: sense on a compressed filesystem (except for debugging).
368: comp:ds00 Selects DS-0-0 compressed format for write access. This is
369: win95 native format if you don't have drivespace 3. This
370: format may also be used for Stacker 3 and 4 (though not
371: recommended for them as it's not the native Stacker format).
372: comp:ds01 Obsolete. DS-0-1 has never been reported to exist. So what.
373: comp:ds02 Selects DS-0-2 compressed format for write access. This is
374: dos 6.0-6.2 (*not* 6.22) format. Under dmsdos, it is rather
375: identical to DS-0-0 except for the compression header.
376: comp:jm00 Selects JM-0-0 compressed format for write access. This is
377: dos 6.22 format and win95 drivespace 3 'Normal' format.
378: comp:jm01 Selects JM-0-1 compressed format for write access. This is
379: win95 drivespace 3 'High' format. Note that it is rather
380: identical to JM-0-0 in dmsdos (but not in win95).
381: comp:sq00 Selects SQ-0-0 compressed format for write access. This is
382: win95 drivespace 3 'Ultra' format. Only drivespace 3 is
383: known to be able to handle this format.
384: comp:sd3 Selects SD-3 compressed format for write access. This is
385: Stacker 3 format. It may be used for Stacker 3 and 4.
386: comp:sd4 Selects SD-4 compressed format for write access. This is
387: Stacker 4 standard format. It may only be used for Stacker 4.
388: comp:guess Tries to find out automatically which compression method
389: dos used to create the compressed partition and selects the
390: appropriate format. If guessing fails, no compression is used
391: and a message is printed in the syslog.
392:
393: WARNING: You *can* specify senseless options in the command line, for
394: example, mount a doublespace drive and select stacker compression.
395: You may end up in a mess in that case.
396:
397: NOTE: It's not true that JM-0-1 (Drivespace 3 'High') compresses better
398: than JM-0-0 (Drivespace 3 'Normal'), at least under dmsdos. Set the
399: compression effectivity with the cf:xx option. In fact, dmsdos uses the
400: same routine to compress DS-0-0, DS-0-1, DS-0-2, JM-0-0 and JM-0-1
401: (they are almost equal, so similar that only, for example, the meaning
402: of one bit is different or some constant offsets differ). It's just
403: true that SQ-0-0 is more powerful than the DS and JM formats, and also
404: SD-4 is more powerful than SD-3. Also, one can say that SD-3 has
405: something in common with the DS and JM formats. Yes, SD-4 and SQ-0-0
406: have some similarities, too, but I really can't say which one is best.
407:
408: cf:xx (where xx is a decimal number from 1 to 12)
409: Selects the compression effectivity and speed. Since compression
410: effectivity always runs in concurrence to speed, try some values and
411: watch what happens. 1 is fastest but least efficient compression, 12 is
412: most efficient but slowest compression. The default value can be selected
413: before compiling by 'make config' (note that the value minus 1 must
414: be specified there, i.e. the range is from 0 to 11 there).
415:
416: If the external dmsdos daemon is running, this option doesn't have an
417: effect because the daemon doesn't care about this option - it reads the
418: compression level from its command line instead.
419:
420: bitfaterrs:xxx
421: Selects what to do with inconsistencies in the internal filesystem
422: sector allocation table. Default is setting the filesystem read-only.
423:
424: bitfaterrs:repair
425: Repair BITFAT mismatches if there are any when mounting the
426: filesystem read-write. This verifies the BITFAT and corrects
427: allocation errors. It is highly important for write access
428: that the BITFAT has no errors. For read-only access the
429: BITFAT is not needed. In read-only mode, this option is
430: ignored. This option may be dangerous in case dmsdos has
431: not recognized your filesystem correctly. So try without it
432: the first time until you can be sure.
433: bitfaterrs:ignore
434: Ignores BITFAT mismatches. This is dangerous and can cause
435: awful MDFAT level crosslinks as well as complete data loss.
436: Use this setting only if you know what you are doing.
437: bitfaterrs:setro
438: Sets the filesystem to read-only mode if BITFAT mismatches
439: are detected. This is safe and also the default behaviour.
440: bitfaterrs:nocheck
441: Don't check the filesystem's internal tables when mounting.
442: This speeds up the mount process a lot. This option
443: is *not* recommended, of course, unless you are very sure
444: there are no errors in the filesystem.
445:
446: WARNING: Generally, BITFAT mismatches are *severe* filesystem errors.
447: You will destroy your data if you write to a filesystem that contains
448: BITFAT mismatches. Note that Dos seems to check and repair the BITFAT
449: automatically and silently on each bootup, so just booting into Dos may
450: repair those errors.
451:
452: loglevel:xxx
453: Sets the driver's loglevel to xxx (a decimal or, if preceeded by 0x,
454: hexadecimal number). The number is a 32 bit field. Each bit represents a
455: family of messages that will be logged when the appropriate bit is set.
456: See file dmsdos.h for details about the message families (watch out for
457: LOG_SomeThing defines and what bits they use). The meanings of the bits
458: are not documented here since they may differ from version to version.
459:
460: WARNING: You are strongly encouraged to increase your kernel's log buffer
461: size to at least 64KB (it's in file linux/kernel/printk.c:
462: '#define LOG_BUF_LEN size_in_bytes', please note that the size *must* be
463: a power of 2) - otherwise you are likely to lose messages or receive even
464: complete garbage due to log buffer overruns.
465:
466: speedup:xxx
467: Sets the driver's speedup flags to xxx (note: these flags are always the
468: same for all CVFs). xxx is a decimal or (if preceeded by 0x) hexadecimal
469: value. The meanings of these bits are listed below. The speedup is active
470: when the appropriate bit is set.
471:
472: WARNING: You should not use this option or change the default value
473: unless you know exactly what you are doing.
474:
475: *** Less speedup than the default may result in painfully
476: sluggish filesystem access.
477: More speedup than the default may cause dangerous side
478: effects.
479:
480: However, speedup may have to be selectively disabled in order to hunt
481: bugs :)
482:
483: bit #0: Leave directories uncompressed
484: Never compress directories for drivespace 3 and stacker
485: (others don't support compressed directories at all).
486: WARNING: Directories are accessed very often, so it's
487: best not to compress them. Usually set this bit.
488:
489: bit #1: Leave umsdos EMD file uncompressed
490: This is only for umsdos upon dmsdos: never compress the
491: --linux-.--- special file (it contains extended directory
492: information).
493: WARNING: This file is even more often written than a
494: directory since it contains the access times (the
495: directory contains only the modification times). You will
496: regret compressing this file, even if you own the fastest
497: computer of the world. Don't ask, set this bit.
498:
499: bit #2: Skip exact search on BITFAT allocation
500: Search faster but less carefully for free space in bitfat
501: at the cost of more fragmentation. This bit is for
502: sector allocation code. If you set this bit allocation on
503: large CVFs is faster but also causes a little more
504: fragmentation. On the other hand, searching more carefully
505: leads to sudden system freezes for up to some seconds on
506: large partitions. Set this bit if you cannot tolerate
507: them. Usually this bit is cleared.
508:
509: bit #3: Fast unmount
510: Write dirty buffers on unmount immediately without
511: compressing them before. This switch defines what happens
512: with unwritten dirty clusters that are in the cache when
513: the filesystem is unmounted. If the bit is clear it means
514: write them back, but compress them before. If it is set,
515: it means write them back without compression.
516: WARNING: COMPRESSION TAKES SOME TIME, YOU'LL NOTICE IT.
517: If you are prepared to wait even some minutes (on an old
518: 386SX16 - on a P100 this should be max. one second) on
519: unmount you can clear this bit. Usually it is set.
520:
521: bit #4: Enable write-back cluster caching (instead of write-through)
522: If this bit is set the data in the cluster
523: cache that have been changed by an application and have to
524: be written back to disk are not written back immediately -
525: they are kept some time in memory just in order to save
526: disk access when the application again changes the data.
527: There's a small risk of data loss if the system happens to
528: crash before the data are written back - but since your
529: operating system is Linux a crash is rather unlikely :)
530: This bit is usually set. When hunting bugs, it should be
531: cleared since it may prevent finding a way to reproduce
532: a bug.
533:
534: bit #5: Enable cluster read-ahead
535: If this bit is set, this causes the driver to initiate a
536: low-level disk access for some data when it thinks they
537: are most likely needed in a short time later. The trick is
538: that the driver doesn't wait for the disk access to
539: finish. So the disk can position its head (and so on)
540: while the system can do something else. Most likely the
541: disk access has finished when the data are actually needed
542: - this saves some time we otherwise had to wait. Well, at
543: least this is the nice idea of read-ahead. However, since
544: read-ahead relies on a prediction, there may be situations
545: when it is useless or even a loss.
546: This bit is usually set. When hunting bugs, it should be
547: cleared since it may prevent finding a way to reproduce
548: a bug.
549:
550: bit #6: Fast BITFAT allocation
551: Switch to very fast sector allocation. This speeds up
552: bitfat allocation because the search algorithm that tries
553: to avoid fragmentation is simply switched off. BE WARNED,
554: it causes *much* fragmentation in very short time. The
555: "filesystem almost full" warning is suppressed. This
556: switch is meant as a last resort if you cannot tolerate
557: system slowdowns at all. Don't fill the compressed
558: filesystem up to more than 3/4 when this switch is set.
559: Write access may fail horribly and cause data loss due to
560: too high fragmentation.
561: This bit is usually cleared. If you are unsure about the
562: dangers let it cleared. Only set it if you really know
563: what you are doing.
564:
565: bit #7: Use daemon if present
566: Use the daemon for delayed compression in the background.
567: This bit is for users of the internal daemon since the
568: internal daemon cannot be disabled by simply killing it.
569: So clearing this bit is another way to disable the daemon.
570: This bit is usually set. When hunting bugs, it should be
571: cleared since it may prevent finding a way to reproduce
572: a bug. *** This bit only affects daemon *compression*.
573: Daemon-controlled memory management still works
574: regardless of this bit.
575:
576: bit #8: Avoid fragmented writes
577: Speedup Bit#8 controls what to do when the filesystem is
578: too fragmented for normal write access. Usually all data
579: for one cluster are stored in contiguous sectors, but if
580: the filesystem is too fragmented there may not be a 'free
581: hole' that is large enough for the data. Speedup Bit#8
582: controls what to do in that case. If this bit is set
583: dmsdos just returns a 'no space left on device' error and
584: refuses to write to the CVF any more.
585: Drivespace 3 and Stacker know a hack for that situation:
586: they allow storing the data of one cluster in several
587: fragments on the disk. If the bit is clear, the driver
588: tries to write the data in several fragments. Be warned,
589: this makes future filesystem access much slower as it
590: needs more disk head movements to read fragmented
591: clusters.
592: *** Note that for Stacker fragmented writes are currently
593: not implemented. Doublespace and drivespace (version
594: <=2) do not support this at all. So the bit is
595: ignored for them.
596:
597: Default speedup (187) is reasonable for normal read and moderate write
598: access. For high-traffic write access you might want to set additionally
599: bit #2 (speedup:191) or even bit #6 (speedup:255). On quite full
600: or highly fragmented CVFs this makes a *great* difference, but it's up
601: to you to decide between safety and speed.
602:
603: Note:
604: You can use the external utility dutil to setup or change dmsdos options
605: later. Look at the following example commands:
606:
607: dutil /mnt setcomp xxx (for changing the comp:xxx option),
608: dutil /mnt setcf xx (for cf:xx option),
609: dutil /mnt setspeedup xxx (for speedup:xxx option) and
610: dutil /mnt setloglevel xxx (for loglevel:xxx option).
611:
612: Just replace the directory name '/mnt' with your mount point in the
613: examples. Besides, you must be root to change dmsdos options via dutil.
614: The bitfaterrs:xxx option cannot be changed with dutil since it only
615: makes sense at mount time :)
616:
617: The string 'option1+option2+option3...' in the FAT mount option
618: 'cvf_options=option1+option2+option3...' has a hard coded limit of 100
619: characters (this is a limitation of the CVF-FAT interface). The string
620: is silently cut down if it is too long. Don't worry, you won't manage
621: to break the limit without specifying senseless parameters :)
622:
623: For those who want to know everything exactly, the CVF-FAT interface
624: has a further FAT driver option (*not* dmsdos option): cvf_format=xxx.
625: The parameters that the dmsdos module allows for 'xxx' are 'dblspace'
626: (for all doublespace and drivespace versions) and 'stacker' (for all
627: stacker versions). Usually you don't care about them since the formats
628: are detected automatically. In short terms: simply never use them.
629: For details about the CVF-FAT interface take a look at
630: linux/Documentation/filesystems/fat_cvf.txt.
631:
632: And now a warning: If you want to mount a CVF *be sure* to have the
633: dmsdos module loaded. The plain FAT driver also mounts some CVFs without
634: complaining (but begins to scream loudly when you, for example, do
635: a 'ls' on the mountpoint). As some CVFs look very similar to normal,
636: uncompressed filesystems, the FAT driver has no chance to detect a
637: CVF at mount time (and e.g. print an error) when the dmsdos module is
638: not loaded.
639:
640: Some simple examples:
641: 1. Your msdos partition that contains CVFs is on /dev/hda1. You want to
642: mount it under /DOS and the CVF under /mnt.
643: mount -t msdos /dev/hda1 /DOS
644: mount -t msdos -o loop /DOS/dblspace.001 /mnt
645: 2. Like above, but you need umsdos support.
646: mount -t umsdos /dev/hda1 /DOS
647: mount -t msdos -o loop /DOS/dblspace.001 /mnt
648: 3. Like above, but you also have umsdos style long filenames in your CVF
649: mount -t umsdos /dev/hda1 /DOS
650: mount -t umsdos -o loop /DOS/dblspace.001 /mnt
651: 4. Like 1., but you need Win95 long filename support *only inside* the
652: compressed partition.
653: mount -t msdos /dev/hda1 /DOS
654: mount -t vfat -o loop /DOS/dblspace.001 /mnt
655: 5. Like 1., but you want to feel safe and refuse write access to the
656: compressed partitions only (but the uncompressed host should be writable).
657: mount -t msdos /dev/hda1 /DOS
658: mount -t msdos -o ro,loop /DOS/dblspace.001 /mnt
659: 6. Like 4., but you need Win95 long filenames also in the uncompressed host
660: partition
661: mount -t vfat /dev/hda1 /DOS
662: mount -t vfat -o loop /DOS/dblspace.001 /mnt
663: 7. You have managed to burn a compressed filesystem onto a CD (This is
664: quite easy - put the large file 'dblspace.001' into an iso9660
665: filesystem and burn it. Be warned, dos can't mount it from CD. Uh...)
666: mount -t iso9660 /dev/cdrom /cdrom
667: mount -t msdos -o loop /cdrom/dblspace.001 /mnt
668: 8. Like 1., but the CVF has been umssynced and contains umsdos long
669: filenames.
670: mount -t msdos /dev/hda1 /DOS
671: mount -t umsdos -o loop /DOS/dblspace.001 /mnt
672:
673: Some complex examples (I didn't break the long lines herein). The option
674: strings might look strange but they are correct:
675: 9. Like 1, but you want the driver to repair bitfat errors automatically.
676: mount -t msdos /dev/hda1 /DOS
677: mount -t msdos -o loop,cvf_options=bitfaterrs:repair /DOS/dblspace.001 /mnt
678: 10. Like 1, but you need more speedup due to high-traffic write access
679: (well, please note that this is not recommended, but it works):
680: mount -t msdos /dev/hda1 /DOS
681: mount -t msdos -o loop,cvf_options=speedup:255 /DOS/dblspace.001 /mnt
682: 11. Like 9 and 10 (repair bitfat errors and more speedup):
683: mount -t msdos /dev/hda1 /DOS
684: mount -t msdos -o loop,cvf_options=bitfaterrs:repair+speedup:255 /DOS/dblspace.001 /mnt
685: 12. Like 1, but disable write access, ignore bitfat error and do debug
686: logging (be careful, this causes tons of debug messages):
687: mount -t msdos /dev/hda1 /DOS
688: mount -t msdos -o loop,ro,cvf_options=bitfaterrs:ignore+loglevel:0xffffffff /DOS/dblspace.001 /mnt
689:
690: Mounting via /etc/fstab:
691:
692: This may be a bit tricky. A typical fstab entry for a CVF looks like this:
693:
694: /DOS/drvspace.001 /DOSF msdos loop 1 0
695: /dev/hda1 /DOS msdos defaults 1 0
696:
697: Be sure to keep the sixth field (the 'pass number') zero to prevent fsck
698: from checking the CVF (it does not know about CVFs and very likely fails).
699: Also the filesystems in /etc/fstab seem to be mounted in reverse order,
700: but that may depend on your mount or libc version. Try to reorder the
701: lines it it doesn't work.
702:
703:
704: 4. Kernel messages
705: ------------------------------------------------------------------------------
706:
707: This section has moved to file messages.doc.
708:
709:
710: 5. Installation
711: ------------------------------------------------------------------------------
712:
713: This section has moved to file INSTALL.TXT in the main dmsdos directory.
714:
715:
716: 6. Troubleshooting
717: ------------------------------------------------------------------------------
718:
719: This section has moved to file troubleshooting.doc.
720:
721:
722: 7. Defragment procedures
723: ------------------------------------------------------------------------------
724:
725: There are three possibilities for fragmentation of a compressed partition:
726: - Msdos FAT level: The CVF itself is a file in a msdos partition that
727: might be broken into several fragments.
728: - Internal FAT level: The files stored in the CVF are fragmented in a
729: similar way like FAT level fragmentation on a real dos partition. Unlike
730: in a real msdos partition, filesystem access does *not* suffer from this.
731: There is no need for defragmenting a CVF at this level (except that you
732: want to make the CVF smaller - then it may be necessary).
733: - Internal MDFAT level: Worst fragmentation that can happen in a CVF. All
734: write access (not only file creation and deletion) causes MDFAT level
735: fragmentation. If a CVF is too fragmented at this level, write access
736: even fails as if the disk was full. Defragmenting a CVF usually refers
737: to this kind of fragmentation, which is very different from FAT level
738: fragmentation.
739:
740: How to defragment a CVF at internal MDFAT level see your dos/win95 or
741: stacker documentation. Dmsdos does not support CVF maintainance.
742:
743:
744: 8. How to contribute to dmsdos development
745: ------------------------------------------------------------------------------
746:
747: First of all, thanks a lot to all alpha testers and all who have sent problem
748: reports, found bugs in the sources or documentation, suggested solutions to
749: some problems and asked questions due to unclear documentation. Without your
750: help dmsdos would not have become what it is.
751:
752: Also many thanks to all who simply mailed they liked dmsdos.
753:
754: At this place, I must also say many thanks to Gordon (VFAT fs) and Matija
755: (UMSDOS fs) for the help to make dmsdos work with the standard 2.1.xx
756: kernels.
757:
758: If you have a problem that is not covered in the documentation please email
759: me. But, *please*, be sure to read the file 'troubleshooting.doc' before.
760: If it's not mentioned there, you may have uncovered a bug that
761: should be fixed. Please watch your kernel log (/var/log/messages) for
762: strange dmsdos messages too. Please include the following information in your
763: mail message:
764:
765: - Linux kernel version, dmsdos version (see kernel messages).
766: - If it doesn't compile, gcc version, as version, libc version, make version.
767: - MS-DOS version you a) used to create the compressed partition, b) you
768: currently use.
769: - Dmsdos kernel messages that are produced when the problem occurs.
770: - Information about your disk hardware (hardware sector size is important -
771: there are some hacks for hardware sector sizes != 512 bytes in the code)
772: - Size of the real (uncompressed) dos partition.
773: - dutil output (run it on the dmsdos CVF directory that causes problems).
774: - Everything else, of course, you think I need to know about the problem.
775: - A valid email address (I wouldn't write this if I hadn't received some
776: mails I couldn't reply to because the return address was rejected).
777:
778:
779: 9. The external dmsdos utility 'dutil'
780: ------------------------------------------------------------------------------
781:
782: (For a summary, take a look at the dutil manual page (file src/dutil.1).)
783:
784: Run dutil on a dmsdos mount point to obtain additional information about the
785: compressed partition. Example: 'dutil /mnt'. This utility has
786: some additional debugging options. These are not described here since they
787: are for debugging only. Run dutil with debug options only when you are asked
788: by the dmsdos author/maintainer in a response to any problem report.
789:
790: Note: Debugging options require running dutil as root. Other users can only
791: see the general filesystem information dutil prints on the screen. See file
792: dblspace_ioctl.c for details on what can be done only by root.
793:
794: You can use the external utility dutil to setup or change dmsdos options
795: later. Use 'dutil /mnt setcomp xxx' (comp:xxx option) and
796: 'dutil /mnt setcf xx' (cf:xx option). Note to replace the directory name
797: '/mnt' with yours. This also works: 'dutil /mnt setspeedup xxx'
798: (speedup:xxx option) and 'dutil /mnt setloglevel xxx' (loglevel:xxx option).
799: The dmsdos options can only be changed by root.
800:
801: To perform a simple filesystem check, use the command
802: 'dutil /mnt checkfs'. This fs check doesn't do any repairs, but
803: immediately reports some fs inconsistencies. There shouldn't be any unless
804: the driver complained already at mount time (see kernel log). If there are
805: errors and the dmsdos driver didn't find them at mount time, this is a
806: serious dmsdos bug (it implies that data have been destroyed by the dmsdos
807: driver) and should be reported. If the command complains about errors but
808: the dos fs checker says everything is okay, you should also send a bug
809: report.
810:
811: To sync the write-back cache you can use 'dutil /mnt synccache'.
812: By default, the command waits until the data have been passed to the kernel's
813: filesystem buffering interface. (If you want to ensure that they are really
814: physically written issue a 'sync' afterwards which causes the kernel to
815: write all dirty buffers to disk.) You can specify an additional argument !=0
816: in order to pass the cache contents to the daemon instead of writing directly
817: to disk (not useful if you want to ensure that the data are written *now*).
818:
819: Note that dutil displays two different compression ratios - an internal and
820: an external one. The internal one is always lower and is used to estimate
821: how much space is left on the device. It depends on which information can
822: actually be obtained from the MDFAT without scanning the whole disk (would
823: take too much time). If you want to compare different versions of compressed
824: filesystems to each other (e.g. doublespace vs. stacker) concerning the
825: compression effectivity, always use the external (second) one because it is
826: always calculated in the same manner. The external compression ratio is
827: calculated according to this formula:
828:
829: Space that would be used on an equivalent uncompressed msdos filesystem
830: ------------------------------------------------------------------------- : 1
831: Space that is used on the disk
832:
833: 'Space' means what file and directory clusters occupy, it does *not* mean:
834: FAT, root directory, futher filesystem maintainance information.
835:
836:
837: 10. The dmsdos daemon 'dmsdosd'
838: -----------------------------------------------------------------------------
839:
840: The dmsdos daemon is a program that runs in the background and
841: does delayed compression when the system is idle. This prevents the dmsdos
842: driver from slowing down your system when compressing large amounts of data.
843: In newer dmsdos versions, the daemon has also some influence on dmsdos
844: memory usage (it shrinks the amount of memory dmsdos eats for caching if
845: the dmsdos driver has not much to do). This might be an advantage for
846: systems that are short on memory.
847:
848: Actually, the daemon exists in two variants. The first one is a user-level
849: process (dmsdosd) that must be started with a command line
850: like 'dmsdosd /mnt' or 'dmsdosd /mnt xx', where /mnt is the mount point
851: and 'xx' is the compression level like in the cf:xx mount option. If the
852: xx is omitted it defaults to 12 (i.e. maximum compression). Please note
853: that this variant of the dmsdos daemon does not care about the dmsdos cf:xx
854: option or the dutil setcf command, but uses its own from its command line.
855: This variant of the dmsdos daemon is called 'external daemon'. For a summary
856: concerning this variant of the dmsdos daemon you can also take a look at the
857: dmsdosd manual page (file src/dmsdosd.1).
858:
859: The second variant is built inside the kernel and starts up automatically
860: when it is needed and exits when it is no longer needed. This variant is
861: called 'internal daemon' and cannot be killed from user space, not even by
862: root. It also obeys the cf:xx option and the dutil setcf command.
863:
864: You can only use one daemon at a time. You must decide before compiling
865: dmsdos which variant to use. During dmsdos configuration ('make config')
866: you are asked which one you want. Both daemon variants do the same work, but
867: the internal one is more user-friendly (well, you don't have to start it
868: manually :-) ) while the external one is more flexible and seems to eat up
869: less system time (but has other backdraws - you must kill it before you can
870: unmount the filesystem that has been given as a command line argument). If
871: you are using the internal daemon, the external one won't start - it always
872: exits with a "no permission" error.
873:
874: If you are going to use the external daemon, please note this: DON'T start
875: one daemon for each filesystem. The one single daemon does all the work for
876: the filesystem given in its command line and for all other dmsdos
877: filesystems you have currently mounted and for all other dmsdos filesystems
878: you mount later while the daemon is running. To prevent security problems
879: only root can start the external daemon (and even more, the driver refuses
880: to talk to a non-root dmsdos daemon via the ioctl interface). The external
881: daemon may be killed (by root) at any time, even when it is under hard work.
882: Send a SIGINT to it to let it finish its actual work and then exit. Send a
883: SIGTERM to it to make it exit immediately. In any case, the daemon catches
884: the signals and exits cleanly.
885:
886: The dmsdos daemon works like this: When it starts up, it tells the dmsdos
887: driver not to compress the data when doing write access to the compressed
888: filesystem. Instead, the driver writes the *uncompressed* data to the disk
889: and maintains a list of clusters that have to be compressed. When the daemon
890: has time to do something, it asks the driver for a cluster to compress. Then
891: the driver looks up a cluster in its 'clusters-that-must-be-compressed'
892: list, reads it from disk and passes it to the daemon. The daemon itself now
893: compresses the data. When it has finished compression, it passes the
894: compressed cluster back to the driver, which in turn writes it to the disk.
895:
896: There are two situations the list gets lost and the data that have not yet
897: been compressed by the daemon remain uncompressed on the disk:
898:
899: 1. Rebooting the system clears the whole list.
900: 2. Unmounting the filesystem clears all the list entries that
901: contain clusters of the filesystem to be unmounted.
902:
903: Please note that this kind of "cache" has a limited size. If you exceed that
904: size by writing *much* data at once the dmsdos driver no longer lets the
905: daemon do the job, but starts to compress the data itself. You will notice a
906: moderate system slowdown in that case. In extreme situations you might not
907: even see an immediate reaction on a keystroke, but those cases have become
908: rare. (If you suddenly see a *great* system slowdown this is usually caused
909: by too much fragmentation - not by compression.)
910:
911: The size of this "cache" can be selected during 'make config'. The number
912: specified there means the maximum (i.e. total, not per CVF) number of
913: clusters that can be in the list. If you want to know the amount in bytes,
914: multiply with the cluster size (which is 32KB for drivespace 3 and 8KB for
915: the other compressed filesystems). The dmsdos driver may use up to this
916: amount of _uncompressed_ disk space inside each compressed partition as
917: "cache". You can use dutil to find out how much uncompressed free space is
918: on the disk. If it is less than the "cache" size you shouldn't write more
919: than the amount of uncompressed free space to the disk at once. Otherwise,
920: the disk is getting full with the cached uncompressed data and you receive
921: a 'no space left on device' error.
922:
923: If there's nothing to compress any more the daemon goes to sleep mode, but
924: when the dmsdos driver needs the daemon it tries to awake it immediately.
925: Furthermore, the daemon awakes periodically to check for data and inform
926: the driver when it is time to release memory.
927:
928: Please note that using the daemon causes *duplicate* write access to the
929: filesystem. This results in a lot of more MDFAT level fragmentation. Thus,
930: the daemon cannot really make your system faster. In fact, it only makes
931: your system *appear* faster by doing a kind of load balancing. This load
932: balancing avoids unnecessary locks (kind of wait loops) in the driver. It
933: means the time some processes would have to wait can be used by other
934: processes.
935:
936: As I'm sometimes asked what to recommend: For a system with read-only or
937: very little write access and enough memory you don't need the daemon. For a
938: system with moderate write access and an appropriate fast processor the
939: internal daemon is best choice. For a system with moderate to high-traffic
940: write access to compressed partitions I recommend the external daemon.
941: If you have a slow processor and you need CPU time for some other intensive
942: computing, it's best to use the external daemon with a nice value (see
943: 'man nice') - this prevents the daemon from slowing down the other
944: processes. If the daemon does not compress fast enough try to lower the
945: compression level in its command line. Well, and if you want to write a
946: large chunk of data (some 100MB) to a compressed partition at once, disable
947: the daemon before - it cannot help in this situation. It only causes too
948: much fragmentation which in turn slows down the system horribly.
949:
950: Just another hint: If you want to use the daemon only for memory management
951: but not for delayed compression, you can clear speedup bit #7.
952:
953: You see, there's much room for experimentation here, especially if you use
954: the external daemon :) There are some pre-configured dmsdos config files
955: which just implement some of the above recommendations. This is explaind
956: in INSTALL.TXT so see there for details, please.
957:
958:
959: 11. The dmsdos library 'libdmsdos.a'
960: -----------------------------------------------------------------------------
961:
962: This feature is currently highly experimental.
963:
964: The dmsdos library is intended to provide some low-level dmsdos functions
965: to user processes. The library is not new source code - it's just the
966: dmsdos module source compiled in a different way (well, with some tricks).
967: The dmsdos library aims towards working with raw CVFs, not filesystems.
968: It is usable only for *not* mounted CVFs. Well, for mounted ones there's
969: the dmsdos module :)
970:
971: Rudimentary documentation can be found in file libdmsdos.doc.
972:
973:
974: 12. The dmsdos filesystem checker 'dmsdosfsck'
975: ------------------------------------------------------------------------------
976:
977: The goal of dmsdosfsck is not having a complete and reliable filesystem
978: checker for CVFs. If you want that, use the filesystem maintainance tools
979: that came with your CVF software package under Dos (or blame their
980: manufacturers if they are not working well...). dmsdosfsck is just meant
981: as a kind of workaround for problems that may show up if the dmsdos or
982: FAT driver suddenly detects an unexpected inconsistency and might get
983: confused. With dmsdosfsck those problems that may confuse the drivers can
984: be detected and corrected before mounting the CVF.
985:
986: The command line of dmsdosfsck looks like this:
987:
988: dmsdosfsck [-a] [-r] [-v] [-l] device|file
989:
990: where -a means repair automatically (uh... be VERY careful), -r means
991: repair interactively, -v means be verbose, and -l means list the files
992: while processing them. These options are somewhat similar to the well-known
993: dosfsck.
994:
995: Currently not all errors can be corrected. It just corrects fatal FAT
996: errors like loops, crosslinks, illegal values, and unexpected ends of
997: chains - things the kernel FAT driver does not like at all and tends to
998: crash or hang if it runs over them. (Well, this is a question of philosophy.
999: Should a kernel driver be idiot proof or may it assume the filesystem is
1000: valid in most cases at the most vital places? I don't want to give an
1001: answer, but the FAT driver of Linux 2.0.34 seems not 100% idiot proof.)
1002: So there is really a need for a dmsdosfsck utility here.
1003:
1004: Furthermore, it can detect but not correct MDFAT errors, crosslinks,
1005: damaged MDFAT entries - you must repair them under Dos using the CVF
1006: maintainance tools that came with your CVF software package. The kernel
1007: FAT driver does not see these structures, and the dmsdos driver simply
1008: returns read errors - those errors just cannot confuse drivers or even
1009: make the system unusable.
1010:
1011: It can detect and correct BITFAT allocation errors - this is necessary
1012: for write access. (But the dmsdos module already does it if it is told
1013: to do so at mount time.)
1014:
1015: It detects damaged directory entries and can correct them. This is also a
1016: situation the kernel FAT driver doesn't like at all. Be warned, repairing
1017: damaged directories is a very critical job which cannot be automated
1018: completely. Some damaged directories cannot be repaired and will be converted
1019: into files instead. This gives you a chance to take a low-level disk editor
1020: and repair this by hand under Dos later (if you know how to do it). Repaired
1021: directories are saved without compression so you should be able to analyse
1022: them under Dos without further help.
1023:
1024: It also checks whether one filename is used more than once in a directory.
1025: The file can optionally be renamed. This is usually done by appending ~%d
1026: to the filename where %d is the lowest possible number not causing a
1027: conflict.
1028:
1029: It also detects lost cluster chains but does not correct them. They just
1030: use space and do nothing evil. For that, use the Dos tools that came....:)
1031:
1032:
1033: *** Currently, dmsdosfsck must be considered extremely alpha test ***
1034:
1035:
1036: It's far away from complete, but some useful things work. You *can*
1037: use dmsdosfsck with the generic fsck frontend. You can even
1038: run your usual fsck when mounting from /etc/fstab at boot time, even on
1039: CVF partitions. But that's not trivial. If you really want to do such
1040: things, take a look at the example script 'msdos.fsck-wrapper' which is
1041: suitable for the generic fsck frontend. Be sure to understand what the
1042: script does. Change it to your requirements. Then replace the link in
1043: /sbin/fsck.msdos (or /etc/fs/fsck.msdos) by a link to the script :)
1044:
1045:
1046: 13. Authors and email addresses:
1047: ------------------------------------------------------------------------------
1048:
1049: CVF-FAT/dmsdos is the official successor of the former dmsdos filesystem. The
1050: dmsdos filesystem was initially written from scratch by Frank Gockel, after
1051: taking a close look at the THS filesystem (a read-only doublespace fs with
1052: only DS-0-2 decompression written by Thomas Scheuermann). Stacker support
1053: and drivespace 3 'ultra' compression/decompression were added by Pavel Pisa
1054: as well as improved DS/JM compression and decompression routines. Meanwhile,
1055: it contains several parts of code that was directly provided or code that is
1056: based on the ideas from a lot of people over the net in order to fix bugs,
1057: to improve performance, and to add features.
1058:
1059: The dmsdos code is distributed under the GNU General Public Licence
1060: (see file COPYING).
1061:
1062: The dmsdos driver is currently maintained by Pavel Pisa (stacker access,
1063: SQ compression, meanwhile all other compression too) and me, Frank Gockel
1064: (rest of the code).
1065:
1066: Pavel's email address is [email protected], my email address is
1067: [email protected].
1068:
1069: If you want to contact me via email, please write in English or take a close
1070: look at the country codes in the email addresses :)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.