こんにちは。
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