WSL2 Ubuntu20.04 を WSL1 に戻すには地道な方法しかなかった


概要

WSL1 の Ubuntu 20.04 を移行してみたが、次の点で問題があったのでもとに戻した。

  • VS-Code の Paste Image が使えない
    WSL上の README.md に画像貼り付けできない。Windowsのクリップボードにある画像をLinux上のクリップボードに変換できない。

結果

地道な方法しかなかった。
なので、WSL2に移行するときは、 export して新規作成した環境で試してからが良いと思います。

  • 失敗 ... WSL2のイメージをexportしてWSL1としてimportする
    → importは成功したが起動できず
  • 成功 ... WSL2内のファイルをバックアップして、WSL2のイメージを消す、WSL1のイメージを再作成して、ファイルやパッケージ類を復元する

手順: WSL2に移行するときにexportしておかなかった場合

参考程度です。
失敗した手順からの復旧をしたので、実際には試せていません。

  1. WSLを開いている Terminal, VS-Code などのエディタ、Explorer などを閉じる
  2. wsl --export Ubuntu-20.04 ./Ubuntu.tar する
  3. wsl --import Ubuntu-20.04-WSL2 .\Ubuntu-20.04-WSL2 Ubuntu.tar --version 2
  4. WSL1 で Ubuntu-20.04 を入れ直す
  5. Ubuntu-20.04-WSL2 からファイルをtarで固めるなりして移行する

参考: 失敗した手順

  1. 状態を確認する

    PS C:\wsl_migration> wsl -l --verbose
      NAME            STATE           VERSION
    * Ubuntu-20.04    Running         2
    PS C:\wsl_migration> 
    
  2. ターミナルやVS-Codeを閉じる
    閉じた後、Stopped になっていることを確認する

    PS C:\wsl_migration> wsl -l --verbose
      NAME            STATE           VERSION
    * Ubuntu-20.04    Stopped         2
    PS C:\wsl_migration>
    
  3. exportを行う

    PS C:\wsl_migration> wsl --export Ubuntu-20.04 ./Ubuntu.tar
      NAME            STATE           VERSION
    * Ubuntu-20.04    Stopped         2
    PS C:\wsl_migration>
    
  4. Distribution を登録解除する

    PS C:\wsl_migration> wsl --unregister Ubuntu-20.04
    登録を解除しています...
    PS C:\wsl_migration> wsl -l --verbose
    Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。
    ディストリビューションは Microsoft Store にアクセスしてインストー 
    ルすることができます:
    https://aka.ms/wslstore
    PS C:\wsl_migration>
    
  5. 管理者で PowerShell を起動し、WSLのデフォルトのバージョン指定を 1 にする

    PS C:\WINDOWS\system32> wsl --set-default-version 1
    PS C:\WINDOWS\system32>
    
  6. Ubuntu-20.04 を再度導入する
    Windowsメニューにリンクがあればそれをクリックしてもよいし、Storeから導入してもよい。

    導入中

    PS C:\wsl_migration> wsl -l --verbose
      NAME            STATE           VERSION
      Ubuntu-20.04    Installing      1
    PS C:\wsl_migration>
    

    導入完了

    PS C:\wsl_migration> wsl -l --verbose
      NAME            STATE           VERSION
    * Ubuntu-20.04    Running         1
    PS C:\wsl_migration>
    
  7. Import する
    wsl --import <被らないNAME> <LocalState(rootfsとか)の展開先> <exportしたtarファイルのパス> --version 1 みたいな形式。

    PS C:\wsl_migration> wsl --import Ubuntu-20.04-WSL1 C:\Users\RoboDev\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows Ubuntu.tar --version 1
    PS C:\wsl_migration> wsl -l --verbose
      NAME                 STATE           VERSION
    * Ubuntu-20.04-WSL1    Stopped         1
    PS C:\wsl_migration>
    
  8. 起動する
    次のコマンドやWindows Terminal などで起動する。失敗した。失敗した。失敗した。

    PS C:\wsl_migration> wsl -d Ubuntu-20.04-WSL1
    サーバーの実行に失敗しました
    PS C:\wsl_migration>
    
  9. 管理者で PowerShell を起動し、復旧する
    wsl -l --verbose コマンドが固まるし、 unregister もエラー終了するので復旧する。

    PS C:\WINDOWS\system32> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    

    再起動を要求されたので、再起動後に次のコマンドを実行する。

    PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    

    アプリと機能でUbuntuとかが残っているなら消しておく

    PS C:\WINDOWS\system32> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    

    wsl --unregister Ubuntu-20.04-WSL1 とかで消しておく。

参考