WSL2(Windows Subsystem for Linux 2)では、仮想マシンを使ってLinux環境を実現している。そのネイティブファイルシステムは、仮想ハードディスクファイル上にある。「ext4.vhdx」と呼ばれるこのファイルは、容量可変形式で作られ、最大容量は256GBに指定されている。この値は固定値なので、場合によっては足りなくなることがある。今回はこの容量を拡大する方法を解説しよう
仮想ハードディスクファイルの最大容量を拡大する
仮想ハードディスクファイルには一般に「容量可変」と「容量固定」の2タイプがあるが、通常は利用した分だけ記憶容量を消費する、容量可変を用いるケースが多い。容量可変の仮想ハードディスクファイルでは最大容量が指定してあり、ソフトウェア側からはその容量を持つドライブであるように見える。
容量可変の仮想ハードディスクファイルはDISKPARTコマンドを使うことで最大容量を増やすことが可能だ。ただし、対象がext4形式の場合は、DISKPARTコマンドの機能には制限がある。
たとえば、最大容量を小さくすることはNTFS形式のみ可能で、ext4形式でフォーマットされた仮想ハードディスクファイルには対応していない。もっとも最大容量は名目上の容量であり、これを大きくしたからといって、ただちにファイルサイズが拡大するわけではない。その意味では気軽に拡大してしまいがちだが、小さくはできないとなると注意が必要だ。
どうしても小さくしたい場合には、wsl.exeでディストリビューションをファイルにエクスポート(--exportオプションを使う)して、新規に作成した同一ディストリビューションにインポート(--importオプション)するしかなさそうだ。また、最大容量を変更したあと、WSLディストリビューション側で容量を再認識させる必要がある。
WSLディストリビューションのext4.vhdxを探す
最初に処理対象となるWSLディストリビューションのext4.vhdxファイルを探す必要がある。DISKPARTコマンドで仮想ハードディスクファイルをあつかうには、そのフルパスが必要になるからだ。
ext4.vhdxは、ユーザーフォルダー以下の「Appdata\packages」にあるWSLディストリビューションのパッケージフォルダーのLocalStateフォルダーに含まれている。インストールしているWSLディストリビューションが1つしかなければ、探すのはそれほど難しくない。しかし、複数のWSLディストリビューションがある場合には、以下の方法を使う。なお、コマンドの機能などからWindows PowerShellを用いる。また、DISKPARTコマンドには管理者権限が必要となる。
まずは処理するWSLディストリビューションが停止していることを確認する。開いているコンソールがあれば、exitで抜け、念のため「wsl.exe --shutdown」を実行しておく。次に以下のコマンドを使って、ディストリビューションのパッケージ名を探す。また、表は入手可能な主なWSLディストリビューションの名称とパッケージ名である。
Get-AppxPackage "*WSLディストリビューション名の一部*" | select packagefullname
Get-AppxPackageの引数は、たとえばUbuntu-18.04を見つけたい場合には、「Get-AppxPackage "*Ubuntu*"」などと指定する。パッケージ名がわかったら、次はユーザーフォルダーのAppData\local\packageの下でパッケージ名を探す。PowerShellなら、
Get-ChildItem $env:LOCALAPPDATA\packages\
と入力して、パッケージ名先頭の文字(たとえば、Ubuntu系ならCanonicalなど)を続けて入力してタブキーで補完してパッケージのパスを作り、さらに「\localstate\ext4.vhdx」を続けてフルパスを得る。これをクリップボードにコピーしておく。
続いて実際にDISKPARTを起動する
DISKPARTコマンドを起動する。
もし、起動したコンソールが管理者権限でなければ、別ウィンドウが開く。DISKPARTコマンドのプロンプトでVDISK(仮想ディスク)を選択するために以下のサブコマンドを入れる。
select vdisk file="ext4.vhdxのフルパス"
その後、確認のために「detail vdisk」コマンドで情報を表示させる。デフォルトのままであれば、「仮想サイズ」に256GBと表示されているはずである。
では、最大サイズを300GBに拡大する。それには、
expand vdisk maximum=307200
とする。
307200は、300×1024である。maximumではMB単位でサイズを指定するため、GBにするには1024を掛ける必要がある。コマンドが終了したらexitコマンドでDISKPARTを終了させる。
次に仮想ハードディスクファイルの最大容量を変更したWSLディストリビューションを起動する。対象ディストリビューションを間違えないように注意する。起動はwsl.exeからで、以下のようにきちんとディストリビューション名をつけたほうがよい。
wsl.exe -d Ubuntu-18.04
起動したら、先に現在のファイルシステムのサイズを確認しておく。それには、dfコマンドを使う。
df -h
ここで、ルートファイルシステムを確認しておく。dfコマンドの出力で「Mounted on」が「/」になっているデバイスがルートファイルシステムである。前記の例では「/dev/sdc」だった。ただし、実行環境により、他のデバイス名になることがある。デバイス名が判定できたら、以下のコマンドを使う。
sudo resize2fs /dev/sdc 300G
このコマンドは、パーティション内のファイルシステムのサイズを変更するもの。これで/dev/sdcの容量が大きくなったはずだ。最後にexitコマンドでWSLを抜け、一回シャットダウンしておく。
仮想ハードディスクの最大容量の変更は、NTFSならマウントしてGUI(「コンピュータの管理」→「ディスクの管理」)からでも可能なのだが、Windowsのツールはext4に対応していないため、ファイルシステムの変更(前記のresize2fsに相当する機能)をすることができない。
一方でDISKPARTコマンドは、今の感覚からすれば相当古いものであり、パスの補完機能がないため、事前にフルパスを調べておく必要がある。しかしWSLディストリビューションは、Microsoftストアのパッケージとして配布されているため、その位置を探すのが面倒。できればPowerShellに管理ツールぐらい用意してほしいところだ。
この連載の記事
-
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる - この連載の一覧へ