Windows ConfidentialDas Dateisystemparadox

Raymond Chen

Wenn Sie sich Ihre Festplatte ansehen, werden Sie wahrscheinlich bemerken, dass sich eine stattliche Anzahl von Betriebssystemdateien im Stammverzeichnis des Startlaufwerks befindet. Wenn Sie sich die Dateien näher ansehen, dürfte Ihnen eine Gemeinsamkeit auffallen: boot.ini, ntldr und ntdetect.com sind kritische Startdateien, und hiberfil.sys ist die Ruhezustanddatei. Dies sind alles Dateien, die an den entscheidenden ersten Phasen beteiligt sind, in denen das Betriebssystem gestartet oder, im Fall von hiberfil. sys, der Ruhezustand beendet wird. Diese Dateien müssen sich im Stammverzeichnis des Startlaufwerks befinden. Weshalb können sie nicht an einen anderen Ort verschoben werden?

Mein Kollege Adrian Oney hat dies folgendermaßen erklärt: Um die Startdateien vom Datenträger zu lesen, wird der Dateisystemtreiber benötigt. Dieser befindet sich jedoch auf dem Datenträger, den Sie nicht lesen können, bis Sie den Dateisystemtreiber geladen haben. Eine paradoxe Situation!

Der Teufelskreis wird dadurch unterbrochen, dass ein Miniaturdateisystemtreiber in die kritischen Startdateien integriert wird. Dieser Miniaturtreiber weiß gerade genug, um die Dateien im Stammverzeichnis zu finden und sie in den Speicher zu laden. Diese Dateien wiederum können das Betriebssystem starten. An diesem Punkt kann der tatsächliche Dateisystemtreiber übernehmen und die Dateien an Orten wie Unterverzeichnissen suchen.

  

Der Ruhezustand folgt einem ähnlichen Muster. Der Ruhezustand eines Betriebssystems bedeutet, dass der gesamte Inhalt des Speichers in die Ruhezustanddatei geleert wird. Das Wiederherstellen aus dem Ruhezustand führt dazu, dass diese Datei wieder in den Speicher befördert wird, als ob nichts geschehen sei. Wiederum ein paradoxes Problem: Um die Ruhezustanddatei zu laden, benötigen Sie den Dateisystemtreiber, doch der Dateisystemtreiber befindet sich in der Ruhezustanddatei. Wenn Sie die Ruhezustanddatei im Stammverzeichnis des Startlaufwerks belassen, kann stattdessen der Miniaturdateisystemtreiber verwendet werden.

Diejenigen, die frühere Versionen von MS-DOS® verwendet haben, sind sich dieser Einschränkung für den Speicherort der Betriebssystemstartdateien sehr bewusst. Der alte SYS-Befehl hat eine langweilige alte Diskette in eine magische Startdiskette verwandelt. Wenn er jedoch auf einer Diskette ausgeführt wurde, die bereits Daten enthielt, hat die Konvertierung mit großer Wahrscheinlichkeit versagt, weil bei den frühen MS-DOS-Versionen die Startdateien bestimmte Orte auf der Diskette besetzen mussten, damit sie vom Bootsektor gefunden werden konnten. In späteren Versionen von MS-DOS wurden diese Anforderungen durch Verbesserungen am Startladeprogramm gelockert, doch auch bei der verbesserten Version müssen sich die Systemdateien nach wie vor im Stammverzeichnis befinden.

Eine Kundenfrage lautete: „Kann ich die Ruhezustanddatei in ein Unterverzeichnis verschieben?“ Warum ist es eigentlich so wichtig, wo sich die Datei befindet? Die ACLs auf der Datei wären die gleichen, unabhängig davon, wo sie sich befindet. Doch diese Leute wollten sie auf einem Laufwerk speichern, das sich vom Startlaufwerk unterscheidet, und erhielten die Antwort, dass dies nicht möglich sei. Der Grund für diese Einschränkung war ihnen nicht verständlich, also versuchten sie es mit einer List: „Gut, wenn ich sie zumindest in ein Unterverzeichnis verschieben kann, dann kann ich ein Verzeichnis erstellen und dort eine Verknüpfung erstellen, die auf den Ort zeigt, an dem ich die Ruhezustanddatei haben möchte.“ Woo hoo—I relocated the hibernation file!

Selbstverständlich versteht der Miniaturdateisystemtreiber Bereitstellungspunkte nicht, weil Bereitstellungspunkte eine Kommunikation mit dem Datenträgerverwaltungsdienst bedeuten. Wenn das System gerade startet, hat der Computer noch nicht einmal das Betriebssystem geladen, geschweige denn einen erweiterten Dienst, der weiß, wie die Laufwerksbuchstaben wieder ARC-Pfaden zugeordnet werden. Selbst wenn Sie diesen Dienst irgendwie zum Laufen bringen, müssen Sie immer noch die Treiber für die anderen Festplatten finden und die entsprechenden Dateisystemtreiber laden.

Es ist nur eine Frage der Zeit, bis jemand fragt, wie die Ruhezustanddatei auf eine DFS-Verknüpfung verschoben werden kann.

Raymond Chen befasst sich auf seiner Website „The Old New Thing“ und in seinem gleichnamigen Buch (Addison-Wesley, 2007) mit der Geschichte von Windows und mit der Win32-Programmierung. Sein Web 2.0-Name ist Raymond oder vielleicht Chenster.

© 2008 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.