concerti.tsukubaのブログ

つくば・土浦・牛久近辺のコンサート情報のほか、個人的なメモなど

WSLのバックアップを検討する

はじめに

前の記事(WSL上のVimでの日本語入力を快適にする - concerti.tsukubaのブログ)に書いたように、最近WSL+Vim環境を常用しはじめた。そうすると不安になるのは、いずれ再インストールしたり、別環境に移行したくなったときにどうするかという問題。そこでWSLのバックアップ・リストアについて検討する。2017 Windows 10 Fall Creators Update を前提。VMだとスナップショット機能があるが、現状では WSL にはそのような機能は無く、すべてアンインストールするしかない。

現状の確認

まずWSLのシステム全体が保存されているフォルダはWindowsでみると

C:\Users\[Username]\AppData\Local
        \packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc

に保存されている。プロパティをみたところ、約 3.5 GB 程度だった。

どのようにバックアップをとるか

もっとも簡単には、ルートディレクトリから tar で圧縮するやりかた。今回の場合、ファイルの保存先は /mnt/c 以下に適当なディレクトリをつくってそこに入れれば良いだろう。とりあえず日付のフォルダをつくって、 /mnt/c/bkup/WSL/20180206/ とする。

tar + bzip2 で圧縮するとして、/mnt/c 等は除外したい。そこで除外ファイルリストを作っておき、 -X オプションで指定する(このファイルは日付に依存するものではないので、1つ上のフォルダに置く)。

~$ cat /mnt/c/bkup/WSL/exclude_list.txt
/mnt
/dev
/proc
/tmp
/sys
/run
/var/log

圧縮実行

~$ sudo tar -cvpjf /mnt/c/bkup/WSL/20180206/backup.tar.bz2 -X /mnt/c/bkup/WSL/exclude_list.txt /

原理的にはこのファイルのみで良いが、記録としてパッケージリストをテキストファイルに保存しておく。最悪でもこのリストを元に再インストールも可能となる。また、PythonTeXについては apt-get で入れていないので pip のリスト、tlmgrのパッケージリストも保存する。

~ $ dpkg-query -f '${binary:Package}\n' -W >   /mnt/c/bkup/WSL/20180206/list_pkg.txt
~ $ pip list --format=columns > /mnt/c/bkup/WSL/20180206/list_pip.txt
~ $ tlmgr list --only-installed > /mnt/c/bkup/WSL/20180206/list_tex.txt

WSLのアンインストールと、再インストール

以前は lxrun コマンドでインストール・アンインストールを行っていたが、現在はWindows標準である「アプリと機能」からアンインストールする。アンインストールした後、念のためフォルダを確認したところ、

C:\Users\[Username]\AppData\Local\packages

Canonical.... ディレクトリが削除されていた。

ここで再起動する必要は全く無いが、気分的にWindows再起動したあとで、ストアから Ubuntu を再インストールした。その後、Canonical... ディレクトリのサイズを確認したところ、約600 MB だった。

リストア実行

root directory に移動。念のため -t オプションでテストし、解凍先を確認。その後でファイルをすべて展開する

~$ cd /
/$ sudo tar -tvjf /mnt/c/bkup/WSL/20180206/backup.tar.bz2 | more <-- 確認
/$ sudo tar -xvjf /mnt/c/bkup/WSL/20180206/backup.tar.bz2 <-- 展開実行
drwxr-xr-x root/root         0 1970-01-01 09:00 ./
drwxr-xr-x root/root         0 2017-09-23 01:15 bin/
-rwxr-xr-x root/root   1037528 2017-05-16 21:49 bin/bash
-rwxr-xr-x root/root    520992 2017-06-16 08:46 bin/btrfs
-rwxr-xr-x root/root    249464 2017-06-16 08:46 bin/btrfs-calc-size
.....

特にエラー無く終了。展開後に全体のサイズを確認したところ、ほぼ元と同じ容量だった。

念のため、パッケージリストやpipのリストなどを再取得して、前に保存しておいたファイルと diff をとってきちんと再インストールされているかどうかを検証したところ、特に問題なかった。 あとはいくつか TeXとかpythonとか動かしてきちんと動作することを確認した。

結論

これがベストの方法かどうかはともかく、スナップショットをとる代わりとしては十分。 元のフォルダは 3.5 GB程度だったが、今回バックアップしたファイルは bzip2 圧縮で 1.3 GB 程度だった。試しに xz 圧縮 (-J オプション) してみたところ 900 MB 程度になった。ただし、bzip2にくらべると圧縮・展開に時間がかかるのでよほどディスク残量に困らない限りは bzip2 にするつもり。

過去の記事

concerti.hatenablog.com