目次
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でディレクトリ名などを見ていたのでなんとなう予測ができました。 (これ、他に知る方法あるのかなぁ?)
ディストリビューションの移動は次のような手順になります。
- wslのshutdown
- エクスポート(ディストリビューションのコピー)
- 今あるディストリビューションを削除
- インポート(今ある名前で2.のファイルをインポート)
まずは停止です。これをやらないとエクスポートができないので。
D:\>wsl --shutdown
エクスポート
次にエクスポートです。 今回は以下の2種類の仮想環境をエクスポートします。
- Ubuntu
- docker-desktop-data
エクスポートでは、元のディストリビューションのファイル(Cドライブにあるファイル)が消えることはありません。
また、エクスポートの形式として、tar
とvhdx
の2種類が指定できます。
エクスポートのコマンドのデフォルトはtar
形式ですが、エクスポート元のファイルがvhdx
なので、vhdx
でエクスポートしたほうがCPUにやさしかったです。
ちなみに、docker-desktop-data
はtar
形式でエクスポートしてインポートしました。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