おさかなせいざ

おさかなせいざ

プログラミングメモや日記がわりに

WSL 1 から WSL 2 への移行, LxRunOffline によるパーティション移行の失敗と修復

はじめに

 私が今使っているノートパソコンはどうも Linux のインストールに向いていないようなので,WSL をずっと使っています. 昨日は Ubuntu Mate をインストールして,Live USB でのインストールは完了したものの,Grub が入らなかったようで起動できませんでした. Linux のインストールは諦めて, 使っていた WSL 1 を WSL 2 にすることで快適にしようとしました.

 以下では,

  • LxRunOffline で WSL の UbuntuWindows が入っている SSD の C: から HDD の D: へ 移動
  • WSL 1 → WSL 2移行の方法
  • HDD だと遅く感じたので, SSD に戻した結果 WSL 上から Ubuntu が消失
  • Ubuntu が消失した問題を修復した手順

について示します.

環境

使用している WSL のディストリビューションMicrosoft Store にてインストールした Ubuntu (無印) です. 以下は WSL 2 にした状態の Ubuntu 環境です.

$ neofetch
            .-/+oossssoo+/-.               onamae
        `:+ssssssssssssssssss+:`           ----------
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 18.04.4 LTS on Windows 10 x86_64
    .ossssssssssssssssssdMMMNysssso.       Kernel: 4.19.84-microsoft-standard
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Uptime: 13 mins
  +ssssssssshmydMMMMMMMNddddyssssssss+     Packages: 1386
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Shell: bash 4.4.20
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Adwaita [GTK3]
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Icons: Adwaita [GTK3]
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Terminal: /dev/pts/0
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: Intel i7-9750H (12) @ 2.592GHz
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Memory: 92MiB / 12662MiB
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+
   /ssssssssssshdmNNNNmyNMMMMhssssss/
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

また.> は管理者権限での Powershell 操作, $Ubuntu での操作です.

LxRunOffline による SSD の C: から HDD の D: への Ubuntu の移動

 はじめに SSD が残り 40 GB くらいになったので,WSL を HDD に移動させることにしました. 以下のサイトを参考にしました.

(a)WSLをCドライブ以外の場所に置き,(b)homeも別の場所に置いて,(c)chmodも使えるようにする方法.(自分用メモ) | 萌えとかプログラミングとか

WSL の場所を変更する: パソコン鳥のブログ

> Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
> choco install lxrunoffline
> icacls D:\WindowsSubsystemForLinux\Ubuntu #このディレクトリは作成済み
> LxRunOffline.exe move -n Ubuntu -d D:\WindowsSubsystemForLinux\Ubuntu

1時間ほど放置して処理は完了しました. その後に, /home 以下も D: に移動させようと D:\WindowsSubsystemForLinux\Ubuntu\onamae_home を作成, とりあえず Ubuntu 上で $ cp -p * /mnt/d/WindowsSubsystemForLinux/Ubuntu/onamae_home をしてコピーだけしました. おそらくこれが後の問題の原因となりました.

WSL 1 → WSL 2移行

 ここは先人たちの情報が山のようにあるので,以下のサイト等を参考にしながら作業しました.

WSL2の環境構築手順 - Qiita

(a)WSLをCドライブ以外の場所に置き,(b)homeも別の場所に置いて,(c)chmodも使えるようにする方法.(自分用メモ) | 萌えとかプログラミングとか

http://fumiword.azurewebsites.net/2018/09/18/wslinstall/

特筆するべきことといえば,Windows Update で数ヶ月前から

デバイスに重要なセキュリティ修正プログラムと品質修正プログラムがありません。 
2020-03 x64 ベース システム用 Windows 10 Version 1903 の累積更新プログラム (KB4540673)

といった表示が出続けていた事です. 以下のページで白鳥10さんが示されているWindows 10 1909のインプレースアップグレードの実行を行った結果, この問題は解決しました.

answers.microsoft.com

その後 Insider Preview に登録をして新しいバージョンの Windows のインストールを行いました. インストールは2時間くらいかかった気がします. そして, Ubuntu を WSL 1 から WSL 2 へ移行させます.

> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
> wsl --set-version Ubuntu 2

1時間ほど放置して処理は完了しました. しかし,WSL 2 を触ってみると結果としてどうも動作が遅い. SSD から HDD に移動させたせいだろうと考え,UbuntuSSD に戻すことにしました..

LxRunOffline による D: から C: への移動と WSL の消失

 戻すにも元々どこにあったのかよくわからなかったので,C: 直下に先程同様のディレクトリを作り LxRunOffline で最初と同様の操作を行いました.

> icacls C:\WindowsSubsystemForLinux\Ubuntu  /grant "onamae:(OI)(CI)(F)"
> LxRunOffline.exe move -n Ubuntu -d C:\WindowsSubsystemForLinux\Ubuntu

とここで文は忘れましたが,エラーが発生し D:\WindowsSubsystemForLinux\Ubuntu\onamae_home\program\hoge\.git 以下のファイルにアクセスできないようなことが書かれていました. ここで怖くなって > wsl -l を実行するもなにも表示されない.

終わった.

WSL 上から Ubuntu が消え去ってしまった問題を修復

 しかし,ほとんどは C:へ 移動できていると希望的観測をもって確認しました.

C:\WindowsSubsystemForLinux\Ubuntu
├── temp
│   ├── {[ここにUUIDが書かれたフォルダ]}
├── ext4.vhdx
├── fsserserver

ext4.vhdx が WSL 2 のパーティションということだったので,これがあればどうにかなるはず. Ubuntu に割り振られていた UUID もそれっぽいのが temp の中にあった. 後はこれを使って治せるはず. そして,以下の issue を見つけました.

github.com

Windows Registry Editor Version 5.00

[HKEY_USERS[SID]\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss{[UUID]}] "State"=dword:00000001 "DistributionName"="[DISTRO_NAME]" "Version"=dword:00000002 "BasePath"="\\?\[VHDX_PATH]" "Flags"=dword:0000000f "DefaultUid"=dword:000003e8 Below are the items you need to update in the registry script above:

[SID]: Open command prompt and run whoami /user to get your SID [UUID]: Go to this generator create a UUID [DISTRO_NAME]: Name of distro you want, for example: Ubuntu [VHDX_PATH]: Path of the distro with escaping slashes, for example: D:\WSL\Ubuntu

> whoami /user                                                                                                                
ユーザー名 SID                                                                                                          
========== ============================================== 
pc\onamae S-1-#ココにあるSIDが必要

Win+r から regedit を起動して,今回消えた Ubuntuレジスタキーと値を設定します.

f:id:p1sces:20200313041346p:plain
regedit のキーのpathと値

そして,Ubuntu が復活していることを確認しました.

> wsl -l -v                                                                                         
NAME      STATE           VERSION                                                                                      
Ubuntu    Stopped         2        

死んだかと思ったが、なんか動いてるからヨシ!

おわり

 Windows はむずい

追記

Kali Linux を入れてデフォルトの Register をスクショしました.

f:id:p1sces:20200315110429p:plain
Kali Linux の Regedit