WindowsのWSL環境
インストールされたディストリビューションはデフォルトでCドライブにインストールされてしまいます。
私はWindowsで開発するときには、WSL2上のUbuntu18.04を利用しているのですが、うちのCドライブが残り7GBとかになってきたので、とうとうDドライブに移動させました。
この記事では、WSL2の稼働中のUbuntu-18.04を、D:\WSL\Ubuntu-18.04
へ移行した方法を記載していきます。20.04の場合でも、Ubuntu-18.04の部分を読み替えてもらえば同じ方法でいけます。
手順1. エクスポートする
移行したい、インストールされているディストリビューションをエクスポートします。tarファイルで出力されますが、このファイル自体の保存先はどこでも良いです。(下記例では、D:\WSL\ubuntu.tar
にtarファイルを出力するようにしています)
今回、自分がエクスポートしたいディストリビューションは、"Ubuntu-18.04"という名称になります。
ディレクトリを作成して、"Ubuntu-18.04"ディストリビューションを、ubuntu.tarファイルにエクスポートします。
cd D:\
mkdir WSL
cd WSL
wsl --export Ubuntu-18.04 ubuntu.tar
エクスポートを開始すると稼働中のディストリビューションだった場合には自動で停止されますが、事前に停止しておくのが良いでしょう。(自動で停止された場合、再起動しますか?のダイアログが出るので、エクスポート中は起動しないように注意しましょう)
エクスポートが完了して、もとのディストリビューションがもう不要なのであれば、下記コマンドで削除することができます。自分は、同じディストリビューション名で再インストールしたかったので、この時点で削除しておきました。
wsl --unregister Ubuntu-18.04
手順2. インポートする
エクスポートしたtarファイルを指定して、インポートします。
ファイルシステムが展開されるディレクトリを用意しておきます。
今回の展開先のディレクトリはD:\WSL\Ubuntu-18.04
としてます。
ディストリビューション名"Ubuntu-18.04"で、
ubuntu.tar ファイルを、D:\WSL\Ubuntu-18.04
に展開してインポート。
cd D:\WSL
mkdir Ubuntu-18.04
wsl --import Ubuntu-18.04 Ubuntu-18.04 ubuntu.tar --version 2
このときに、WSL2で稼働させたい場合は、--version 2
の指定をお忘れなく。エクスポートしたディストリビューションが元々WSL2で稼働していたとしても、バージョン指定していないとWSL1でインポートされてしまいます。
あらかじめ wsl --set-default-version 2
と設定している場合は、上記のバージョン指定をしなくてもWSL2でインポートされるものだと思います。
インポートにも時間がかかります。
完了したら、wsl -l -v
で状態を確認できます。
もし、インストール済みのディストリビューションが複数ある場合、今回インポートしたディストリビューションが"既定"になってないことがあるので、設定したい場合は、wsl -s Ubuntu-18.04
としておくと良いでしょう。
手順3. ログインユーザーを設定する
ここまでくれば、起動してログインすることができますが、rootユーザーでのログインになっています。エクスポートする前のユーザーでデフォルトログインしたい場合は、レジストリエディタを使って編集する必要があります。
タスク バーの検索ボックスに 「regedit」と入力し、レジストリエディターを起動します。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss 配下にDistributionNameが"Ubuntu-18.04" となってる項目があります。 (目的のディストリビューション名です)
ここのDefaultUidという項目の値を、10進数で1000
と入力すればOKです。(または、16進数で3e8
)
手順4. 起動する
既定のディストリビューションに設定されているなら、wsl
コマンドで起動します。既定でない場合は、wsl -d Ubuntu-18.04
で起動してログインできます。
まとめ
思ったより作業自体は簡単でしたが、エクスポートとインポート作業に結構時間がかかります。しかも自分は、インポート時にversionオプションを指定し忘れてたので、バージョン変換の作業もすることになって余計に時間がかかりましたが。おかげで自分のCドライブは50GBほどの容量を空けることができています。
wslコマンドのオプション
作業はPowerShell上で行います。
wslコマンドを利用するので、特に重要なオプションだけ記載しておきます。wsl --help
でチェックしておきましょう。
ディストリビューションの一覧
--list, -l [オプション]
ディストリビューションの一覧を表示します。
オプション:
--verbose, -v
すべてのディストリビューションについての詳細情報を表示します。
wsl -l -v
とすることで、インストールされているディストリビューションと、稼働バージョンがWSL1なのかWSL2なのかを確認することができます。あと既定のディストリビューションがどれになっているのかも確認ができます。(既定というのは、wslコマンドを単純実行したときに起動するディストリビューションのこと)
ディストリビューションを選択して起動
--distribution, -d <ディストリビューション>
指定したディストリビューションを実行します。
--user, -u <ユーザー名>
指定したユーザーとして実行します。
wslコマンドを単純実行すると、既定のディストリビューションが起動します。それ以外のディストリビューションを起動してログインしたい場合は、このオプションを使います。wsl -d Ubuntu-18.04
など、wsl -l
で確認したディストリビューション名を指定して起動します。
-u
オプションを使うことで、指定のユーザーでログインできます。
インポートしたディストリビューションの場合、このオプションを指定しないとrootでログインするようです。(後述する、レジストリを編集することで変更可能)
ディストリビューションの停止
--terminate, -t <ディストリビューション>
指定したディストリビューションを終了します。
エクスポートとインポート
--export <ディストリビューション> <ファイル名>
ディストリビューションを tar ファイルにエクスポートします。
--import <ディストリビューション> <インストール場所> <ファイル名> [オプション]
指定した tar ファイルを新しいディストリビューションとしてインポートします。
オプション:
--version <バージョン>
新しいディストリビューションに使用するバージョンを指定します。
エクスポートすると、指定のファイル名でtarファイルを出力します。インポートする時は、そのtarファイルを指定することになります。
インポートするときに注意しないといけないのは、WSL2で稼働させたい場合は、インポート時に--version 2
と指定しておくことです。自分はこれをしてなかったせいでインポートして起動したら、WSL1になってしまっていました。涙
一応、--set-version
オプションを指定すれば、あとからでもWSL2に変換は可能です。
ディストリビューションの抹消
--unregister <ディストリビューション>
ディストリビューションの登録を解除します。
インストールされている不要なディストリビューションはこのオプションで登録抹消できます。
既定のディストリビューションを設定
--set-default, -s <ディストリビューション>
ディストリビューションを既定として設定します。
既定のディストリビューションに設定することで、wslコマンドを単純実行したときに起動するディストリビューションとなります。
WSLのバージョン変更
--set-version <ディストリビューション> <バージョン>
指定したディストリビューションのバージョンを変更します。
wsl --set-version Ubuntu-18.04 2
とすることで、WSL2バージョンに変換されます。(変換にはかなり時間がかかります)
新規インストール時のWSLバージョンを変更
--set-default-version <バージョン>
新しいディストリビューションの既定のインストール バージョンを変更します。
新規でディストリビューションをインストール、またはインポートした場合、デフォルトではWSL1になります。これをWSL2をデフォルトとしたい場合は、このオプションで設定が可能です。