今回は、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」を付ける必要がある。
リストアする場合には、複数の方法がある。1つは、「wsl.exe --import」コマンドを使って、新規にディストリビューションを追加する方法だ。ただし、この方法では、バックアップしたWSLディストリビューションとは異なるWSLディストリビューションを新規に作成する必要がある。具体的には、
wsl.exe --import <新ディストリビューション名> <インストールパス> <VHDXファイルパス> --vhd
とする。
このコマンドを実行すると、指定したインストールパスに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ならば対策としてダウングレードができるわけだ。
この連載の記事
-
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 -
第447回
PC
この秋登場のWindows 11の新バージョン、Ver.24H2の状況を見る -
第446回
PC
Windows 11のフォトアプリがUWPからWin32アプリになったことで今更わかるUWPの問題点 -
第445回
PC
次期Windows 11ではAndroidのファイルをエクスプローラーからアクセス可能になる -
第444回
PC
外部ファイルをExcelに読み込む際の作業を効率化するPower Queryの活用 -
第443回
PC
Windows Terminalで採用されたCascadia Codeフォントを使うとプログラムを書くとき断然見やすい -
第442回
PC
Copilot+ PCで実現されるローカル推論で「対クラウド企業」を指向するMicrosoft -
第441回
PC
WSL以前から40年以上続く、Windows(Microsoft)とUNIXとの関わり -
第440回
PC
そもそも「Copilot+ PC」とは何なのか? -
第439回
PC
今更more.comを使うのか!? Windowsでのページングを考える -
第438回
PC
Windowsはなぜ再起動が必要になるのか? - この連載の一覧へ