Open10

btrfs系の調べもの

κeenκeen

systemd-nspawnのルートにbtrfsのスナップショットを設定できる
https://wiki.archlinux.org/index.php/Systemd-nspawn

LXDはストレージバックエンドとしてbtrfsを使うのは出てくるけどbtrfsのスナップショットをLXDのベースイメージにする方法は見当らなかった

κeenκeen

あんまり意識してなかったけど、rootにマウントしてるsubvolumeとbtrfsのrootって別なんだな。btrfsのrootをマウントするとrootにマウントしてる @ とかが見える。

$ sudo mount -osubvolid=5,noatime /dev/nvme0n1p2 /pool
$ ls /pool
@                                                        @home
@apt-snapshot-release-upgrade-jammy-2022-04-22_21:11:51  backups
@apt-snapshot-release-upgrade-jammy-2022-04-22_21:11:54  ubiquity-apt-clone
@apt-snapshot-release-upgrade-jammy-2022-04-22_21:13:23  var
κeenκeen

deja-dupがあまりに遅いのでbtrbkで毎時スナップショットを取ることにした。全部btrbkにしたかったけどスナップショット単位での管理だから特定のディレクトリだけ除外ができなくてダメだった。

κeenκeen

rootをマウントしたことでsnapshotとかの使い方がイメージつくようになったのでsystemd-nspawnのrootにbtrfsのスナップショット使うやつ試してるけどCPU 100%使って張り付いたままだ

κeenκeen

-b オプションつけなかったら大丈夫だった。arch wikiにもデフォルトでパスワードレスログインできないから -b はつけるなって書いてあった。

まとめると、こういう感じのコマンドで systemd-nspawn のインスタンス用意できるのかな?

# btrfsのrootをマウントして@のスナップショットを作っておく
$ sudo mount -osubvolid=5,noatime /dev/nvme0n1p2 /pool
$ sudo mkdir /pool/machines
$ sudo btrfs subvolume snapshot /pool/@ /pool/machines/test

# スナップショットから一旦マシンを作る。マシンを作るときにサブボリュームを作っているようで、オプションを正確に把握できてないのでこれを使う。
$ sudo mkdir -p /var/lib/machines/test-machine
$ sudo systemd-nspawn --template=/pool/machies/test -D /var/lib/machines/test-machine

# マシンからログアウトして @home をマウントする
$ sudo mount -osubvol=@home  /dev/nvme2n1p2 /var/lib/machines/test-machine/home

# ログインできる。ログイン後にsu userとかする。
$ sudo systemd-nspawn -D /var/lib/machines/test-machine