WSL上のLinuxのバックアップ

はじめに_

Windows Subsystem for Linux上にインストール(構築)したLinuxをバックアップ&リストアする方法を説明する。

多くのソフトウェアにおいて、ソフトウェアで管理しているデータや設定をファイルの形で保存する機能を export (エクスポート)といい、ファイルの形で保存されている設定やデータを当該ソフトウェアに反映させる機能を import (インポート)と言う。

バックアップ(backup)はトラブルや故障発生時した際にソフトウェアの設定やデータを復元することを目的として、設定やデータを保管しておく行為を言う。一方で、リストア(restore, 復元、復旧)はバックアップしておいたデータを使って、トラブルや故障発生前の状態に復元することを言う。

今回はWSLのエクスポート・インポートの機能を用いて、バックアップとリストア、あるいは別Windows PCへの移行を行う。

参考ページ_

バックアップ(エクスポート)_

Windowsのコマンドプロンプト or PowerShellで実行する。まず、現在インストール済みのLinuxの一覧を表示する。(> の後ろがコマンド)

> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-18.04 (既定)
docker-desktop
Ubuntu-20.04
docker-desktop-data

私の環境では4つのLinuxがインストールされています。Ubuntu 18.04とUbuntu 20.04、そして、Docker Desktopです(Docker Desktopは2つのLinuxイメージとなっている)。

今回はこれをEドライブのWSL-Dataというフォルダ(E:\WSL-Data)にエクスポートすることとします。コマンドは以下のとおりです。

>wsl --export Ubuntu-18.04 E:\WSL-Data\Ubuntu-18.04.tar

>wsl --export Ubuntu-20.04 E:\WSL-Data\Ubuntu-20.04.tar

>wsl --export docker-desktop E:\WSL-Data\docker-desktop.tar

>wsl --export docker-desktop-data E:\WSL-Data\docker-desktop-data.tar

ファイルが生成されているかを確認する。Linuxでのlsコマンドに該当するのがdirコマンドである。

>dir E:\WSL-Data
 ドライブ E のボリューム ラベルは ボリューム です
 ボリューム シリアル番号は D270-1FDC です

 E:\WSL-Data のディレクトリ

2021/12/30  16:56    <DIR>          .
2021/12/30  16:56    <DIR>          ..
2020/12/21  10:46    <DIR>          docker-desktop
2020/12/21  10:41    <DIR>          docker-desktop-data
2021/12/30  18:51    17,693,593,600 docker-desktop-data.tar
2021/12/30  18:38        68,085,760 docker-desktop.tar
2020/12/13  20:23    <DIR>          Ubuntu-18.04
2021/12/30  16:54     6,672,916,480 Ubuntu-18.04.tar
2021/12/30  17:16    10,160,373,760 Ubuntu-20.04.tar
               4 個のファイル      34,594,969,600 バイト
               5 個のディレクトリ  2,497,158,995,968 バイトの空き領域

以上でバックアップ終了。

リストア(インポート)_

参考サイト_

インストール先フォルダの作成_

今回はEドライブの下にWSL-OSというフォルダを作成しているとする(E:\WSL-OS)。まず、PowerShell上でバックアップファイルがあるフォルダに移動する。

> cd E:\WSL-Data
> ls


    ディレクトリ: E:\WSL-Data


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/12/30     18:51    17693593600 docker-desktop-data.tar
-a----        2021/12/30     18:38       68085760 docker-desktop.tar
-a----        2021/12/30     16:54     6672916480 Ubuntu-18.04.tar
-a----        2021/12/30     17:16    10160373760 Ubuntu-20.04.tar

インポートするコマンドは以下の構成になっている。

wsl --import ディストリビューション名 インストール先パス パックアップファイルパス

PowerShell上で以下のコマンドを実行する。

> wsl --import Ubuntu-20.04 E:\WSL-OS¥Ubuntu-20.04 E:\WSL-Data\Ubuntu-20.04.tar

確認する。

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

Ubuntu 20.04をPowerShell上で動かしてみる。なお、インポートしたLinuxディストリビューションはrootユーザで起動する。このため、一般ユーザで動かすには別途作業が必要となる(参考:WSL 固有のコンポーネントを既定のユーザーのように追加する)。

> wsl -d Ubuntu-20.04
root@DESKTOP-C6H531E:/mnt/e/WSL-Data# id
uid=0(root) gid=0(root) groups=0(root)

一般ユーザを作成していない場合は作成する。たとえば、gotohという一般ユーザが作成済みかどうかは以下のように確かめることができる。以下のコマンドでは、全ユーザ情報が記載されているファイル/etc/passwd中にgotohを含む行があるかを探している。gotohが含まれている行が列挙されているので、gotohは作成済みと判断できる。ユーザhogehogeは含まれている行がみつからなかったので、作成されていない。

root@DESKTOP-C6H531E:/mnt/e/WSL-Data# grep gotoh /etc/passwd
gotoh:x:1000:1000:,,,:/home/gotoh:/bin/bash

root@DESKTOP-C6H531E:/mnt/e/WSL-Data# grep hogehoge /etc/passwd

(必要に応じて実施する)一般ユーザが作成されていない場合は以下のように作成する。以下はユーザgotohを例にしている。3行目のコマンドで新しく追加したユーザgotohでsudoが使えるようにしている。

# groupadd gotoh
# useradd -m -g gotoh -s /bin/bash gotoh
# gpasswd -a gotoh sudo
# passwd gotoh
New password: (パスワードを設定する。入力しても何も表示されないので注意)
Retype new password: (同じパスワードをもう一度入力する)
passwd: password updated successfully

次回の起動時は一般ユーザで起動するように設定する。以下の例ではユーザgotohで設定している。

# echo -e "[user]\ndefault=gotoh" >> /etc/wsl.conf
# more /etc/wsl.conf
[user]
default=gotoh

Ubuntuからログアウトする。

# exit

一度、Ubuntuを終了する。

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

> wsl --terminate Ubuntu-20.04

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

再び、Ubuntuを起動してみる。起動時のユーザが一般ユーザ(この例ではgotoh)であることを確認する。確認したらログアウトする。

> wsl -d Ubuntu-20.04
gotoh@DESKTOP-C6H531E:/mnt/e/WSL-Data$ id
uid=1000(gotoh) gid=1000(gotoh) groups=1000(gotoh),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)

gotoh@DESKTOP-C6H531E:/mnt/e/WSL-Data$ exit
ログアウト

Ubuntuを終了する。

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

> wsl --terminate Ubuntu-20.04

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

起動用ショートカットを作成する_

適当な場所にショートカットを作成し、ショートカットをクリックすることでWSL上のLinuxを起動できるようにする。デスクトップなどで右クリックを押し「新規作成」→「ショートカット」を選択する。この例ではUbuntu 18.04だが同じ方法でUbuntu 20.04のショートカットも作成できる。

「項目の場所」として以下を入力する。

C:\Windows\System32\wsl.exe -u 「Ubuntu 18.04の初期ユーザ名」 -d Ubuntu-18.04

ショートカットの名前を入力する。この例では「Ubuntu 18.04」としている。

WSL.EXEのショートカットは以下のLinuxペンギンになる。

ショートカット上で右クリックし「プロパティ」を選択すると以下の画面が開く。ここでアイコンやUbuntu起動時のフォルダ(ディレクトリ)を変更できる。「作業フォルダ」でUbuntu起動時のフォルダ(ディレクトリ)を変更できる。

戻る_