WSLで表示されるディスク使用量はWindowsも含む

Linuxであれば通常はdfコマンドでディスクの使用量を表示させることができる。オプションとして「-h」を指定すれば、人間が理解しやすい単位で表示してくれる。例えば次のスクリーンショットはWSLで動作しているUbuntu 18.04 LTSでdfコマンドを実行した結果だ。

WSLのUbuntu 18.04 LTSでdfコマンドを実行した結果

この結果を見る限りでは、それぞれのファイルシステムに58Gの領域が割り当てられているように見える。/に58G、/runに58G、/run/lockに58G、/run/userに58Gといった具合だ。さらにそれぞれが23Gは消費しており、36Gは空き容量とされている。かなり奇妙だ。/devに58Gも割り当てられているなど、通常はあり得ない状況になっている。

これはWSLで動作しているためだ。WSLはシステムコールをWindowsカーネルで実行するための機構で、専用のファイルシステムレイヤを被せているものの、基本的にはWindowsのファイルシステムをLinuxが利用している。試しに、Windows 10からディスクの使用量を調べると次のようになっていることがわかる。

Windows 10からディスク使用量を調べたところ

つまり、WSLのLinuxで動作しているdfコマンドは、Windows 10が認識しているディスクの使用量をそのまま報告しているだけということになる。これでは実際にどの程度のサイズが使われているのかはわからない。

duコマンドで実際に使われているサイズを調べる

「実際の使用量を調べることはできないのか」という話になるが、dfコマンドではなく、duコマンドを使用すれば(メタデータまで加味した量ではなくファイズサイズの合算値にはなるものの)、実際に使われている使用量を調べることができる。duコマンドの基本的な使い方は次の通りだ。

du -sh 《パス》

duコマンドはオプションとして「-s」を指定すると、指定したパス以下のファイルサイズの合計値を出力してくれるようになる。また、「-h」を指定すると人間が理解しやすい表記でサイズを表示してくれるので、「du -sh」をセットで覚えておくといろいろと便利だ。

次にduコマンドの実行例を示す。

WSLで動作するUbuntu 18.04 LTSでのduコマンドの実行例

duコマンドの実行結果を見ると、Linuxの領域は4Gくらいが使われていることがわかる。メタデータも含めてWindowsのファイルシステムが消費する量を加味するとduコマンドの出力がディスクの使用量や空き容量という点ではそれほど正確ではないものの、目安としては十分に利用できると思う。

完全仮想化とWSLの違いには少々注意

WSLは改善が進められているため、毎日使っていると通常の完全仮想環境、またはネイティブに動作している環境のようにも思える。しかし、いくつかの機能は動作していないし、今回のdfコマンドのように完全仮想化環境とは異なる結果が返ってくるものもある。デーモンが動作している必要があるようなサービスも、まだ使いやすいとは言えない状況だ。

こうした問題は今後、徐々に解決されていくものと見られるが、時々こうした違いに目を向けてみると良いのではないだろうか。違和感を調べていくと、どういった仕組みで動作しているのかを調べることにもつながり、知識を深めていく「パス」としても機能してくれるはずだ。