WSL — Windows Subsystem for Linux
Windows で Linux ディストリビューションを扱うための機能
Installation
- https://learn.microsoft.com/ja-jp/windows/wsl/install
- https://learn.microsoft.com/ja-jp/windows/wsl/setup/environment
WinX → A でターミナルを管理者として起動。
WSL を有効化してディストリビューションを入れる:
wsl --install既定では Ubuntu がインストールされる。
-d/--distributionでほかのディストリビューションも指定可能。wsl --list --onlineで利用可能なディストリビューションを確認できる。マシンを再起動する。
再起動後、インストール処理を経て Ubuntu が起動する。
Enter new UNIX usernaem:と表示されたらユーザーネームを設定:松田 # NG!: 日本語 y matsuda # NG!: スペースを含む y.matsuda # NG!: ピリオドを含むEnter new UNIX password:と表示されたらパスワードを設定。sudoとかするときに要求される。Retype new UNIX password:と表示されたらパスワードを再入力。
ビルド 18362 未満の古い Windows の場合は手動インストールが必要: https://learn.microsoft.com/ja-jp/windows/wsl/install-manual
WSL 内での作業は基本的に Linux と同じ。 日本語の公式ドキュメント や チュートリアル がちゃんと書かれているので、基本的にこれらを読む。
Windows (C ドライブ) 側からのアクセスは、WSL を有効化したときにエクスプローラに表示される “> Linux” から。
Disk Space の問題
- https://learn.microsoft.com/ja-jp/windows/wsl/disk-space
- https://qiita.com/TsuyoshiUshio@github/items/7a745582bbcd35062430
- https://01futabato10.hateblo.jp/entry/2022/12/02/095031
WSL2 のディスク消費は、WSL2 内部でファイルを消してもサイズが小さくならないらしい。 つまり、いくら WSL 側でファイルを rm しようが garbage collection しようが、 マシンのストレージは圧迫され続ける。
WSL2 で使用する Linux ディストリビューションのデータは仮想ハードディスク (VHD) で管理されていて、 ここがデータの本体を持っているから、だと思う。
なので根本的にディスク容量を開放するには、 VHD を最適化する必要がある。
VHD (.vhdx) を探す
一応正規の方法は:
PowerShell
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"らしい。 ls で探す場合:
PowerShell
> ls C:\Users\<username>\AppData\Local\Packages\Canonical* # _username_ は自分のものを
ディレクトリ: C:\Users\<username>\AppData\Local\Packages
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2023/01/05 21:33 CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
d----- 2023/01/05 21:36 CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc使っているディストリビューションのディレクトリ内にある LocalState\ に ext4.vhdx がいる。 (onWindows の方にはなかった。)
PowerShell
> ls C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\
ディレクトリ: C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024/06/06 14:04 208281796608 ext4.vhdxDISKPART を使って VHD を確認する
まず wsl をシャットダウンする:
PowerShell
wsl --shutdownDISKPART インタプリタを起動する:
PowerShell
diskpart先ほど調べた VHD を選択する:
DISKPART
DISKPART> select vdisk file=C:\Users\_username_\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
DiskPart により、仮想ディスク ファイルが選択されました。VHD の情報を確認する:
DISKPART
DISKPART> detail vdisk
デバイスの種類 ID: 0 (不明)
ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
状態: 追加済み
仮想サイズ: 1024 GB
物理サイズ: 193 GB
ファイル名: C:\Users\_username_\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
子: いいえ
親ファイル名:
関連付けられたディスク番号: 見つかりません。VHD ディスクスペースを最適化する
Attach -> Compact -> Detach の順に実行する。
Attach:
DISKPART
DISKPART> attach vdisk readonly
100% 完了しました
DiskPart により、仮想ディスク ファイルがアタッチされました。Compact (本質):
DISKPART
DISKPART> compact vdisk
100% 完了しました
DiskPart により、仮想ディスク ファイルは正常に圧縮されました。Detach:
DISKPART
DISKPART> detach vdisk
DiskPart により、仮想ディスク ファイルがデタッチされました。DISKPART を終了する (その前にもう一回 detail してもよい):
DISKPART
DISKPART> exit