WSL2環境をDドライブに移動する。

WindowsのWSL環境
インストールされたディストリビューションはデフォルトで
Cドライブにインストールされてしまいます。

私はWindowsで開発するときには、WSL2上のUbuntu18.04を利用しているのですが、
うちのCドライブが残り7GBとかになってきたので、とうとうDドライブに移動させました。

この記事では、WSL2の稼働中のUbuntu-18.04を、D:\WSL\Ubuntu-18.04 へ移行した方法を記載していきます。

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をデフォルトとしたい場合は、このオプションで設定が可能です。

手順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ほどの容量を空けることができています。

タイトルとURLをコピーしました