コンピューター上のどのファイルが最も多くのスペースを使用しているかを調べようとしているときに、質問に遭遇しました。これは、Windows Subsystem for Linux(WSL)/ bash
から検出された合計マシンメモリに関する情報です。
bballdave025@WORK:~$ df -h /mnt/c
Filesystem Size Used Avail Use% Mounted on
C: 239G 231G 7.8G 97% /mnt/c
私の質問は、スペースをクリアする方法についてではないことに注意してください。
Program Files
ディレクトリを確認することから始めました。
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/
主な問題
私のWSLbash
du
は、私のマシン(239GB
のメモリがある)で、私のProgram Files
ディレクトリが占有していると言っています。 2.5TB 利用可能なメモリの239GB
の。飲み込まずに2パイントの水を口に含んでいるようなものです。 (これはサイズの比率を示すためだけのものです。私の問題は水に関係していません。)
ちなみに、私には管理者権限がありません。問題を解決するためのSudo !!
はありません。この投稿を書き続けるときは、Permission denied
エラー(willrealSudo
なしで発生します)を省略します。また、私は仕事用のコンピューターを使用しているため、アクセスできないものがあることにも注意してください。
主な質問:私の状況でディスク使用量を確認する比較的簡単な方法はありますか?つまり、Windowsサブシステムを使用してWindowsC:
ドライブのディスク使用量を確認しますLinuxの場合?
二次質問:ここで一体何が起こっているのですか? Program Files
ディレクトリが自分のマシンに存在するよりも10倍多くのスペースを占有しているというレポートを受け取るのはなぜですか?
ちなみに... Windowsによると、Program Files
のサイズは4.83 GB
です。これは、File Explorer
を使用して、Program Files
フォルダーを右クリックし、[プロパティ]を選択して見つけた事実です。
私が最初に考えたのは、会社のコーディングソフトウェアやウイルス対策プログラムなどにシンボリックリンクやドライブマッピングが含まれている可能性があるため、man
ページでdu
を確認しました。私は次の2つのフラグを見つけました。これは役立つと思いました。
-P, --no-dereference don't follow any symbolic links (this is the default) -x, --one-file-system skip directories on different file systems
しかし、du -shP /mnt/c/Program\ Files/
、du -shx /mnt/c/Program\ Files/
、さらにはdu -shPx /mnt/c/Program\ Files/
でさえ2.5T
をくれました。さらに言えば、shouldシンボリックリンクをたどるオプションdu -shL
もそうです。 2.5T
を出力します。私が試した他の多分関連するオプションであるdu -shD
とdu -shH
についても同じで、それらすべてに同じ--2.5T
が与えられました。
私の次の考えは、おそらくWindowsショートカットが物事を台無しにしているので、それらを除外してみました。 (このコードが実際にショートカットをたどることを妨げるかどうかはわかりませんが、試してみる価値があると思いました。)サイコロはありません。
bballdave025@WORK:~$ du -sh --exclude=*.lnk /mnt/c/Program\ Files/
2.5T /mnt/c/Program Files/
偏見を残して、<shudder> Windows Command Line </shudder>
から何かを試したり、古いPowerShell
スキルをほこりで払ったりすることもできます。弾丸を噛んでFile Explorer
GUIの各ディレクトリに移動し、各フォルダをクリックして[プロパティ]を選択し、最もスペースを占めるサブディレクトリを見つけて、メモリ使用量が最も多いディレクトリに入り、各フォルダをクリックを繰り返すこともできると思います。 。 [睡眠] ...
...しかし、なぜこの奇妙な結果が得られるのか興味があります。 Program Files (x86)
を見ると、詰め物のような結果が得られます。 サッカーボール (非アメリカンフットボール)私の口の中で。 (繰り返しになりますが、サイズの比率で話しています。口のボリュームは問題とは関係ありません。)
bballdave025@WORK:~$ du -sh /mnt/c/Program\ Files\ \(x86\)/
11T /mnt/c/Program Files (x86)/
(Windows/File Explorer
は22.8GBのサイズを報告しました... 30秒待った後。)
ソースと試行
このスーパーユーザーの回答 から、自分の状況がそうではないことを確認してみるというアイデアが浮かびました
削除したファイルは、おそらくまだプロセスによって開かれています。
bballdave025@WORK:~$ lsof -a +L1 /mnt/c/Program\ Files/
bballdave025@WORK:~$
出力がなかったので、削除したファイルはまだプロセスによって開かれていないと思います。
また、LinuxとCygwinでのさまざまなdu
結果について この質問と回答 も調べました。ただし、その質問で説明されているサイズの不一致はごくわずかであったため、問題が類似しているとは思いません。私はそれを確信している間
その場合、同じファイルセットが異なるファイルシステムに保存されたときに異なる[原文のまま]ディスクサイズを使用することは驚くことではありません。
I do同じファイルセットを使用するのは驚きだと思いますany根本的な方法が異なっていても、実際に1か所に保存されている場合はディスクサイズが異なりますそれらにアクセスします。
次のステップ
C:
ドライブにフォルダーを作成し、小さなファイルを入れて、ファイルサイズが期待どおりであることを確認することにしました。
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は、その小さなテキストファイルでは大きいように見えます。 1文字あたりのバイト数がある場合、31バイトになります。テキストファイルを作成してdu
をチェックするというその演習が質問に答えるのに役立つかどうかはわかりませんが、それは私の努力の一部です。
行き詰まっています。私は本当にフォルダをクリックしたくありません。また、なぜこの奇妙な振る舞いをするのか知りたいです。何かアイデアはありますか?
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
私はあなたと同じコマンドを試しました:du -sh /mnt/c/Program\ Files/
と私の報告は、Windowsが報告したもので正しく報告されました。
バグでパッチが適用されているか、ファイルシステムに私が行っていないことがある可能性があります。リンク/ショートカットの掘り下げはすでに行っていますが、まだ見落とされていることがあるのではないでしょうか。
Bash on Ubuntu on Windows
"WSLLegacy"とUbuntu
を再確認しましたが、どちらも同じように報告されました。
報告されたバグ に関する質問へのコメントを見たところ、言及されたすべてが修正されたようです????
これが1年以上前に尋ねられたことを考えると、おそらくこの問題はもう発生していません。その多数がどこから来ているのかを特定するために、私が試みるいくつかの追加のステップがあります。
ncdu
を試すことをお勧めします。 Ubuntu/WSL [Ubuntu Flavour]には、次の方法でインストールできます。
Sudo apt install ncdu
これにより、システムがクロールされ、スペースの行き先が視覚的に示されます。これは、そのプログラムファイルのマウントでディスクが使用されていると思われる場所を特定するのに役立ちます。これが同じ問題を示しているかどうかを確認したいと思います。 ncdu
はdu
を使用していると思いますので、これを回避するために舞台裏でいくつかのフラグを使用しない限り、同じように表示されると思います。
ncdu
を使用して特定のディレクトリのみをクロールするのは、非常に簡単です。次のコマンドを使用して、WindowsのProgram Files
ディレクトリの使用状況のみを表示できます。
ncdu /mnt/c/Program\ Files
特にファイルシステムが間違いなくNTFSであることを考えると、Windowsを使用してWindowsオペレーティングシステムのディスク使用量を判断することをお勧めします。
WSLインスタンスだけでディスク使用量を確認する場合は、ncdu
を使用し、/mnt
ディレクトリを無視して、Linuxシステムの使用量のみを表示し、Windowsマウントは表示しないことをお勧めします。
誤解しないでください、私の興味はあなたの状況で何が起こっているかについても同様に刺激されます。
Windowsマウントを無視してLinuxディスクの使用状況を確認するには、次のコマンドを実行できます。
ncdu --exclude /mnt
正しく思い出せば、テキストファイルに数文字しか入力しなくても、ドライブのセクターを占有していることになります。ダブルチェックNTFSドライブシステムではこれを再現できませんでしたが、FAT32では再現できました。 NTFSはWindowsで使用されるため、Linuxを介したレポートは、Linuxが使用しているファイルシステムの解釈を通じて表示されている可能性があります。
以前は、一部のアプリは数千の小さなファイルを作成し、100万の紙切れによる死のようでした。また、何千もの小さなファイルを転送すると、1つの大きな連続ファイルよりもはるかに時間がかかります。
実際のサイズとディスク上で占めるサイズを確認できることに注意してください。
これがディスクレポートに大きな不一致が見られる理由ではないかと思いますが、何百万もの小さなファイルがある場合は興味深いかもしれません。一部のキャッシュ/ストレージスキームは、迅速なバイナリ検索アクセスのために多くの小さなファイルに分岐する傾向があります。