タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

WSLのバックアップとインポート

まとめ

  • wsl --exportwsl --import
  • インポートした後はデフォルトのユーザーが root になってしまうので、設定してやる必要がある
  • .bat を書けばバックアップをとってからシャットダウン、もできる

forest.watch.impress.co.jp

事の起こり

  • WSL2をゴリゴリ仕事で使っている
  • 何かあったとき戻せるようにしたい
  • ツール類の再インストール作業などなるべくしたくない
  • プロビジョニングツールはツールの更新で動かなくなったりしてつらい
  • スナップショットとりたい

バッチファイルを書いた

wsl-backup.bat

@echo off

echo %date%
echo %time%

set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%

set time2=%time: =0%

set hh=%time2:~0,2%
set mn=%time2:~3,2%
set ss=%time2:~6,2%

set timestamp=%yyyy%-%mm%-%dd%-%hh%-%mn%-%ss%
wsl --export Ubuntu D:\backups\wsl\Ubuntu_%timestamp%.tar

shutdown.bat

@echo off

call D:\wsl-backup.bat

shutdown /s /t 30 /c "Shut down after 30 seconds."

仕事終わりに shutdown.bat を「管理者で実行」

復元方法

WSL2のセットアップを終えた環境で

wsl --import <NAME> <PATH> <FILE>

wsl --import Ubuntu "C:\wsl\Ubuntu" D:\backups\wsl\Ubuntu_2020-05-30-11-19-12.tar

デフォルトのユーザーを設定

そのままだと root になるので、デフォルトのユーザーを指定します。

C:\Users\yuichi> wsl
Last login: Fri Apr 17 21:35:43 JST 2020 on pts/5
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)

root@PANDA:~#
Function WSL-SetDefaultUser ($distro, $user) { Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq $distro | Set-ItemProperty -Name DefaultUid -Value ((wsl -d $distro -u $user -e id -u) | Out-String); };
WSL-SetDefaultUser <DistroName> <UserName>

WSL-SetDefaultUser Ubuntu takeyuweb

github.com