WSL2のディストリビューションの環境移行

Posted by johtani on Monday, July 24, 2023

目次

WSL2にUbuntuを入れて、開発とかはこちらを利用しています。 また、Docker DesktopもWSL2のバックエンドエンジンを利用しています。

知り合いとの話で、Ubuntuの外付けのSSDをマウントしたという話が出てきて、それだと遅くない?Ubuntu自体を移動できるんじゃないかな?という 流れになりました。 知り合いは、特に移動とかは考えてなかったのですが、自分のディスクの容量が今どのくらい使われているのかが気になり、調べてみると、 Cドライブの使用率が90%を超えてるじゃないですか。

WizTreeというソフトを前回入れていたのを思い出して、再度調べてみたところUbuntuらしきvhdxファイルのサイズが171GB、Docker Desktopのデータ領域のvhdxファイルのサイズが81GBと、結構な割合です。

前回は、Hyper-V管理ツールで仮想ディスクの圧縮処理を行ったのですが、Dドライブに移行したほうが安心できそうな気がしたので、移動の方法を調べました。

WSLコマンドのドキュメントが公式で公開されています。こちらのコマンドを元に作業をしました。 また、ググって出てきた記事も参考にさせていただきました。ありがとうございます。

まずは確認と停止

WSL2で使っているディストリビューションを確認します。コマンドは以下の通り。 実行した結果も含まれています。コマンドの実行にはコマンドプロンプトを使用しました。公式ドキュメントのドキュメントではスニペットはPower Shellと書かれてますが、コマンドプロンプトでも大丈夫そうでした。

D:\>wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

残念ながら、wslのコマンドでは実体がどこにあるのかを調べることができなかったですが、WizTreeでディレクトリ名などを見ていたのでなんとなう予測ができました。 (これ、他に知る方法あるのかなぁ?)

ディストリビューションの移動は次のような手順になります。

  1. wslのshutdown
  2. エクスポート(ディストリビューションのコピー)
  3. 今あるディストリビューションを削除
  4. インポート(今ある名前で2.のファイルをインポート)

まずは停止です。これをやらないとエクスポートができないので。

D:\>wsl --shutdown

エクスポート

次にエクスポートです。 今回は以下の2種類の仮想環境をエクスポートします。

  • Ubuntu
  • docker-desktop-data

エクスポートでは、元のディストリビューションのファイル(Cドライブにあるファイル)が消えることはありません。 また、エクスポートの形式として、tarvhdxの2種類が指定できます。 エクスポートのコマンドのデフォルトはtar形式ですが、エクスポート元のファイルがvhdxなので、vhdxでエクスポートしたほうがCPUにやさしかったです。 ちなみに、docker-desktop-datatar形式でエクスポートしてインポートしました。tar形式の場合は、ディスクのサイズが小さくなる可能性があるみたいです(不要なデータがvhdxの中に残っていたりする影響かと)。

コマンドは以下の通りです(詳細は公式ドキュメントを参照してください)。出力ディレクトリはあらかじめ作っておきました(作ってない場合の挙動は未確認です。)

D:\>wsl --export Ubuntu .\wsl\Ubuntu\ext4.vhdx --vhd

docker-desktop-dataはtar形式です。

D:\>wsl --export docker-desktop-data .\Docker\ docker-desktop-data.tar

ディストリビューションの削除(こわい?)

今ついているディストリビューション名を利用したいので、いったん、Cドライブ上にあるディストリビューションを削除する必要があります。 コマンドは公式ドキュメントにある--unregisterオプションを利用します。 以下のコマンドはUbuntuですが、docker-desktop-dataもやりました。

D:\>wsl --unregister Ubuntu

ちなみに、このコマンドを実行すると、Cドライブの容量がいきなり空きました。 コマンドいっぱつでなくなりました。きちんとエクスポートしてから実行しましょう。 (なんなら、一度、別名でインポートして動作確認するのもいいかもしれないです。私はしましたw)

インポート

インポートするオプションも2種類あります。vhdxファイルの場合は、インプレースでのインポート(vhdxファイルをそのまま利用する形式)が可能です。 Ubuntuについてはこちらを利用しました。この場合、vhdxファイルがそのまま利用されるため、バックアップとしては利用できなくなります。今回は170GBもあるので、これでいいかと。

D:\>wsl --import-in-place Ubuntu .\wsl\Ubuntu\ext4.vhdx

tarファイル(docker-desktop-data)の場合は、通常のインポートを行いました。

wsl --import docker-desktop-data D:\Docker\docker-desktop-data\ D:\Docker\docker-desktop-data.tar

この場合、tarファイルは残ったままで、新たにD:\Docker\docker-desktop-data\ディレクトリにext4.vhdxファイルが作られました。 バックアップも取りつつ移行したい場合は--importがいいかもしれません。 また、WSLはバージョン1とバージョン2があり、インポートの際にこの部分も気にする必要があるようです。 今回はすべてバージョン2で、かつ、wslのデフォルトのバージョンを2にしてあったので特に意識していません。

Ubuntu起動ユーザーの指定と注意点

公式ドキュメントに、既存のユーザーを変更するコマンドの記載があります。 インポートしたディストリビューションは、デフォルトユーザーがrootになっていることがあるようなので、Ubuntuのユーザーを次のようなコマンドで変更しました。

 ubuntu config --default-user johtani

公式ドキュメントの警告にもありますが、実行可能ランチャーがない場合があります。 今回のubuntuは、WSL2でUbuntuをインストールした時に作成されたコマンドで、unregisterした後にimportしてもきちんと動いたので問題にはなりませんでした。これは、インポートするときに、既存のディストリビューション名を利用したためと思われます。

エクスポートやインポートの検証するために、NewUbuntuという名前で別途インポートした時には、NewUbuntuという実行可能ランチャーは作成されず、上記のデフォルトユーザーの設定は別の方法が必要になります(罠だ)

docker-desktop-dataのほうは、特に変更してないけど動いてそうだからいいのかな? 前の設定の確認とかやっておくのがいいんだろうな、本当は。。。

まとめ

ということで、Cドライブに300GB近い空きができて、心の余裕もできました。 今回は、同じPC内で別のドライブへの移動でしたが、他のPCにもこれで移行ができそうですね。 たまにはバックアップをとっておくのもいいのかも?と思いました(やるかどうかはまた別の話)


comments powered by Disqus

See Also by Hugo


Related by prelims-cli