使用 bash 删除旧的 BTRFS 快照

使用 bash 删除旧的 BTRFS 快照

我正在尝试构建自己的小型备份脚本,我想使用 BTRFS 快照并保留一段时间。同时,创建快照对我来说不再是问题,但现在我想在 5 天后再次删除它们。

我制定了以下命令来获取快照的创建时间。

/usr/bin/find /run/btrfs-root/sdb/__snapshot/ -mindepth 1 -maxdepth 1 -name "auto-sn-*" -exec /usr/sbin/btrfs subvolume show {} \; | /usr/bin/grep "__snapshot|Creation"

输出:

__snapshot/auto-sn-data-20210803
        Creation time:          2021-08-03 14:59:01 +0200
__snapshot/auto-sn-Log-20210803
        Creation time:          2021-08-03 15:00:42 +0200

不幸的是,我找不到根据输出日期字符串做出删除决定的方法。现在确切的问题是,如何根据此信息启动 5 天后的快照删除?

谢谢

小想法:

/usr/bin/find /run/btrfs-root/sdb/__snapshot/ -mindepth 1 -maxdepth 1 -name "auto-sn-*" ! \( -name "*$(/usr/bin/date -d '1 day ago' +%Y%m%d)" -o -name "*$(/usr/bin/date -d '2 day ago' +%Y%m%d)"  -o -name "*$(/usr/bin/date -d '3 day ago' +%Y%m%d)" \) -exec /usr/sbin/btrfs subvolume delete {} \;

我不知道这是否有用

答案1

要获取日期,您可以执行以下操作:

$ btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$'
# 2021-03-11 04:22:58 +0100

此时您基本上已经完成了,因为幸运的是,日期是 ISO 格式,您可以使用普通的 bash 字符串比较函数轻松地进行比较:

$ old_date=$(btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$')
(some time passes)
$ new_date=$(btrfs subvolume show / | grep -oP 'Creation time:\s*\K\d.*$')
$ [[ "$old_date" < "$new_date" ]] && echo newer || echo older

相关内容