Was in dem Wikipedia-Artikel steht, ist schlicht und einfach falsch.
Generelle Vorbemerkung: Defragmentierungsverfahren stammen aus einer Zeit Ende der 1980er-Jahre, als Dateisysteme (wie FAT), die eigentlich für kleine Disketten gedacht waren, nach und nach auch auf Festplatten zum Einsatz kamen. Fragmentierung wurde dort zum Problem, da diese "Billigdateisysteme" auf den mehr als 125 mal größeren Datenmedien eine sehr schlechte Leistung zeigten.
Bei allen modernen Dateisystemen werden jedoch Fragmentierungsvermeidungsverfahren beim Schreiben von Dateien eingesetzt, so dass eine Defragmentierung kaum noch nötig ist. Die "Rest-Fragmentierung", die immer bleibt, lohnt sich nicht zu behandeln, da diese Dateien nach kurzer Zeit wieder fragmentiert wären und der Aufwand, den man treiben muss, um das zu beheben, viel größer ist, als der Gewinn, den man erhalten würde.
Eigentlich sind es nur Anbieter von Defragmentierungs-Tools, die behaupten, man würde so etwas heute noch brauchen. Apple rät generell davon ab:
http://support.apple.com/kb/HT1375
Um die offenen Fragen zu klären:
- HFS+ verwendet Fragmentierungsvermeidungsverfahren.
- Mac OS X verwendet
keine automatische Defragmentierung, die im Hintergrund läuft, wenn das System nichts zu tun hat. Das ist nur ein Mythos.
- Wenn Mac OS X (ab Version 10.3) eine Datei zum Lesen oder Schreiben öffnet, die kleiner als 20 MByte ist
und diese Datei wird gerade nicht von mehreren Programmen geöffnet
und das System läuft seit mindestens 3 Minuten
und die Datei wurde innerhalb der letzten Minute nicht verändert
und diese Datei hat keine Schreibsperre
und diese Datei ist in mehr als 8 Teile fragmentiert, dann führt Mac OS X eine automatische Defragmentierung der Datei durch, indem die Datei in einen unfragmentierten Bereich der Platte verschoben wird.
Die einzig wahre Quellenangabe ist der Quellcode des Mac OS X-Systemkerns. Hier der entsprechende Ausschnitt aus der Datei xnu/bsd/hfs/hfs_vnops.c von Leopard:
Code:
/*
* On the first (non-busy) open of a fragmented
* file attempt to de-frag it (if its less than 20MB).
*/
if ((VTOHFS(vp)->hfs_flags & HFS_READ_ONLY) ||
(VTOHFS(vp)->jnl == NULL) ||
#if NAMEDSTREAMS
!vnode_isreg(vp) || vnode_isinuse(vp, 0) || vnode_isnamedstream(vp)) {
#else
!vnode_isreg(vp) || vnode_isinuse(vp, 0)) {
#endif
return (0);
}
if ((error = hfs_lock(VTOC(vp), HFS_EXCLUSIVE_LOCK)))
return (error);
fp = VTOF(vp);
if (fp->ff_blocks &&
fp->ff_extents[7].blockCount != 0 &&
fp->ff_size <= (20 * 1024 * 1024)) {
struct timeval now;
struct cnode *cp = VTOC(vp);
/*
* Wait until system bootup is done (3 min).
* And don't relocate a file that's been modified
* within the past minute -- this can lead to
* system thrashing.
*/
microuptime(&tv);
microtime(&now);
if (tv.tv_sec > (60 * 3) &&
((now.tv_sec - cp->c_mtime) > 60)) {
(void) hfs_relocate(vp, VTOVCB(vp)->nextAllocation + 4096,
vfs_context_ucred(ap->a_context),
vfs_context_proc(ap->a_context));
}
}
hfs_unlock(VTOC(vp));
Zur ursprünglichen Frage: Mit Ausnahme der Systempartition ist es kein Problem, eine Festplatte bis zum letzten Block auszunutzen. Man kann eine zu 100% gefüllte Platte allerdings dann nur noch als eine Art Nur-Lese-Medium benutzen, denn jeder Schreibzugriff wird wegen Platzmangels fehlschlagen und kann so zu Datenverlust führen.