Defragmentierung von CP/M-Datenträgern?
von Mario Leubner
Werden auf einer Diskette oder Festplatte häufig Daten gelöscht, neue kopiert und wieder gelöscht, oder Dateien wachsen nach und nach immer weiter an, dann erhält man nach kurzer Zeit sehr fragmentierte Dateien. Das heißt, einzelne Dateien sind über den ganzen Datenträger verteilt abgespeichert. Als Folge werden die Zugriffszeiten auf solche Dateien immer größer und Lesefehler häufiger, weil der Schreib-/Lesekopf große Wege zurücklegen muß. Ursache ist die Vorgehensweise, wie CP/M (und auch andere Betriebssysteme) die Daten abspeichern: Jede Datei besteht aus Datenblöcken, die Blockgröße hängt dabei vom Datenträger ab und ist zum Beispiel bei den KC-Disketten 2 K, bei Festplatten auch 4 K oder 8 K. Soll jetzt eine 40 K große Datei auf eine Diskette gespeichert werden, sind 20 Datenblöcke dazu erforderlich. Das CP/M sucht nun nach dem ersten freien Datenblock und benutzt diesen, dann wird der nächste freie Block gesucht usw. Solange die Diskette der Reihe nach beschrieben wird, sind die Datenblöcke auch der Reihe nach belegt. Wurde jedoch am Beginn der Diskette eine vorhandene 8K-Datei gelöscht, so werden auch diese Blöcke mit vergeben und die neu erzeugte Datei liegt in mehreren Stücken auf der Diskette: 8 K am Anfang der Diskette und der Rest weiter hinten. Je öfter solche Vorgänge auftreten, um so mehr werden die Daten verstreut.
Um Abhilfe zu schaffen, wäre ein Programm erforderlich, das die Blöcke neu ordnet. Als wünschbarer Nebeneffekt könnte das Verzeichnis gleich mit alphabetisch sortiert werden. Leider konnte ich bis jetzt kein CP/M-Programm finden, das diese Aufgabe erfüllt - zumindest nicht für Festplatten. Folgende Leistungsmerkmale sind mindestens erforderlich:
- Prüfung des Verzeichnisses auf doppelt belegte Datenblöcke
- Alphabetische Sortierung der Verzeichnisnamen
- Berücksichtigung der Datestamps in !!!TIME&.DAT
- Neuanordnung der Datenblöcke
- Berücksichtigung einer BAD-Sektordatei
- Bevorzugtes Anordnen häufig benutzter Dateien
- Ignorieren bestimmter Dateien (EPROM-Floppy)
Gefunden habe ich ein Programm ,,Sort and Pack`` oder kurz SAP, damit kann das Verzeichnis sortiert werden - allerdings nur wenn es komplett in den TPA geladen werden kann. Meine zwei Festplattenpartitionen mit 4096 Verzeichniseinträgen belegen jedoch bereits 128 K, wohin damit in den 64 K Adreßraum des Z80? SAP ordnet aber auch nicht die Datenblöcke, so daß nur ein sortiertes Verzeichnis entsteht. Weiter habe ich ein Programm RESTORE gefunden, womit Datenblöcke geordnet werden können. RESTORE fordert jedoch als Voraussetzung ein sortiertes Verzeichnis und überprüft dies auch noch. Eine Sortierung ist jedoch mit RESTORE nicht möglich. Also wenn das Verzeichnis nicht sortiert werden kann, ist die Anwendung von RESTORE auch nicht möglich. Ob RESTORE mit einer Blockgröße von 8 K zurechtkommt, falls das Verzeichnis sortiert wäre, ist ebenfalls fraglich, und theoretisch sind auch noch 16 K Blöcke unter CP/M möglich!
Für Disketten ist die Kombination von SAP und RESTORE eine durchaus brauchbare Lösung. Jedoch habe ich festgestellt, daß es bei Disketten günstiger ist, nur das Verzeichnis zu sortieren und dann die Daten auf eine neu formatierte Diskette zu kopieren. Das geht in den meisten Fällen schneller und ist noch sicherer.
Doch für den wichtigeren Anwendungsfall Festplatte scheint es nichts brauchbares zu geben? Einziger Ausweg: man schreibt so ein Programm selbst. Und ich habe bereits begonnen und die ersten Erfolge verzeichnen können. Doch für ein Programm mit einem derartigen Eingriff in die Organisation des Datenträgers müssen noch ein paar weitere Tests folgen, bevor eine Freigabe möglich ist. Wert lege ich dabei in erster Linie auf die Datensicherheit und erst danach auf Schnelligkeit. Denn eine zerstörte Datei ist meist schwieriger wieder zu beschaffen als man Zeit für ein paar zusätzliche Dateizugriffe warten muß. Da das Programm je nach Laufwerksbelegung auch mal Stunden für eine vollständige Neuordnung benötigen kann, muß es eine Möglichkeit zum vorzeitigen Abbruch geben. Vor einer Defragmentierung sollte trotzdem immer ein Backup durchgeführt werden. Es kann also nichts schaden, sich schon einmal mit den diversen Backup-Programmen (z.B. BU17.COM) zu befassen...