Warum bewirkt "du" bei WSL eine Verzeichnisgröße, die größer ist als der Arbeitsspeicher der Maschine?

426
bballdave025

Ich stieß auf meine Frage, als ich versuchte herauszufinden, welche Dateien auf meinem Computer den meisten Speicherplatz belegen. Hier finden Sie die Informationen zum gesamten Arbeitsspeicher der Maschine, die von Windows Subsystem for Linux (WSL) gefunden werden.bash

bballdave025@WORK:~$ df -h /mnt/c Filesystem Size Used Avail Use% Mounted on C: 239G 231G 7.8G 97% /mnt/c 

Beachten Sie, dass es bei meiner Frage NICHT darum geht, wie Sie den Platz löschen.

Ich fing an, das Program FilesVerzeichnis zu überprüfen .

bballdave025@WORK:~$ du -sh /mnt/c/Program\ Files/ du: cannot read directory '/mnt/c/Program Files/Microsoft Policy Platform/authorityDb': Permission denied du: cannot read directory '/mnt/c/Program Files/Microsoft SQL Server/130/Shared/ErrorDumps': Permission denied du: cannot read directory '/mnt/c/Program Files/WindowsApps': Permission denied 2.5T /mnt/c/Program Files/ 

Das Hauptproblem

Meine WSL bash dusagt mir, dass, auf meinem Rechner (das hat 239GBder Speicher,) mein Program FilesVerzeichnis Aufnahme ist 2.5TB des 239GBverfügbaren Speichers. Es ist, als würde ich zwei Liter Wasser in meinem Mund halten, ohne zu schlucken. (Das ist nur, um das Verhältnis der Größen zu zeigen - mein Problem beinhaltet kein Wasser.)

Ich habe übrigens keine Administratorrechte - nein sudo !!, um Probleme zu lösen. Ich werde die auslassen Permission deniedFehler (das wird ohne kommen realen sudo ), wie ich weiterhin diesen Beitrag zu schreiben. Beachten Sie auch, dass ich auf einem Arbeitscomputer bin. Es gibt also Dinge, auf die ich nicht zugreifen kann.

Hauptfrage: Gibt es eine relativ einfache Möglichkeit, die Festplattennutzung in meiner Situation zu überprüfen, dh die Festplattennutzung auf einem Windows- C:Laufwerk mithilfe des Windows-Subsystems für Linux zu überprüfen ?

Zweitfrage: Was zum Teufel ist hier los? Warum erhalte ich einen Bericht, dass mein Program FilesVerzeichnis zehnmal mehr Speicherplatz beansprucht, als auf meinem Computer vorhanden ist?

Übrigens ... Windows sagt mir, dass Program Filesdiese Größe eine Größe 4.83 GBhat, die ich gefunden habe, indem Sie mit der File Explorerrechten Maustaste auf den Program FilesOrdner klicken und "Eigenschaften" auswählen.


Meine Lösungsversuche

Mein erster Gedanke war, dass es ein paar symbolische Links oder ein Laufwerks-Mapping für Firmensoftware oder ein Antivirenprogramm oder ähnliches geben könnte, also habe ich die manSeite nachgesehen du. Ich habe die folgenden zwei Flaggen gefunden, von denen ich dachte, dass sie helfen könnten.

-P, --no-dereference don't follow any symbolic links (this is the default) -x, --one-file-system skip directories on different file systems 

Allerdings du -shP /mnt/c/Program\ Files/, du -shx /mnt/c/Program\ Files/und sogar du -shPx /mnt/c/Program\ Files/gab mir 2.5T. Was das betrifft, so hat die Option, die sollte Symlinks folgen du -shL. Es gibt aus 2.5T. Dasselbe gilt für die anderen Optionen, die ich vielleicht ausprobiert habe, du -shDund du -shHgaben dasselbe - 2.5Tfür alle.

Mein nächster Gedanke war, dass vielleicht Windows-Verknüpfungen die Dinge durcheinander brachten, also versuchte ich, sie auszuschließen. (Ich weiß nicht, ob dieser Code das Folgen von Verknüpfungen tatsächlich verhindert, aber ich dachte, es wäre einen Versuch wert.) Keine Würfel.

bballdave025@WORK:~$ du -sh --exclude=*.lnk /mnt/c/Program\ Files/ 2.5T /mnt/c/Program Files/ 

Ich konnte Vorurteile hinter sich lassen und etwas aus dem <shudder> Windows Command Line </shudder>alten versuchen oder sogar meine alten PowerShellFähigkeiten abstauben . Ich schätze, ich könnte sogar die Kugel beißen und zu jedem Verzeichnis in der File ExplorerGUI gehen, auf jeden Ordner klicken, 'Eigenschaften' auswählen, herausfinden, welches Unterverzeichnis den meisten Speicherplatz beansprucht, das Verzeichnis mit dem meisten Speicherverbrauch eingeben und jedes Klicken erneut anklicken ... [Schlafen] ...

... Ich interessiere mich jedoch dafür, warum ich dieses komische Ergebnis bekomme. Wenn ich mir das anschaue Program Files (x86), bekomme ich ein Ergebnis, das einem Fußball (nicht-amerikanischen) Fußball in den Mund stopft . (Wieder spreche ich über das Verhältnis der Größen; das Volumen meines Mundes hängt nicht von meinem Problem ab.)

bballdave025@WORK:~$ du -sh /mnt/c/Program\ Files\ \(x86\)/ 11T /mnt/c/Program Files (x86)/ 

(Windows / File Explorermeldete eine Größe von 22,8 GB ... nachdem ich 30 Sekunden gewartet hatte.)

Quellen und Versuche

Aus dieser Super User-Antwort kam ich auf die Idee, zu überprüfen, ob meine Situation nicht der Fall war

Die Dateien, die Sie entfernt haben, werden wahrscheinlich noch von einem Prozess geöffnet.

bballdave025@WORK:~$ lsof -a +L1 /mnt/c/Program\ Files/ bballdave025@WORK:~$ 

Da es keine Ausgabe gab, gehe ich davon aus, dass keine Dateien, die ich entfernt habe, noch von einem Prozess geöffnet werden.

Ich habe mir auch diese Frage angesehen und Antworten zu unterschiedlichen duErgebnissen unter Linux und Cygwin gegeben. Die in dieser Frage beschriebenen Größenunterschiede waren jedoch winzig, daher glaube ich nicht, dass das Problem ähnlich ist. Ich bin mir zwar sicher

Es ist daher keine Überraschung, dass dieselbe Dateigruppe unterschiedliche Festplattengrößen verwendet, wenn sie in unterschiedlichen Dateisystemen gespeichert sind.

Ich kann denken, dass es eine Überraschung für den gleichen Satz von Dateien zu bedienen jede unterschiedliche Festplattengröße, wenn sie wirklich an einem Ort gespeichert sind, auch wenn es unterschiedliche zugrunde liegende Möglichkeiten, um sie zu öffnen.

Nächste Schritte

Ich beschloss, einen Ordner auf meiner C:Festplatte zu erstellen, eine kleine Datei einzufügen und zu überprüfen, ob die Dateigröße wie erwartet war.

bballdave025@WORK:~$ mkdir -p /mnt/c/Users/bballdave025/little_guy bballdave025@WORK:~$ echo "This should make a small file." > /mnt/c/Users/bballdave025/little_guy/small_file.txt bballdave025@WORK:~$ du -sh /mnt/c/Users/bballdave025/little_guy/small_file.txt 17K /mnt/c/Users/bballdave025/little_guy/small_file.txt bballdave025@WORK:~$ du -shPx /mnt/c/Users/bballdave025/little_guy/ 17K /mnt/c/Users/bballdve025/little_guy/ 

17KB scheint für die kleine Textdatei groß zu sein. Wenn wir ein Byte pro Zeichen haben, würden wir 31 Byte erhalten. Ich weiß nicht, ob diese Übung - eine Textdatei zu erstellen und zu prüfen du- die Frage beantworten wird, aber es war Teil meiner Bemühungen.

Ich stecke fest. Ich möchte wirklich keine Ordner durchklicken. Ich möchte auch wissen, warum ich dieses komische Verhalten bekomme. Irgendwelche Ideen?


Systemdetails

bballdave025@WORK:~$ uname -a | head -n 1 Linux WORK 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux bballdave025@WORK:~$ bash --version | head -n 1 GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu) bballdave025@WORK:~$ systeminfo.exe | sed -n 's/^OS\ *//p' Unable to translate current working directory. Using C:\Windows\System32 Name: Microsoft Windows 10 Enterprise Version: 10.0.15063 N/A Build 15063 Manufacturer: Microsoft Corporation Configuration: Member Workstation Build Type: Multiprocessor Free 
1
Ich könnte meine Vorurteile hinter sich lassen und etwas aus dem `versuchen Windows-Befehlszeile `oder sogar meine alten PowerShell-Fähigkeiten abstauben. Ich glaube, ich könnte sogar die Kugel beißen und zu jedem Verzeichnis in der `File Explorer'-Benutzeroberfläche gehen, auf jeden Ordner klicken, 'Eigenschaften' auswählen, herausfinden, welches Unterverzeichnis den meisten Speicherplatz beansprucht, das Verzeichnis mit der meisten Speicherauslastung eingeben und jedes Mal erneut anklicken Ordner ... [schlafend] ... Ich bevorzuge eine `bash`-Lösung (leistungsfähiger, schneller) und bin auch neugierig auf das merkwürdige Verhalten. bballdave025 vor 5 Jahren 0
WSL erbt die Berechtigung (Art) von einem Windows-Konto. Wenn Sie also wsl.exe als Administrator öffnen, können Sie mit Linux-Tools auf ProgramFiles zugreifen. Bei dieser Frage handelt es sich um einen 90% -igen Superuser-Typ. Biswapriyo vor 5 Jahren 0
Danke für Ihre Hilfe. Ich hatte den von @KamilMaciorowski freigegebenen Link nicht gesehen. Ich werde die Frage aus StackOverflow löschen. Eigentlich werde ich sehen, ob es möglich ist, die Kommentare beider Posts zusammenzuführen. Wenn es einen Moderator gibt, der das sieht, könnten Sie das tun oder mich wissen lassen, wie? Wenn es bis morgen früh nicht zusammengeführt / migriert wurde, lösche ich die SO-Frage. Danke noch einmal. bballdave025 vor 5 Jahren 0
[Sieht so aus, als hätte dieser Fehler vor anderthalb Jahren gemeldet] (https://github.com/Microsoft/WSL/issues/1894), dann mehrmals (siehe unten auf der Seite). [Sysinternals hat eine Windows-native Version von du, die funktionieren sollte] (https://docs.microsoft.com/en-us/sysinternals/downloads/du), obwohl ich es zuletzt in Vista / Seven probiert habe. dave_thompson_085 vor 5 Jahren 2
Guter Punkt, @ KamilMaciorowski. Ich habe den anderen bereits gelöscht, weil es nur einen Kommentar gab, der eher humorvoll war. Vielen Dank, dass Sie mir geholfen haben, die Website zu verstehen und sie besser zu nutzen. bballdave025 vor 5 Jahren 0

0 Antworten auf die Frage