今朝、外付けドライブに保存されていたWLSのUbuntu22.04を使おうとしたら、Ubuntuが22.04が無いと、エラーが出ました。
消えたファイルを復元するソフトをインストールしていたので試したのですが、0バイトで仮想ディスクのイメージが壊れているようです。
ext4.vhdxのファイル名のファイルのサイズが、0バイトになっていました。
wsl --list --verbose
このコマンドで、WLSのUbuntuの一覧が表示されました。
消えたUbuntuのバージョンも、一覧にありました。
そのため、まずWLSの一覧から問題のUbuntuのバージョンを削除しました。
下記のコマンドで、WLSの物理ドライブの場所が分かります。
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\*" | Select-Object DistributionName, BasePath
WLSのディストリビューションを指定して、削除する方法
wsl --unregister <ディストリビューション名>
例
wsl --unregister Ubuntu-22.04
このコマンドを実行すると、該当する WSL インスタンスが 完全に削除 され、データも消去されます。削除後に再インストールしたい場合は、以下のようにすればOKです。
wsl --install -d Ubuntu-22.04
今回は、外付けのDドライブにディストリビューションを保存していたので、この方法で復旧しました。
このURLで、Ubuntu22.04を直接ダウンロードできます。
https://cloud-images.ubuntu.com/wsl/jammy/current/ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz
サイズ:約325MB
内容:Ubuntu 22.04 LTS(amd64)向けの WSL用ルートファイルシステム
用途:wsl --import コマンドで新しいWSL環境として展開可能
上記のURLからダウンロードしたあと、こちらのコマンドを実行してください。
wsl --import Ubuntu-22.04 D:\wsl\Ubuntu-22.04 C:\Users\ユーザー名\Downloads\ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz --version 2
初回起動
wsl -d Ubuntu-22.04
ユーザーを追加
adduser 追加するユーザー名
usermod -aG sudo 追加したユーザー名
ディフォルトのユーザーとして設定します
1.ルートでUbuntu22.04を起動します。
wsl -d Ubuntu-22.04 --user root
2./etc/wsl.conf を新規作成(存在しないはず)
nano /etc/wsl.conf
3.以下の内容を貼り付けて保存:
[user]
default=追加したユーザー名
4.保存後、WSLを一度終了
exit
5.Windows PowerShellでWSLを終了
wsl --shutdown
6.再度起動
wsl -d Ubuntu-22.04
これでrootユーザーではなく、追加したユーザーでログインしてUbutuを利用できます。
今回の出来事を教訓に、一日一回OneDriveに、バックアップを作るように、バッチファイルを作り、タスクマネージャーに登録しました。
まず手動のコード
wsl --export Ubuntu-22.04 "$env:USERPROFILE\OneDrive\WSL_Backups\Ubuntu-22.04_$(Get-Date -Format yyyyMMdd).tar"
Ubuntu-22.04:バックアップ対象のWSL名
OneDrive\WSL_Backups:OneDrive配下の保存フォルダ(なければ作成してください)
$(Get-Date -Format yyyyMMdd):日付付きのファイル名にして世代管理可能
自動化する方法(タスクスケジューラ)
🔧 手順(1回だけ設定すればOK)
- バッチファイルを作る(例:backup_wsl.bat)
メモ帳などで以下の内容を保存:
@echo off
set BACKUP_DIR=%UserProfile%\OneDrive\WSL_Backups
set DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
wsl --export Ubuntu-22.04 "%BACKUP_DIR%\Ubuntu-22.04_%DATE%.tar"
backup_wsl.bat という名前で保存(例:C:\Scripts\backup_wsl.bat)
- タスクスケジューラで自動実行
「スタートメニュー」→ タスクスケジューラ を起動
右側「基本タスクの作成」
名前:WSL Backup to OneDrive
トリガー:毎日(任意の時刻に設定)
操作:プログラムの開始
プログラム:cmd.exe
引数:
/c "C:\Scripts\backup_wsl.bat"
復元するときのコマンド
wsl --import Ubuntu-22.04-Restore D:\wsl\Ubuntu-22.04-Restore "C:\Users\ユーザー名\OneDrive\WSL_Backups\Ubuntu-22.04_20250419.tar" --version 2
今回の直接下記のURLからWLSのディストリビューションをダウンロードして、外付けドライブで復旧する手順をChatGPTに教えてもらうことができました。
https://cloud-images.ubuntu.com/wsl/
Microsoftのストアを通さずに、直接WLSの復元をする方法は、便利だと思いました。