WSL 1 から WSL 2 への移行, LxRunOffline によるパーティション移行の失敗と修復
はじめに
私が今使っているノートパソコンはどうも Linux のインストールに向いていないようなので,WSL をずっと使っています. 昨日は Ubuntu Mate をインストールして,Live USB でのインストールは完了したものの,Grub が入らなかったようで起動できませんでした. Linux のインストールは諦めて, 使っていた WSL 1 を WSL 2 にすることで快適にしようとしました.
以下では,
- LxRunOffline で WSL の Ubuntu を Windows が入っている 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も使えるようにする方法.(自分用メモ) | 萌えとかプログラミングとか
> 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移行
ここは先人たちの情報が山のようにあるので,以下のサイト等を参考にしながら作業しました.
(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のインプレースアップグレードの実行を行った結果, この問題は解決しました.
その後 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 に移動させたせいだろうと考え,Ubuntu を SSD に戻すことにしました..
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 を見つけました.
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 のレジスタキーと値を設定します.
そして,Ubuntu が復活していることを確認しました.
> wsl -l -v NAME STATE VERSION Ubuntu Stopped 2
死んだかと思ったが、なんか動いてるからヨシ!
おわり
Windows はむずい
追記
Kali Linux を入れてデフォルトの Register をスクショしました.