mkdir test && cd test
btrfs subvolume create live
date >live/foo1
date >live/bar1
btrfs subvolume snapshot live/ snap1
date >live/foo2 # new file
date >>live/bar1 # modify file
rm live/foo1 # delete file
btrfs subvolume snapshot live/ snap2
date >live/foo3 # new file
mv live/bar{1,2} # rename file
rm live/foo2 # delete file
btrfs send
出现在 Linux 3.6 (2012) 中,“在两个子卷快照之间生成变化流。”--no-data
您可以使用它来通过添加标志来生成快速元数据比较 。通常,您会删除
--no-data
标志并将输出通过管道传输到btrfs receive
,以进行增量备份。例如,如果/snapshots/parent
at 已经存在/backup/snapshots/parent
,btrfs send
则只会将这些更改流式传输到/backup
文件系统:我正在运行没有的 Debian 稳定版
,所以btrfs send
我寻找使用btrfs subvolume find-new
.如果你有 snapshot1 和 snapshot2 并且你想知道在后面的快照 2 中发生了什么变化,因为 snapshot1 是你可以使用下面的脚本提供的
这将列出自 oldsnapshot/ 以来在 newsnapshot/ 中更改的所有文件。
解释:
btrfs subvolume find-new
查找特定“生成”快照后更改的文件。它还报告当前的世代号。注意事项
例如,获取子卷案例的每日快照:
snap1 和 snap2 之间发生了什么变化?
所以我们可以看到新文件,看到修改后的文件,但是删除不报。这是因为该命令报告存在的文件,而不是现在不存在的文件。
snap2 和实时子卷之间发生了什么变化?
不报告重命名的文件。它的数据没有改变。
现在如果我们将数据添加到重命名的文件中怎么办
好的,有道理。但是让我们创建一个新文件
嗯!拉拉在哪里?. 如果您添加另一个文件,
lala
则会出现。所以这种行为有点奇怪。这可能就是为什么 wiki 说:然而,奇怪的是,当您将活动子卷与先前状态进行比较时,而不是在您比较(只读)快照时。因此,除非您还想识别已删除的文件,否则这仍然有用。
这是由快照便利工具支持的
snapper
。sudo snapper -c config diff 445..446
当然,这需要您使用
snapper
快照。可以使用 找到此快照 ID
snapper list -a
。不幸的是,在撰写本文时,snapper 不支持单个配置的列表快照,尽管这些数字可以从子卷名称中找到。当前解决方案:
备份实用程序
btrbk
( https://github.com/digint/btrbk ) 也有一个diff
(也是一个extents diff
)子命令。