Linux
lxc
ZFS
lxd

LXD with ZFS でバックアップをしたい

こんにちは。
LXDを使っていて、ZFSに格納されたデータをバックアップしたく思うことがあると思います。
やり方が見当たらなかったので、英語の文献からまとめます。

バックアップ

"defaultはプール名。"

スナップショット作成

lxc snapshot コンテナ名 バックアップ名

設定のバックアップ

lxc config show コンテナ名 > お好きなバックアップ名α.lxd.config

ZFSプールの構造を確認

zfs list 

zfs list

NAME USED AVAIL REFER MOUNTPOINT
default 339M 14.1G 24K none
default/containers 7.03M 14.1G 24K none
default/containers/first 7.01M 14.1G 332M /var/lib/lxd/storage-pools/default/containers/first
default/custom 24K 14.1G 24K none
default/deleted 24K 14.1G 24K none
default/images 332M 14.1G 24K none
default/images/b190d5ec0c537468465e7bd122fe127d9f3509e3a09fb699ac33b0c5d4fe050f 331M 14.1G 331M none
default/snapshots 48K 14.1G 24K none
default/snapshots/first 24K 14.1G 24K none

スナップショット一覧の表示、目星をつけてください

zfs list -t snapshot

NAME USED AVAIL REFER MOUNTPOINT
default/containers/first@snapshot-snap0 28K - 332M -
default/containers/first@snapshot-snap1 25.5K - 332M -
default/containers/first@snapshot-bp 25.5K - 332M -
default/containers/first@bp 0B - 332M -
default/images/b190d5ec0c537468465e7bd122fe127d9f3509e3a09fb699ac33b0c5d4fe050f@readonly 0B - 331M -

バックアップをファイルに吐き出す。

zfs send default/containers/コンテナ名@バックアップ名 > 適当な名前β.lxd.zfs

リストア(すべて受け入れ先で実行)

事前に適当なコンテナを作っとく。

lxc launch ubuntu:18.04 コンテナ名
lxc stop コンテナ名

受け入れ先のZFSイメージを削除しとく。

zfs destroy default/containers/コンテナ名
lxc config edit コンテナ名

 でバックアップしといたコンフィグを写経する。

ZFSの復元

zfs receive -F default/containers/コンテナ名 < 適当な名前β.lxd.zfs

わたしはこれでできましたが、実装前に一度全部できるか確認すべき。 

まとめ

本稿ではLXDでZFSを使用している場合、バックアップが容易なことを示せた。バックアップファイルのサイズも深刻な大きさでないし、実用に耐えそう。
記事にしないと忘れそうで、時間ないけどまとめた。

Ref

https://discuss.linuxcontainers.org/t/how-to-properly-backup-restore-lxd-containers-with-zfs-backend/417
https://discuss.linuxcontainers.org/t/how-to-move-lxd-zfs-pool-to-another-zfs-dataset-on-the-same-host/1187