WSL2の仮想ハードディスクvhdxファイルを移動する

## はじめに
Zybo-Z7の開発環境としてWindows版のVivadoとVitis、WSL2のUbuntu（18.04.6 LTS）にPetaLinux、Linux版のVivdoとVitisをインストールしたら、465GBのC:ドライブの空き容量が心ものなくなってしまったので、WSL2の仮想ハードディスクファイル（vhdxファイル）をD:ドライブに移動した。

![ドライブとデバイス-動前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/43af1a76-837d-5b84-60e1-296456b65972.png)

やり方としては、
- ディストリビューションを別領域に複製後、元のディストリビューションを削除
- ディストリビューションをexportし、ディストリビューションを削除、そして、exportしたファイルをimport
の２つあるので、それぞれをやってみた。

## 準備

### 起動中のUbuntuを終了する
- ```exit```でWindowsターミナルを閉じただけでは、Running状態のままなので、```wsl --shutdown``` か ```wsl --terminate ディストリビューション``` で終了させる。
  - WindowsターミナルのUbuntuで```exit``` 
![Ubuntu_exit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/eea69399-fdae-1060-736c-506605353668.png)
    ``` :PowerShell
      PS C:\Users\ozora> wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-18.04    Running         2
    ```
<be>

- wslのコマンドで終了させる
   ```:PowerShell
    PS C:\Users\ozora> wsl --terminate Ubuntu-18.04
    この操作を正しく終了しました。
    PS C:\Users\ozora> wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-18.04    Stopped         2
    ```
### vhdxファイルの場所を確認する

- インストールされたvhdxファイルは、```C:\Users\ユーザ名\AppData\Local\Packages\CanonicalGroupLimited.○○○○\LocalState```にある
  - Ubuntu 18.04LTSをインストールした私の環境では、○○○○の部分は```Ubuntu18.04LTS_79rhkp1fndgs```だった。
- 複数のディストリビューションをインストールしているときは、vshxファイルの選択を間違えないように
  ![元のvhdxファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/d16a8ffd-63d8-0274-2f36-38df168349ea.png)

## vhdxファイルの複製

- 複製と言っても、実はvhdxファイルを import である。
- ただし、異なるディストリビューション名にする必要がある
- ```--import```オプションは、指定されたファイルを新しいディストリビューションとしてインポートする。デフォルトは tar ファイルだが、```--vhd```オプションで vhdx ファイルを指定できる。
- ```wsl --import 新しいディストリビューション名 複製元vhdxファイルのパス名 複製先vhdxファイルのパス名 --version 2 --vhd```
- ここで注意してほしいのは、フォルダの区切りは'\'（バックスラッシュ）で入力する必要がありそうだということ。キーボードから'¥'を入力したら、区切りではなく'¥'という文字として認識されてしまった。
- 本家のディストリビューション名が Ubuntu-18.04 なので '-' を '_' に変えた Ubuntu_18.04 にした。
  ``` :PowerShell
  PS C:\Users\ozora> wsl --import Ubuntu_18.04 D:\wsl\Ubuntu18.04LTS\ext4.vhdx C:\Users\ozora\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04LTS_79rhkp1fndgsc\LocalState  --version 2 --vhd
  インポート中です。この処理には数分かかることがあります。
  この操作を正しく終了しました。
  ```
  <br>
- ディストリビューションリストを表示させて確認
  ``` :PowerShell
  PS C:\Users\ozora> wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-18.04    Stopped         2
    Ubuntu_18.04    Stopped         2
  ```
  <br>
- Ubuntu_18.04 を起動してみる
  ``` :PowerShell
  PS C:\Users\ozora> wsl -d Ubuntu-18.04
  root@DESKTOP-H3CE8QA:/mnt/c/Users/ozora#
  ```
  <br>
- 起動はできたけれど、なぜか root でログインされてしまった。

  ``` :PowerShell
  PS C:\Users\ozora> wsl -d Ubuntu_18.4
  ozorakobo:/mnt/c/Users/ozora$
  ```
  <br>

  - ```--user``` or ```-u``` オプションで、実行するユーザを指定することができる
    ``` :PowerShell
    PS C:\Users\ozora> wsl -d Ubuntu_18.04 -u ozorakobo
    ozorakobo:/mnt/c/Users/ozora$
    ```
    <br>
  - あるいは、```/etc/wsl.conf``` でユーザを指定してもよい。
    ``` :/etc/wsl.conf
    [boot]
    systemd=true
    [user]
    default=ozorakobo
    ```
    <br>
  - wsl.configに[user]を追加して、起動してみる。
    ``` :PowerShell
    PS C:\Users\ozora> wsl -d Ubuntu_18.04
    ozorakobo:/mnt/c/Users/ozora$
    ```
    <br>

- Ubuntu_18.04 を終了する
  ``` : PowerShell
  ozorakobo:/mnt/c/Users/ozora$ exit
  logout
  PS C:\Users\ozora> wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-18.04    Stopped         2
    Ubuntu_18.04    Running         2
  PS C:\Users\ozora> wsl --terminate Ubuntu_18.4
  この操作を正しく終了しました。
  PS C:\Users\ozora> wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-18.04    Stopped         2
    Ubuntu_18.04    Stopped         2
  ```
  <br>
- 元のディストリビューションを削除する
  - ```--unregister``` オプションで、ディストリビューションの登録を解除し、ルート ファイルシステムを削除することができる。

  - ここでは、次の「vhdxファイルの export -> import」を行うため、複製した"Ubuntu_18.04"を削除する。 
  ``` :PowerShell
  PS C:\Users\ozora> wsl --unregister Ubuntu_18.04
  登録解除。
  この操作を正しく終了しました。
  PS C:\Users\ozora> wsl -l -v
    NAME           STATE           VERSION
  * Ubuntu-18.04   Stopped         2
  ```
- 無事 vhdxファイルの移動ができた。

## vhdxファイルの export -> import

- 現在のディストリビューション vhdxファイルと export し、別のパスに importする
- export後、ディストリビューションを削除すれば、同じディストリビューション名で import することができる
- 削除すると元に戻せないので、リスクを負うことなるので注意
- 手順として export するが、export せずファイルをコピーして、importしても大丈夫かもしれない
- ```--export```オプションは、ディストリビューションをファイルにエクスポートする。デフォルトは tar ファイルだが、```--vhd```オプションで vhdx ファイルを指定できる。
- ```wsl --export ディストリビューション名 export先vhdxファイルのパス名 --vhd```
- ここでは、D:¥Temp に export する
  ``` : PowerShell
  PS C:\Users\ozora> wsl --export Ubuntu-18.04 D:\Temp\Ubuntu-18.04.vhdx --vhd
  エクスポートが進行中です。これには数分かかる場合があります。
  この操作を正しく終了しました。
  PS C:\Users\ozora> dir d:\Temp
      ディレクトリ: D:\Temp
  Mode                 LastWriteTime         Length Name
  ----                 -------------         ------ ----
  -a----        2024/01/27     20:11   254678138880 Ubuntu-18.04.vhdx
  ```
- 思い切ってディストリビューションを削除する
  ``` :PowerShell
  PS C:\Users\ozora> wsl -l -v
    NAME           STATE           VERSION
  * Ubuntu_18.04   Stopped         2
  PS C:\Users\ozora> wsl --unregister Ubuntu-18.04
  登録解除。
  この操作を正しく終了しました。
  PS C:\Users\ozora> wsl -l -v
  Linux 用 Windows サブシステムにインストールされているディストリビューションはありません。
  
  使用可能なディストリビューションを一覧表示するには、'wsl.exe --list --online' を使用します
  インストールするには 'wsl.exe --install <Distro>' と指定します。

  ディストリビューションは、Microsoft Storeにアクセスしてインストールすることもできます:
  https://aka.ms/wslstore
  Error code: Wsl/WSL_E_DEFAULT_DISTRO_NOT_FOUND
  ```
  - ディストリビューションがなくなった。
- exportされたvhdxファイルをインポートする
  - 将来複数のディストリビューションを扱う可能性を考慮して、```D:\wsl\Ubuntu18.04LTS```に import する。
  - ディストリビューション名は、元と同じ ```Ubuntu-18.04``` とする。
  ``` :PowerShell
  PS C:\Users\ozora> wsl --import Ubuntu-18.04 D:\wsl\Ubuntu18.04LTS C:\Temp\Ubuntu-18.04.vhdx --version 2 --vhd
  インポート中です。この処理には数分かかることがあります。
  この操作を正しく終了しました。
  PS C:\Users\ozora> wsl -l -v
    NAME            STATE           VERSION
  * Ubuntu-18.04    Stopped         2
  ```
- インポートされた。ヨシッ！
  ``` :PowerShell
  PS C:\Users\ozora> wsl -d Ubuntu-18.04
  ozorakobo:/mnt/c/Users/ozora$
  ```
- 無事起動した。
- Vivado, vitisも起動できたので一安心。
  ![Vivado 20221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/5e8408c2-98a7-bb70-a0e0-943019621191.png)
  ![vitis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112480/9160664c-c31a-5efb-9d97-a26f7cf590e6.png)

## おわりに
- vhdxファイルがC:ドライブを大きく占めるほど大きくなってしまったため、D:ドライブに移動させた。
- 移動の際は、ディストリビューションの複製と export -> import の二つの寳保を試した。
- 200GB以上もあるvhdxファイルの移動を試みたため、import, export にとても時間がかかってしまった。サイズが小さいうちに移動したほうがよい。
- ディストリビューションを消去してから、import するのはリスクが大きくなるので、ディストリビューション名を変える必要はあるものの複製するほうがいいと思う。そういう意味でも、もし失っても痛手のないうちに移動させておくほうがいいだろう。