Feinwerkzeug
Dateisystempflege mit fsutil
Ob zum Beheben von Störungen oder aus purer Neugier: Für einen Blick auf die Interna des Windows-Dateisystems ist zuverlässiges Werkzeug gefragt. Das vielseitigste Tool für diesen Zweck heißt fsutil – lassen Sie sich überraschen, was man damit alles anstellen kann!
Die meisten Kommandozeilenwerkzeuge, die Windows zur Systemwartung und -administration mitbringt, dienen einem einzigen, ganz speziellen Zweck oder haben zumindest ein recht eng umrissenes Aufgabengebiet: Diskpart partitioniert Datenträger, format formatiert sie, mit dism bearbeitet man Windows-Images (zu denen auch die gerade laufende Installation gehört) und so weiter. Es gibt allerdings ein Programm, bei dem so eine Kategorisierung schwerfällt: fsutil. Dessen Funktionen könnte man vielleicht am besten mit „kümmert sich um Besonderheiten von NTFS-Datenträgern“ zusammenfassen, aber das stimmt auch nur zum Teil.
Schaut man sich das Tool genauer an, könnte man den Eindruck gewinnen, Microsoft hat darin alles zum Thema Massenspeicher zusammengeworfen, was in anderen Werkzeugen keinen Platz mehr hatte. Neben viel Exotischem findet man durchaus auch Funktionen, die die Performance und die Sicherheit einer Windows-Installation beeinflussen können. Grund genug also, um fsutil aus seinem Schattendasein hervorzuholen.
Auch nach der Lektüre dieses Artikels werden Sie fsutil wahrscheinlich nicht täglich benutzen. Dazu sind die meisten seiner Funktionen dann doch zu speziell. Das Tool richtet sich eindeutig an Power-User und Administratoren. Dazu passt, dass ein Teil der im Folgenden vorgestellten Befehle Administratorrechte benötigt. Wir werden das nicht bei jedem Aufruf explizit erwähnen. Wenn Sie einige der Tipps ausprobieren möchten, tun Sie das am besten in einer Eingabeaufforderung oder in einem PowerShell-Fenster mit vollen Rechten. Aber Achtung: Wie immer, wenn man mit Admin-Rechten unterwegs ist, sollte man sich ziemlich sicher sein, was man tut. Allzu unbedachtes Herumfummeln an Systemeinstellungen kann ebenso wie der eine oder andere Tippfehler – Murphy lässt grüßen – dazu führen, dass das System instabil oder langsam wird oder ganz den Dienst verweigert. Auf Produktivsystemen sind solche Experimente also tabu und ohne aktuelle Systemsicherung in Form eines Image ohnehin nicht zu empfehlen.
Einige der vorgestellten Befehle funktionieren nur auf NTFS-Laufwerken – wir werden Sie darauf hinweisen. Was wir uns aber verkneifen, ist die gesonderte Erwähnung des Dateisystems ReFS, das von einigen der Aufrufe ebenfalls unterstützt wird. Das „Resilient File System“, das Microsoft perspektivisch als NTFS-Nachfolger auserkoren hat, ist bislang unter den Desktop-Ausgaben von Windows noch nicht voll unterstützt und eher für den Einsatz auf Windows-Servern gedacht [1]. Sollten Sie bei der Lektüre der folgenden Ausführungen das Gefühl haben, dass der eine oder andere Befehl auch für Ihre ReFS-Volumes nützlich sein könnte, konsultieren Sie bitte die Online-Dokumentation zu fsutil. Unter ct.de/ybgh haben wir sowohl die englische Originalversion als auch die deutsche Übersetzung verlinkt. Letztere ist nicht besonders gelungen – wenn irgend möglich, sollten Sie besser das Original hernehmen.
Rantasten
Den jüngsten Bemühungen Microsofts zum Trotz, möglichst viele Verwaltungsfunktionen über PowerShell-eigene Cmdlets zugänglich zu machen, scheint man dem Programm fsutil in Redmond nach wie vor eine gewisse Bedeutung beizumessen: Mit dem Umstieg von Windows 10 auf 11 hat fsutil ein leichtes Facelifting bekommen. Etliche Antworten des Tools sind verständlicher geworden und enthalten nun kurze Erklärungen zur Interpretation von Ergebnissen.
Das benutzerfreundlichste Tool ist fsutil aber nicht gerade: Man muss sich teils recht lange Befehlsfolgen merken und diese auch komplett eintippen – anders als andere Kommandozeilenwerkzeuge wie etwa diskpart kennt fsutil keine Kurzschreibweisen für seine Befehle und Optionen. Alle Kommandos bestehen – abgesehen vom eigentlichen Aufruf fsutil – aus mindestens zwei Komponenten: einem Haupt- und einem Unterbefehl. Bei vielen muss man diese beiden Bestandteile noch um das Ziel der Operation ergänzen, etwa einen Laufwerks- oder Pfadnamen, und kann das Verhalten mit möglichen Optionen noch feiner steuern.
Der wahrscheinlich grundlegendste Befehl ist fsinfo. Er dient zum Abrufen von allerlei Basisinformationen über vorhandene Datenträger. So liefert fsutil fsinfo drives eine Liste aller angeschlossenen Laufwerke. Die Frage, ob sich hinter einem Buchstaben ein fest eingebautes Laufwerk, ein Wechseldatenträger, eine Netzwerkfreigabe oder ein optisches Laufwerk verbirgt, beantwortet fsutil fsinfo drivetype d: mit dem gewünschten Laufwerksbuchstaben als letztem Argument. Weitere Informationen wie den Laufwerksnamen, das verwendete Dateisystem oder ob ein Datenträger schreibgeschützt ist, gibt der Aufruf fsutil fsinfo volumeinfo d: aus. Bei NTFS-Volumes erfährt man außerdem, welche erweiterten Features des Dateisystems für diesen Datenträger aktiv sind. Noch mehr – größtenteils recht esoterische – Details über den Zustand eines NTFS-Laufwerks kitzelt fsutil fsinfo ntfsinfo d: heraus.
Eher auf die physischen Eigenschaften eines Datenträgers zielt fsutil fsinfo sectorinfo d: ab, wobei das verwendete Dateisystem egal ist. Interessant könnte vor allem die Aussage „Kürzen wird unterstützt“ beziehungsweise „Kürzen wird nicht unterstützt“ sein: Hinter der etwas holprigen deutschen Übersetzung verbirgt sich die Information, ob das Laufwerk den TRIM-Befehl unterstützt. Das ist typischerweise bei SSDs der Fall, echte Festplatten kennen ihn nicht. Das Betriebssystem teilt dem Laufwerk darüber mit, wenn Sektoren frei werden, etwa weil eine Datei gelöscht wurde. Die SSD-Firmware kann diese Sektoren dann schon mal löschen, wenn sie nichts anderes zu tun hat, und braucht sich damit nicht mehr aufzuhalten, wenn der Sektor neu beschrieben werden soll. Sollte diese Beschleunigungsfunktion bei einer älteren SSD deaktiviert sein, hilft möglicherweise ein spezieller Treiber des Laufwerksherstellers.
Damit der Aussicht auf Erfolg hat, muss die TRIM-Funktion aber auch global aktiviert sein. Das war auf allen Windows-Installationen, die uns zum Testen in die Finger geraten sind, der Fall, aber sicher ist sicher: fsutil behavior query disableDeleteNotify verrät den Status. Achtung, die Antwort kann unter Windows 10 leicht missverstanden werden, weil sie eine doppelte Verneinung enthält: Ist sie 0, ist das Abschalten (disable) des TRIM-Befehls deaktiviert – das ist also eine gute Nachricht. „DisableDeleteNotify = 1“ bedeutet hingegen, dass Windows keine TRIM-Befehle an Laufwerke sendet. Korrigieren lässt sich das mit dem Aufruf fsutil behavior set DisableDeleteNotify 0, der seine Wirkung sofort entfaltet, also keinen Systemneustart verlangt.
Globale Schalter
Der fsutil-Befehl behavior kennt noch eine ganze Reihe weiterer Optionen. Sie funktionieren alle nach demselben Muster: fsutil behavior query <Option> fragt die Schalterstellung ab und mit fsutil behavior set <Option> <Wert> lässt sie sich ändern. Alle möglichen Optionen hier zu nennen, würde den Rahmen des Artikels sprengen; eine Liste liefert fsutil behavior query ohne weitere Option, weitere Erklärungen die Online-Doku. Etliche Optionsnamen beginnen mit disable und funktionieren andersherum, als man intuitiv erwarten würde: set disableCompression 1 deaktiviert beispielsweise die Fähigkeit, Dateien komprimiert zu speichern, für alle NTFS-Laufwerke auf einmal, set disableEncryption 0 schaltet die Möglichkeit zur EFS-Verschlüsselung ein (sie ist aber standardmäßig aktiviert).
Auf besonders sicherheitskritischen Systemen kann es sinnvoll sein, Windows anzuweisen, die Auslagerungsdatei zu verschlüsseln. Damit verhindert man, dass im RAM gespeicherte Inhalte im Klartext auf dem Systemlaufwerk landen, wenn der Hauptspeicher knapp wird. Ein Angreifer könnte sich diese Daten zunutze machen, indem er einen Rechner einfach ausschaltet, ohne Windows ordnungsgemäß herunterzufahren, und die Auslagerungsdatei (normalerweise C:\pagefile.sys) etwa mit einem per USB-Stick gebooteten Linux ausliest. Ist die Datei verschlüsselt, bekommt er nur noch Datenmüll zu sehen. Die Sicherheitsfunktion kostet je nach Geschwindigkeit von CPU und Auslagerungsdatenträger aber ein wenig Performance. Eingeschaltet wird sie mit dem Aufruf fsutil behavior set encryptPagingFile 1.
Platz verschwenden …
Vor allem, wenn man selbst Software entwickelt, aber auch als Administrator möchte man manchmal wissen, ob sich ein bestimmtes Programm oder auch das ganze System vernünftig verhält, wenn der Speicherplatz auf einem Datenträger zur Neige geht. Um das zu provozieren, könnte man irgendeine große Datei per Explorer immer wieder kopieren, deutlich schneller erledigt aber fsutil den Job: fsutil file createNew <Dateiname> <Größe> erzeugt eine neue Datei unter dem Namen <Dateiname>, deren Inhalt aus so vielen Null-Bytes besteht, wie <Größe> angibt.
Interessant ist, dass der Befehl auch für eine sehr große Datei auf einem langsamen Datenträger praktisch sofort fertig ist, jedenfalls wenn der mit NTFS formatiert wurde. Windows schreibt nämlich die Nullen zunächst gar nicht auf den Datenträger, sondern merkt sich, dass die Datei leer ist. Man könnte vermuten, dass hier sogenannte Sparse Files im Spiel sind, aber das ist nicht der Fall: Ein Blick mit dem Explorer in die Eigenschaften einer solchen Datei verrät, dass ihre „Größe“ und die „Größe auf Datenträger“ sich nicht unterscheiden – beide umfassen den vollen angeforderten Platz. Sparse Files sind ja gerade dazu da, Platz zu sparen, wenn große Bereiche einer Datei nur Nullen enthalten. Um den Speicherplatz eines Datenträgers künstlich zu füllen, wären sie kontraproduktiv.
Des Rätsels Lösung erschließt sich, wenn man weiß, dass das NTFS-Dateisystem zu jeder Datei unter anderem einen Zähler für die „Valid Data Length“ speichert. Er sagt aus, bis zu welchem Index die Informationen in einer Datei gültig sind. So kann ein Programm sich schon mal Speicherplatz reservieren, ohne Zeit damit zu vertrödeln, den auch zu überschreiben. Wenn es dann aber weiter hinten in so einer Datei ein paar Bytes schreibt, füllt Windows den bislang unbeschriebenen Platz davor mit echten Nullen und setzt die Valid Data Length neu.
Wer sich für solche Feinheiten interessiert, kann sich die Valid Data Length einer Datei mit fsutil anzeigen lassen. Der dafür nötige Aufruf lautet fsutil volume filelayout <Dateiname>. Die Ausgabe enthält die sogenannten Datenströme, aus denen die Datei besteht. Die eigentlichen Daten stecken in „$DATA“, und dort ist in der Zeile „Vdl“ auch die Valid Data Length zu finden. Wem das ganze NTFS-Drumherum egal ist, der kommt mit fsutil file queryValidData <Dateiname> noch schneller ans Ziel.
… und sparen
Das Stichwort „Sparse File“ ist eben schon gefallen: Es handelt sich dabei um eine NTFS-Spezialität, die sich hauptsächlich Entwickler zunutze machen können, um Speicherplatz zu sparen [2]. Sie können große Dateien so anlegen, dass Bereiche, die nur Nullen enthalten, zunächst keinen Speicherplatz fressen. Als Anwender kommt man mit dieser Eigenheit kaum in Kontakt, sie kann aber bei der Datensicherung bedeutsam werden: Backup- und Kopierprogramme, die sie nicht kennen, brauchen für die Sicherung womöglich viel mehr Platz, als die Daten auf dem Originallaufwerk belegen.
Ob es sich bei einer Datei um ein Sparse File handelt, kann man mit fsutil sparse queryFlag <Dateiname> herausfinden. Bei als Sparse gekennzeichneten Dateien liefert fsutil sparse queryRange <Dateiname> die Bereiche der Datei, in der von Nullen verschiedene Nutzdaten stehen. Leider können die beiden Befehle nicht mit Platzhalterzeichen umgehen. Um etwa alle Sparse Files in einem Ordner zu finden, ist ein bisschen Batch-Programmierung oder PowerShell-Scripting gefragt.
fsutil beherrscht auch das Kunststück, eine normale Datei in ein Sparse File zu verwandeln. Dazu muss man sie zunächst mit fsutil sparse setFlag <Dateiname> als solche markieren und kann anschließend mit fsutil sparse setRange <Dateiname> <Start> <Länge> Bereiche löschen und den von ihnen belegten Speicherplatz freigeben. Achtung, bei diesem Befehl lauern zwei Fallen! Die erste: setRange löscht Bereiche gnadenlos ohne Prüfung des Inhalts und ohne Rückfrage – man sollte den Befehl also mit Bedacht einsetzen. Die zweite: Die fsutil sparse-Unterbefehle queryRange und setRange funktionieren genau entgegengesetzt, denn queryRange gibt die belegten Speicherbereiche aus und setRange definiert die freien. Wenn man sich also beispielsweise ein Skript stricken möchte, um Sparse Files so zu kopieren, dass am Zielort dieselben Dateibereiche gespart werden, kann man nicht einfach die queryRange-Ausgabe wieder an setRange verfüttern, sondern muss ihr Komplement berechnen.
8 plus 3
Die Älteren von Ihnen werden sich vielleicht erinnern: In der Urzeit der Computerei bestanden die Namen von Dateien und Ordnern aus höchstens acht ASCII-Zeichen, optional gefolgt von einem Punkt und einem maximal dreibuchstabigen Dateityp. Die Möglichkeit, längere Namen zu benutzen, hat Windows einst auf die bestehenden Konventionen aufgepfropft. Um die Kompatibilität mit älteren Programmen zu gewährleisten, haben Dateien aber trotzdem noch 8.3-Namen bekommen. So könnten die Dateien „Brief an Müller.docx“ und „Brief an Schmidt.docx“ in einem Dokumente-Ordner die kurzen Namen BRIEFA~1.DOC und BRIEFA~2.DOC bekommen – die konkreten Namen hängen vor allem davon ab, welche Dateien es in dem Ordner sonst noch gibt, denn doppelt vergebene Namen dürfen bei der Verkürzung ja nicht entstehen.
Windows versteckt die kurzen Namen weitgehend vor den Anwendern. Im Explorer kennen wir keine Möglichkeit, sie sich anzeigen zu lassen. In der Eingabeaufforderung wird man aber doch fündig: Der Befehl dir listet sie, wenn man ihm die Option /x mitgibt.
Programme, die sich noch auf die 8.3-Namenskonvention für Dateien und Ordner verlassen, sind mittlerweile praktisch komplett ausgestorben. Solche Namen überhaupt noch zu erzeugen und zu speichern, ist also meistens Zeit- und Platzverschwendung.
Wie eine Windows-Installation mit kurzen Dateinamen umgeht, lässt sich mit fsutil erkunden und anpassen: fsutil 8dot3name query liefert eines von vier möglichen Ergebnissen. 0 bedeutet, dass kurze Dateinamen auf allen Datenträgern erzeugt und gespeichert werden, 1 heißt, das passiert nirgends. Bei der Option 2 kann das System die Unterstützung für kurze Namen für jedes Volume getrennt festlegen, und bei 3 sind kurze Namen nur auf dem Systemlaufwerk aktiviert und überall sonst deaktiviert. Lautet das Ergebnis 2, kann man mit Anfragen wie fsutil 8dot3name query C: die einzelnen Laufwerke abfragen. Auf allen Systemen, die uns in freier Wildbahn untergekommen sind, war Option 2 gewählt und das Speichern von 8.3-Namen auf dem Systemlaufwerk aktiv.
Wer auf die Idee kommt, den Overhead für die Verwaltung der historischen Dateinamen loszuwerden, sollte einiges beachten: Anwendungen, die nur mit solchen Dateinamen arbeiten können, werden wohl nicht mehr im Einsatz sein. Allerdings gibt es durchaus noch Programme (und vermutlich auch vereinzelte Windows-Komponenten), die beim Speichern von Verweisen auf bestimmte Dateien in der Registry das 8.3-Format verwenden. Ob das in Ihrem Windows der Fall ist, können Sie mit einem eigens dafür vorgesehenen fsutil-Aufruf herausfinden: fsutil 8dot3name scan C:\MeinOrdner sucht die Registry nach Einträgen ab, die nach einem 8.3-Datei- oder Ordnernamen in dem angegebenen Verzeichnis aussehen. Das Ergebnis schreibt fsutil standardmäßig in eine Log-Datei, die man sich im Anschluss anzeigen lassen kann. Mit der Option /v landen sie zusätzlich auch auf dem Bildschirm, mit /s durchkämmt fsutil auch Unterordner.
Lässt das Ergebnis keine Nebenwirkungen befürchten, kann man mit fsutil 8dot3name strip C:\MeinOrdner alle vorhandenen 8.3-Namen löschen lassen. Die Optionen /s und /v bewirken dasselbe wie oben, zusätzlich kennt der Befehl den Schalter /t, der die Aktion erst mal nur simuliert, ohne tatsächlich etwas auf dem Datenträger zu ändern.
| fsutil-Befehle | |
| Befehl | Zweck |
fsutil 8dot3name
| zeigt an und steuert, wie Windows mit kurzen 8.3-Dateinamen umgeht |
fsutil behavior
| globale Schalter, die das Verhalten von NTFS-Volumes steuern |
fsutil bypassIo
|
nur Windows 11: fsutil bypassIo State <Pfad> gibt an, ob der Pfad die Spiele-Beschleunigungstechnik BypassIO unterstützt.
|
fsutil dirty
| Abfrage und Beeinflussung des Dirty-Flags, das die automatische Fehlerüberprüfung von Datenträgern steuert |
fsutil file
| verschiedene Abfragen und Operationen rund um Dateien und deren Eigenschaften |
fsutil fsInfo
| Abfrage von Eigenschaften und Statistiken von Dateisystemen |
fsutil hardlink
| Hardlinks zwischen Dateien auf einem NTFS-Laufwerk erstellen und anzeigen |
fsutil objectID
| Anzeige und Beeinflussung der NTFS-internen IDs von Dateien und Ordnern |
fsutil quota
| Abfrage und Verwaltung von Datenträgerkontingenten, um den für Benutzerkonten verfügbaren Speicherplatz zu beschränken |
fsutil repair
| Abfrage und Beeinflussung der Selbstheilungsfunktionen von NTFS-Laufwerken |
fsutil reparsePoint
| Reparse Points, Junctions, symbolische Verknüpfungen und ähnliches anzeigen und löschen |
fsutil resource
| Analysieren und Steuern des transaktionalen Verhaltens von NTFS-Volumes |
fsutil sparse
| Analyse und Beeinflussung von Sparse Files |
fsutil storageReserve
| Analyse und Reparatur des für Windows Update reservierten Speicherplatzes |
fsutil tiering
| Analyse und Verwaltung von Speicherebenen in Storage Spaces |
fsutil transaction
| Dateisystemoperationen in Transaktionen verpacken, um sie gemeinsam zu bestätigen oder zurückzunehmen |
fsutil usn
| Abfrage und Verwaltung des Änderungsjournals auf NTFS-Datenträgern |
fsutil volume
| Analyse von freiem Platz, Cluster-Zuordnung von Dateien und ähnlicher Eigenschaften auf NTFS-Volumes |
fsutil wim
| Anzeige von in WIM-Dateien (Windows Images) gespeicherten Dateien |
Schatzkästchen
Fsutil kennt insgesamt über 100 Befehle – viel zu viele, um in einem c’t-Artikel alle vorzustellen. Die hier erwähnten haben wir vor allem deshalb ausgewählt, weil wir glauben, dass sie ein paar mehr Erläuterungen verdienen, als die Online-Dokumentation hergibt. Außerdem haben wir uns auf Befehle konzentriert, die für Desktop-Systeme relevant sind. Die Doku empfehlen wir Ihnen aber trotzdem ausdrücklich zur weitergehenden Lektüre – den Link gibts unter ct.de/ybgh. Brauchen Sie jemals alle fsinfo-Befehle? Wahrscheinlich nicht. Den einen oder anderen mal ausprobiert zu haben, hilft aber beim Verständnis der Merkmale eines Dateisystems wie NTFS mehr als trockene Theorie. (hos@ct.de)
Online-Dokumentation zu fsutil: ct.de/ybgh