Btrfs
/home
(btrfs) 中的 Snapper 排除項
在 btrfs 上使用snapper時,是否有標準方法來排除使用者主文件夾下的目錄?說…
~/.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
snapper(使用 BTRFS)的粒度是 BTRFS 快照。鑑於快照的邊界是 BTRFS 子卷,您不能將 snapper 配置為排除目錄/文件夾。snapper 根本無法控制這一點。
在我的系統上,我完全按照你提到的那樣做;為我不想快照的目錄創建子卷。
要在創建使用者帳戶期間設置此方法,您可以創建一個 skelleton (skell) 目錄,其中包含一個 shell 腳本,如果使用者登錄時創建必要的子卷,如果它們不存在;使用 BTRFS,非 root 使用者可以創建子卷(但不能刪除它們)。
使用時,所述骨架目錄將復製到使用者的主目錄
useradd
。然後,當使用者第一次登錄時,例如 .cache 的子卷將被創建。不需要包裝腳本。見man useradd
。