今回は、Microsoftストア版WSLをアップデートする、あるいはダウングレードする方法を解説する。
Microsoftストア版WSL(以下、WSL)は、Windows Insider Programのプレビュー版WindowsではPre-release版WSL(以下、プレリリース版WSL)がインストールされるが、通常版Windowsには「Latest」と呼ばれる「安定版WSL」がインストールされる。通常版Windowsでもプレリリース版WSLに「アップデート」することが可能で、逆にプレビュー版Windowsでは安定版に「ダウングレード」することができる。
現状のWSLは、以下の表のような状況にある。
プレリリース版はv1.1.2、安定版はv1.0.3である。WSLは、昨年11月にv1.0.0として正式版となったが、このとき、v1.0.0が安定版でv1.0.1、v1.0.3はプレリリース版だった。WSLは最初にプレリリース版として公開されたあと、ユーザー評価などを経て、そのうちの1つが安定版となり、これがMicrosoftストアで公開される。
WSLでは、アップデート後に挙動が変わり、これまで動作していたプログラムがうまく動かなくなるといった問題が出ることがある。このような場合には、過去のバージョンにダウングレードすることで状態復帰が可能だ。
WSLは、まだまだ改良が続けられており、バージョンが上がることは、新機能やバグ修正が提供されることになる反面、新たなバグや問題が発生する可能性もある。このようなときに、WSLのバージョンを切り替えることで、一時的な対策を取ることが。
WSLディストリビューションのバックアップ
WSLのアップデートやダウングレードは比較的簡単にできる。ただし、アップデートやダウングレード時の事故や環境の変化を考慮すると、事前にWSLディストリビューションをバックアップしておくほうが望ましい。
筆者が簡単に試してみたところでは、プレリリース版へのアップデート自体やダウングレードでは、仮想ハードディスクファイルが書き換えられることはなかったが、カーネルのバージョンが異なるなどで、ディストリビューションを起動すると、Linuxパッケージの入れ替えなどがある可能性がある。この状態でダウングレードすると、ディストリビューションの動作に影響が出るかもしれない。
WSLディストリビューションをバックアップするには、wsl.exeコマンドの「--export」オプションを使う。なお、バックアップ/リストア時は、常に「wsl.exe --shutdown」でWSL停止させて作業する。
通常の動作は、WSLローカルファイルシステムをtar形式でファイル化するが、「--vhd」オプションを付けることで、仮想ハードディスクファイルの出力が可能になる。これは、WSLディストリビューションパッケージのフォルダーにあるext4.vhdxとまったく同じものになる。具体的には、
wsl.exe --export <ディストリビューション名> <VHDファイルパス> --vhd
とする。なお、<VHDファイルパス>には、必ず拡張子「.vhdx」を付ける必要がある。

wsl.exeの「--export」オプションで指定したディストリビューションをバックアップできる。「--vhd」オプションを付けるとパッケージと同じvhdxファイルが得られる。「gci」「gp」「ft」は、それぞれGet-ChileItem、Get-ItemProperty、Format-Tableのエイリアス、fc.exeはWindowsのファイル比較コマンドである
リストアする場合には、複数の方法がある。1つは、「wsl.exe --import」コマンドを使って、新規にディストリビューションを追加する方法だ。ただし、この方法では、バックアップしたWSLディストリビューションとは異なるWSLディストリビューションを新規に作成する必要がある。具体的には、
wsl.exe --import <新ディストリビューション名> <インストールパス> <VHDXファイルパス> --vhd
とする。

wsl.exeの「--import」オプションでバックアップしたvhdxファイルから新規にディストリビューションを登録できる。wsl.exeコマンドでは、既存のディストリビューションに上書きでリストアすることができない。どうしても同じ名前にしたければ、本文にあるようにパッケージのext4.vhdxを直接置き換える
このコマンドを実行すると、指定したインストールパスにext4.vhdxファイルが作成される。ほかにファイルは作られず、あとはレジストリへの登録のみだ。つまり、WSLディストリビューションは、ext4.vhdxファイルのみあればよさそうだ。
もう1つの方法は、非公式の方法であるが、現行のWSLディストリビューションのext4.vhdxファイルを置き換える方法。筆者が試した範囲では問題がなかったが、あくまでも正式な方法ではないことを理解して実行してほしい。
以下のPowerShellコマンドで、WSLディストリビューションのインストール先を調べる。
gci HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | gp | ft DistributionName,Version,BasePath
コマンド出力のBasePathにあるフォルダーにext4.vhdxファイルがある。これをバックアップしたvhdxファイルで差し替えることで、リストアが可能だ。名前はext4.vhdx固定である。安全のため、ファイルを置き換える前にコピーしておくといいだろう。
また、「--export」で「--vhd」オプションをつけないと、tar形式でのアーカイブファイルになる。これはLinux側のtarコマンドやWindows付属のtar.exeで扱うことが可能だ。必要なファイルがわかるのであれば、エクスポートしたtarファイルから特定のファイルを抜き出すことも可能だ。以下の表にtarコマンドの表示、解凍コマンドを示す。
プレリリース版へのアップデート
wsl.exeコマンドの“--update”オプションに“--pre-release”オプションを追加することで、最新のプレリリース版へのアップデートができる。具体的には、
wsl.exe --update --pre-release
を実行する。これにより、安定版(原稿執筆時点ではv1.0.3)から、プレビュー最新版(同v1.1.2)にアップデートされる。状態の確認には、「wsl.exe --version」を使う。
ストア版WSLのダウングレード
ダウングレードには、あらかじめWSLパッケージをGitHubからダウンロードしておき、PowerShellでWSLパッケージを削除し、ダウンロードしたWSLパッケージをインストールする。ストア版WSLパッケージは以下のURLからダウンロードできる(https://github.com/microsoft/WSL/releases)。
各バージョンのところに「Assets」という項目があり、「Microsoft.WSL_【バージョン番号】_x64_ARM64.msixbundle」というファイルがあるのでこれをダウンロードする。ここでは安定版v1.0.3の「Microsoft.WSL_1.0.3.0_x64_ARM64.msixbundle」をダウンロードしたとする。
ダウングレードの前にWSLを「wsl.exe --shutdown」で停止させておく。管理者権限でPowerShellを起動し、WSLの正式パッケージ名を取得、これを使ってパッケージを削除する。
原稿執筆時点でのパッケージ名は以下のものだ。
MicrosoftCorporationII.WindowsSubsystemforLinux
頻繁に変更されることはないと思われるが、念のため以下のコマンドで確認してほしい。もし変更されているなら、Get-AppxPackageコマンドの引数を新しい名前に合わせる。
Get-AppxPackage "Microsoft*Subsystem*Linux*" | select Name
次に以下のコマンドを使い、WSLパッケージを削除する。
wsl.exe --shutdown
$Package = Get-AppxPackage MicrosoftCorporationII.WindowsSubsystemforLinux -AllUsers
Remove-AppxPackage $Package -AllUsers
次に、ダウンロードしたWSLパッケージ(カレントフォルダにあるとする)を追加(インストール)する。
Add-AppxPackage .\Microsoft.WSL_1.0.3.0_x64_ARM64.msixbundle
これで安定版WSLに戻すことができた。最新のプレリリース版以外は、すべてこの方法で必要なWSLパッケージファイルをダウンロードしてPowerShellでパッケージ削除、追加する。
ストア版WSLになり、WSLはパッケージでインストールできるようになった。これにより、最新版だけでなく、プレリリース版へのアップデートやダウングレードが簡単にでき、柔軟性が高くなった。以前は問題が発生したときは次のバージョンを待たねばならなかった。過去には、WSLが起動できなくなるといった問題が発生したこともあった。こうした場合、ストア版WSLならば対策としてダウングレードができるわけだ。

この連載の記事
- 第382回 タブのウィンドウ間の移動も可能に! Windows Terminal v1.17/v1.18の新機能を見る
- 第381回 WindowsのPowerShellで画像ファイルのExif情報を扱う
- 第380回 Windowsにおける改行文字の扱い
- 第379回 Windows 11で利用頻度が高いプログラムを「簡単に起動」する方法
- 第378回 Windows 10で正式に導入され、11で改良が進んだ「仮想デスクトップ」
- 第377回 Windowsの「デスクトップ」や「ピクチャ」など、「既知のフォルダ(Known Folders)」を使う方法
- 第376回 COM(Component Object Model)は古い技術だが、いまだに現役 あらためて解説する
- 第375回 エクスプローラーのプレビューウィンドウについて解説する
- 第374回 Windows Insider ProgramにCanaryチャンネルが追加されたことで感じるWindows 12の気配
- 第373回 Windows Subsystem for Linuxでsystemdが動くようになったので試した
- 第372回 Windowsにおけるアプリ実行エイリアスとは?
- この連載の一覧へ