1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

ストア版WSLをアップデートまたはダウングレードする

ASCII.jp / 2023年2月12日 10時0分

 今回は、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.exe --update --pre-release」でプレリリース版(Pre-release版)のWSLにアップデートできる

ストア版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の正式パッケージ名を取得、これを使ってパッケージを削除する。

WSLパッケージファイルをあらかじめダウンロードしておき、管理者権限で起動した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ならば対策としてダウングレードができるわけだ。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください