`/home` (btrfs) 中的 Snapper 排除项

`/home` (btrfs) 中的 Snapper 排除项

使用时是否有标准方法鲷鱼在 btrfs 上,排除用户主文件夹下的目录?说...~/.cache/yay在拱门上。或者甚至可能~/.cache作为一个整体。

当然,我知道 SOP 是在任何时候您希望从已安装的文件夹层次结构中较高的子卷的快照中排除文件夹的内容时创建一个子卷。但这意味着~/每次添加用户时为每个排除的文件夹创建一个子卷。除了维护起来变得混乱之外,在正常的用户创建之上还需要执行一些额外的步骤。

useradd我想我可以为和创建包装脚本userdel并将它们放入其中,/usr/local/sbin以便它们具有优先级。但我想看看是否有更优雅的方法。

语境

这并不重要。我目前部署 snapper 的唯一系统是家庭网关,它不可能有多个非 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

snapper(带有BTRFS)的粒度是BTRFS快照。鉴于快照的边界是 BTRFS 子卷,您无法配置快照程序来排除目录/文件夹。 snapper 对此没有任何控制权。

在我的系统上,我完全按照你提到的那样做;为我不想创建快照的目录创建子卷。

要在创建用户帐户期间设置此方法,您可以创建一个骨架 (skell) 目录,其中包含一个 shell 脚本,该脚本在用户登录时创建必要的子卷(如果它们尚不存在);使用 BTRFS,非 root 用户可以创建子卷(但不能删除它们)。

使用时,该骨架目录将被复制到用户的主目录中useradd。然后,当用户首次登录时,将创建子卷(例如 .cache)。不需要包装脚本。看man useradd

相关内容