web-dev-qa-db-ja.com

`/ home`でのスナッパーの除外(btrfs)

Btrfsで snapper を使用して、ユーザーのホームフォルダーの下のディレクトリを除外する標準的なアプローチはありますか?言う...~/.cache/yayArchで。あるいは、全体として~/.cacheでさえあるかもしれません。

もちろん、SOPは、マウントされたフォルダー階層の上位にあるサブボリュームのスナップショットからフォルダーのコンテンツを除外したいときにいつでもサブボリュームを作成することです。しかし、それはそれぞれのサブボリュームを作成することを意味します。ユーザーが追加されるたびに~/の下の除外フォルダー。これは、保守が面倒になることに加えて、通常のユーザー作成に加えてかなりの数の追加手順があります。

useradduserdelのラッパースクリプトを作成し、それらを/usr/local/sbinに入れて優先することができると思います。しかし、もっとエレガントなアプローチがないかと思いました。

環境

それは重要ではありません。私が現在スナッパーを展開している唯一のシステムはホームゲートウェイであり、root以外のユーザーが複数いる可能性はほとんどありません。しかし、将来のために知っておくといいでしょう。

サブボリューム(既存のスナップショットを除く):

$ Sudo btrfs subvolume list /
ID 258 gen 33625 top level 5 path home
ID 262 gen 33553 top level 5 path opt
ID 264 gen 33555 top level 5 path var-www
ID 266 gen 33630 top level 5 path Arch
ID 267 gen 33631 top level 5 path var-log
ID 268 gen 33566 top level 5 path pacman-cache
ID 270 gen 45 top level 266 path var/lib/portables
ID 271 gen 46 top level 266 path var/lib/machines
ID 274 gen 33566 top level 266 path .snapshots
ID 276 gen 33556 top level 258 path home/.snapshots
ID 278 gen 33556 top level 262 path opt/.snapshots
ID 279 gen 33556 top level 264 path var-www/.snapshots

/ etc/fstab:

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f / btrfs rw,noatime,compress=zstd:3,ssd,space_cache,subvolid=266,subvol=/Arch,subvol=Arch 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /.snapshots btrfs rw,nodev,noexec,noatime,compress=zstd:3,ssd,space_cache,subvolid=274,subvol=/Arch/.snapshots,subvol=Arch/.snapshots 0 0

# /dev/sda1
UUID=27d5943f-e74d-480f-be46-a370c5b1f37f /boot ext4 rw,noatime,nodev,nosuid,noexec 0 2

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /home btrfs rw,noatime,nodev,compress=zstd:3,ssd,space_cache,subvolid=258,subvol=/home,subvol=home 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /home/.snapshots btrfs rw,nodev,noexec,noatime,compress=zstd:3,ssd,space_cache,subvolid=276,subvol=/home/.snapshots,subvol=home/.snapshots 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /opt btrfs rw,noatime,nodev,nosuid,compress=zstd:3,ssd,space_cache,subvolid=262,subvol=/opt,subvol=opt 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /opt/.snapshots btrfs rw,nodev,noexec,noatime,compress=zstd:3,ssd,space_cache,subvolid=278,subvol=/opt/.snapshots,subvol=opt/.snapshots 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /var/log btrfs rw,noatime,nodev,nosuid,noexec,compress=zstd:3,ssd,space_cache,subvolid=267,subvol=/var-log,subvol=var-log 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /var/www btrfs rw,noatime,nodev,nosuid,noexec,compress=zstd:3,ssd,space_cache,subvolid=264,subvol=/var-www,subvol=var-www 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /var/www/.snapshots btrfs rw,nodev,noexec,noatime,compress=zstd:3,ssd,space_cache,subvolid=279,subvol=/var-www/.snapshots,subvol=var-www/.snapshots 0 0

# /dev/sda6 LABEL=system
UUID=18f47506-31c6-4d22-939d-684ace61301f /var/cache/pacman/pkg btrfs rw,noatime,nodev,nosuid,noexec,compress=zstd:3,ssd,space_cache,subvolid=268,subvol=/pacman-cache,subvol=pacman-cache 0 0

# /dev/sda5
UUID=5415bf33-0a89-4a36-a224-27dbb4c43977 none swap defaults 0 0
1
Cliff Armstrong

スナッパー(BTRFSを使用)の粒度はBTRFSスナップショットです。スナップショットの境界がBTRFSサブボリュームである場合、ディレクトリ/フォルダーを除外するようにスナッパーを構成することはできません。スナッパーは単にこれを制御することはできません。

私のシステムでは、あなたが言ったとおりに実行します。スナップショットを作成したくないディレクトリのサブボリュームを作成します。

ユーザーアカウントの作成中にこのアプローチを設定するには、ユーザーログイン時に必要なサブボリュームがまだ存在しない場合に作成するシェルスクリプトを含むskelleton(skell)ディレクトリを作成できます。 BTRFSを使用すると、root以外のユーザーはサブボリュームを作成できます(ただし、削除することはできません)。

useraddを使用すると、上記のskelletonディレクトリがユーザーのホームディレクトリにコピーされます。次に、ユーザーが最初に.cacheなどのサブボリュームにログインすると、作成されます。ラッパースクリプトは必要ありません。見る man useradd

1
Emmanuel Rosa