home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CEUS Online
/
CEUS_CD.iso
/
texte
/
cluster.txt
< prev
next >
Wrap
Text File
|
1995-04-13
|
11KB
|
218 lines
In den Zeiten, als die Festplatten noch ziemlich teuer waren, habe ich mich
näher mit der Festplatten-Verwaltung von MS-DOS und dem damit zusammen-
hängenden "Cluster-Problem" beschäftigt. Aus diesen Überlegungen sind auch
einige Tools entstanden, die ich demnächst in die Libs hochladen werde.
Manchmal war ich selbst erstaunt, wieviel Platz sich auf einer Festplatte
"freischaufeln" lässt, indem man diese einfach anders strukturiert.
Doch auch heute (bzw. gerade heute), nachdem fast jeder eine Festplatte mit
einigen hundert (oder tausend) MB in seinem Rechner hat, lassen sich durch
vernünftige Partitionierung und Strukturierung erhebliche Kapazitäten wieder
nutzbar machen.
Beim nachfolgenden Text habe ich versucht, auch für den Laien einigermaßen
verständlich die notwendigen Grundlagen zu erörtern.
Wie ist ein Datenträger aufgebaut ?
-----------------------------------
Ein Datenträger besteht in der Regel aus einer runden Scheibe. Diese Scheibe
wird in mehrere kreisförmige Spuren aufgeteilt. Ein "Kreis" wiederum unter-
teilt sich in mehrere Abschnitte, den Sektoren. In jeden Sektor werden unter
MS-DOS 512 Bytes (Zeichen) untergebracht. Die Sektoren werden vom Betriebs-
system durchnummeriert.
Einige Sektoren werden bereits bei der Formatierung für bestimmte Aufgaben
reserviert. So wird z.B. für das Wurzelverzeichnis des Datenträgers eine
bestimmte Anzahl von Sektoren belegt. Da diese Anzahl vom System festgelegt
wird und nicht mehr veränderbar ist, ist die Anzahl der möglichen Einträge
(Dateien und Verzeichnisse) im Wurzelverzeichnis begrenzt.
Was sind Cluster ?
------------------
MS-DOS kann nur eine begrenzte Zahl von Sektoren verwalten und "bündelt"
deshalb die Sektoren zu den sog. Clustern oder zu deutsch : Zuordnungs-
einheiten. Je nach Datenträgergröße variiert die Anzahl der "Sektoren pro
Zuordnungseinheit". Je größer die Datenträger-Kapazität, desto mehr Sek-
toren werden in eine Zuordnungseinheit gepackt.
Welche Auswirkungen haben diese Zuordnungseinheiten ?
-----------------------------------------------------
a) bei Dateien
Jede Datei kann nur volle Zuordnungseinheiten belegen. In der Praxis belegt
eine Datei auch dann einen ganzen Cluster, wenn sie nur 1 Byte lang ist.
Werden z.B. 4 Sektoren (a 512 Byte) zu einer Zuordnungseinheit (ZE) ge-
bündelt, so belegt eine 1-Byte-Datei in Wirklichkeit 2048 Byte (4x512).
Es entsteht also ein "Verschnitt" - ein Teil der Speicher-Kapazität des
Datenträgers wird _belegt_ und ist trotzdem nicht nutzbar.
Dazu ein drastisches Beispiel :
Wir haben eine Festplatte bei der 4 Sektoren eine ZE bilden (=2048 Byte).
Auf diese Festplatte spielen wir nun 2000 ICO-Dateien (Windows-Icons),
die alle eine Größe von 760 Bytes haben. Der Platzbedarf für alle ICO-
Dateien beträgt 1.520.000 Bytes (2000 x 760). Da aber jede Datei in einen
eigenen Cluster geschrieben wird, belegen die 2000 Dateien 4.096.000 Bytes
(2000 x 2048). Von diesen rd. 4MB werden nur rd. 1,5MB wirklich genutzt, was
einer Quote von knapp 40% entspricht.
b) bei Verzeichnissen
Im Gegensatz zum Wurzelverzeichnis (bei dem die Anzahl der Einträge begrenzt
ist), wird für jedes neu erstellte UNTERverzeichnis zunächst ein Cluster
belegt. In diesem Cluster werden grundsätzlich zwei Einträge belegt, die
bei der Ausgabe des DIR-Befehls mit einem bzw. zwei Punkten angezeigt werden.
Für jeden Verzeichnis-Eintrag (egal ob Datei oder Verzeichnis) werden 32
Bytes belegt. Wenn nun Dateien in das UNTERverzeichnis kopiert werden, legt
MS-DOS für jede dieser Dateien einen Eintrag an, in dem z.B. der Dateiname,
die Dateigröße und das Datum und die Uhrzeit des letzten Schreibzugriffs
gespeichert werden. Ist die erste ZE voll, wird eine weitere ZE belegt.
Je mehr Dateien und Verzeichnisse in einem Unterverzeichnis angelegt werden,
umso größer wird auch der belegte Platz, um die Einträge zu verwalten.
Das Problem hierbei ist, daß MS-DOS beim Löschen einer Datei, den dazu
gehörenden Eintrag nicht löscht, sondern diesen nur "unsichtbar" macht.
In manchen Fällen ist das sicher ein Segen, denn die verschiedenen Utilities,
mit denen man aus Versehen gelöschte Dateien wieder herstellen kann, wären
ohne diese "unsichtbaren" Verzeichniseinträge ziemlich aufgeschmissen.
Der Nachteil bei der Sache wird beim nachfolgenden Beispiel klar :
Nehmen wir an, wir entpacken eine ZIP-Datei in ein neu angelegtes Ver-
zeichnis. Die ZIP-Datei enthält einige hundert Dateien und MS-DOS muß des-
halb einige zusätzliche ZEs für die Einträge belegen. Nach dem Entpacken
verschieben wir die Dateien in ein anderes Verzeichnis. Dabei werden die
zusätzlich für die Einträge belegten ZEs aber nicht freigegeben, da ja
die Einträge nicht gelöscht, sondern nur versteckt werden. Eine Freigabe
erfolgt erst, wenn wir das Unterverzeichnis löschen.
Dazu ein Experiment :
a) Wir legen im Rootverzeichnis ein neues Verzeichnis an : MD TEST
b) Vom DosPrompt aus rufen wir ChkDsk auf. Dort wird zum einen die Größe
einer ZE genannt (xxxx Byte in jeder Zuordnungseinheit)
und zum anderen die Anzahl der freien ZE (xxxx Zuordnungseinheiten auf
dem Datenträger verfügbar). Die beiden Werte notieren wir uns.
c) Jetzt berechnen wir, wieviele Dateien wir in dieses Verzeichnis kopieren
müssen, damit eine zusätzliche ZE belegt werden muss.
Wenn die Platte z.B. 2048 Bytes pro ZE hat, so rechnen wir :
1 Zuordnungseinheit : 2048 Bytes
zwei Einträge sind belegt = 2 x 32 Byte - 64 Bytes
den Rest müssen wir belegen = 1984 Bytes
dazu brauchen wir so viele Einträge (:32) : 62 Einträge
bzw. min. einen mehr, um eine neue ZE zu provozieren.
d) Jetzt kopieren wir (am Besten aus einem Verzeichnis, das so viele
Dateien enthält) soviele Dateien (im Beispiel mind. 63) in unser
TEST-Verzeichnis. Im Beispiel reicht normalerweise das DOS-Verzeichnis
aus : XCOPY C:\DOS\*.* C:\TEST
e) Danach löschen wir den Inhalt des Testverzeichnisses wieder :
DEL C:\TEST\*.*
f) und jetzt rufen wir wieder ChkDsk auf. Eigentlich sollten wir nun in
der Rubrik "verfügbare Zuordnungseinheiten" wieder denselben Wert
erhalten, wie vor der Kopieraktion. Doch es fehlt mind. eine Zuordnungs-
einheit !
Welche Möglichkeiten gibt es, den Platz besser auszunutzen ?
------------------------------------------------------------
In den meisten Fällen kann man davon ausgehen, daß eine möglichst kleine
ZE den kleinsten Verschnitt bringt.
Größere Festplatten sollte man partitionieren, also in mehrere kleinere Fest-
platten aufteilen. Durch die Partitionsgröße können wir die Größe der ZE
steuern. MS-DOS geht dabei nach folgender Tabelle vor :
Festplattengröße Sektoren Byte Rechenweg
MB pro ZE pro ZE
---------------------------------------------------------------
0 - 15 MB 8 4.096 8 Sektoren x 512 Byte
16 - 127 MB 4 2.048 4 Sektoren x 512 Byte
128 - 255 MB 8 4.096 8 Sektoren x 512 Byte
256 - 511 MB 16 8.192 16 Sektoren x 512 Byte
512 - 1023 MB 32 16.384 32 Sektoren x 512 Byte
1023 - 2048 MB 64 32.768 64 Sektoren x 512 Byte
Aus der Tabelle ist ersichtlich, daß es absolut NICHT empfehlenswert ist,
eine Partition kleiner als 16MB bzw. größer als 512MB zu machen. Die
optimale ZE-Größe erhalten wir im Bereich 16-127MB und für bestimmte Fälle
sind die beiden nachfolgenden Partitionsgrößen noch akzeptabel.
Da es relativ schwierig und mühsam wäre, für jede Verzeichnis-Struktur die
optimale Partitionsgröße zu berechnen (kleine Partition = wenig Verschnitt
aber große Partition = weniger ZE für große Verzeichnisse), habe ich mir
ein Tool geschrieben, daß diese Arbeit abnimmt und für beliebige Verzeichnis-
strukturen die günstigste Partitionsgröße empfiehlt.
Momentan befindet sich das Programm noch in der Beta-Phase und steht in
den Libs unter dem Namen CDIR.ZIP zur Verfügung.
Neben der Umpartitionierung gibt es noch weitere Tricks, wie man trotz
vieler und/oder kleiner Dateien, den Verschnitt eindämmen kann :
a) Grafiken, Icons u.ä. lassen sich wesentlich platzsparender in einer
Archivdatei unterbringen. Speziell für Icons gibt es sog. Icon-Manager,
die die Iconsammlung in DLL, NIL o.ä. Dateien zusammenführen. Damit kann
nach wie vor z.B. vom Programm-Manager darauf zugegriffen werden und es
wird ein Haufen Platz gespart. Für andere Daten gibt es zahlreiche Pack-
Programme und mit den entsprechenden Bediener-Oberflächen lassen sich
Grafik-Archive etc. bequem verwalten.
b) Batch-Dateien sind oft auch nur kurze Dateien und damit potentielle
"Verschnitt-Erzeuger". Abhilfe schafft man da, indem man gleichartige
Batches zu einer Datei zusammenfasst und ein Menü dazu schreibt.
Ein Beispiel :
Nehmen wir an, wir haben mehrere Batches, um verschiedene Druck-Funktionen
aufzurufen. Da wäre eine Batchdatei zum Senden eines FormFeed (FF.BAT),
eine zum Drucken eines ASCII-Dokuments mit einem Druckprogramm
(PRNDOC.BAT) und eine für den Aufruf eines Konfigurationstools zum Ein-
stellen verschiedener Drucker-Einstellungen (PCONFIG.BAT) :
----- FF.BAT --------------------------------------------------
@echo off
IF %1%==2 GOTO FF2
ECHO >LPT1
GOTO ENDE
:FF2
ECHO >LPT2
:ENDE
----- PRNDOC.BAT ----------------------------------------------
@echo off
echo Drucke %1
d:\prttool\pageprnt.exe /l:69 /S /d %1
----- PCONFIG.BAT ---------------------------------------------
@echo off
d:\prttool\pconfig.exe /c:laserjet.cfg
---------------------------------------------------------------
Jede der drei Dateien hat zwar nur wenige Bytes, belegt bei ZEs mit
2048 Byte aber jeweils diese 2048 Byte : 3 x 2048 Byte = 6144 Byte.
Jetzt fassen wir die drei Dateien zu DRUCK.BAT zusammen und verpassen
dem Ding ein Menü :
----- DRUCK.BAT -----------------------------------------------
@echo off
echo 1. FormFeed an LPT1
echo 2. FormFeed an LPT2
echo 3. Datei %1 drucken
echo 4. Drucker konfigurieren
echo Deine Wahl :
choice /c:1234
if errorlevel 4 goto config
if errorlevel 3 goto drucken
if errorlevel 2 goto ff2
if errorlevel 1 goto ff1
:config
d:\prttool\pconfig.exe /c:laserjet.cfg
goto ende
:drucken
echo Drucke %1
d:\prttool\pageprnt.exe /l:69 /S /d %1
goto ende
:ff2
ECHO >LPT2
GOTO ende
:ff1
ECHO >LPT1
:ende
----------------------------------------------------------------
Diese Datei ist etwas komfortabler und benötigt nur eine ZE, also
2048 Byte.
c) Jedesmal, wenn man eine größere Anzahl von Dateien kopiert oder entpackt,
sollte man dies in einem neu angelegten Verzeichnis tun und dieses Ver-
zeichnis danach löschen, damit die zusätzlich belegten ZEs wieder frei-
gegeben werden.
d) Das TEMP-Verzeichnis sollte ebenfalls in regelmäßigen Abständen komplett
gelöscht (also nicht nur der Inhalt, sondern auch das Verzeichnis selbst)
und danach wieder neu angelegt werden.
e) Das Gleiche gilt für temporäre Verzeichnisse von Packern u.ä.
Feedback zu dem Text ist erwünscht.
Uwe Pfannkuchen CIS:100273,3471