为什么有这么多 btrfs-send 数据用于引用链接

为什么有这么多 btrfs-send 数据用于引用链接

我遇到了一个非常奇怪的 Btrfs“发送”文件引用链接问题,经过多次尝试,我找到了详细信息:

首先,我创建了一个名为“1”的子卷:

btrfs subvolume create 1

并在其中添加一个文件:

dd if=/dev/urandom of=1/a bs=64 count=3110017

现在通过 制作只读快照sudo btrfs subvolume snapshot -r 1 1_ro0,然后执行cp --reflink=always 1/a 1/b,再次制作 ro 快照:sudo btrfs subvolume snapshot -r 1 1_ro1。现在计算“btrfs send”的数据大小:

sudo btrfs send -p 1_ro0 1_ro1 | wc -c

它输出64864765,大约为 61.9MiB。这太不正常了 - 我只是使用 reflink 复制它,我不知道为什么“btrfs send”输出这么多数据。

但是,如果将count上面的 indd替换为3110016(3110017-1),然后再次执行上面的例程,使用wc -c“btrfs send”,您可以得到 604(604 B),只有 604 字节,这就是我所期望的。

我还制作了一个 bash 脚本来执行这两个测试:

#!/bin/bash

btrfs subvolume create 1

rm -rf 1/*
dd if=/dev/urandom of=1/a bs=64 count=3110017
sudo btrfs subvolume snapshot -r 1 1_ro0
cp --reflink=always 1/a 1/b
sudo btrfs subvolume snapshot -r 1 1_ro1
sudo btrfs send -p 1_ro0 1_ro1 | wc -c
sudo btrfs subvolume delete 1_ro0 1_ro1


rm -rf 1/*
dd if=/dev/urandom of=1/a bs=64 count=3110016
sudo btrfs subvolume snapshot -r 1 1_ro0
cp --reflink=always 1/a 1/b
sudo btrfs subvolume snapshot -r 1 1_ro1
sudo btrfs send -p 1_ro0 1_ro1 | wc -c
sudo btrfs subvolume delete 1_ro0 1_ro1

rm -r 1

如果替换wc -cbtrfs receive --dump检查“btrfs send”输出数据,则使用 dd3110016值,它将输出一些“克隆”条目,如下所示:

clone           ./1_ro1/b                       offset=0 len=134217728 from=./1_ro1/a clone_offset=0
clone           ./1_ro1/b                       offset=134217728 len=64823296 from=./1_ro1/a clone_offset=134217728
...

但对于 dd 值 3110017,它输出:

write           ./1_ro1/b                       offset=197918720 len=49152
write           ./1_ro1/b                       offset=197967872 len=49152
write           ./1_ro1/b                       offset=198017024 len=49152
write           ./1_ro1/b                       offset=198066176 len=49152
write           ./1_ro1/b                       offset=198115328 len=49152
write           ./1_ro1/b                       offset=198164480 len=49152
... (so many more)

其中包含一堆“写入”条目。

我也搜索并注意到这个网站:https://www.spinics.net/lists/linux-btrfs/msg105951.html,这就像谈论文件漏洞,但就我而言,显然不可能。

这太奇怪了,我不知道我错过了什么。

我的btrfs-progs版本是5.18.1-1

以及安装选项/proc/mountrw,relatime,space_cache=v2,subvolid=5,subvol=/

谢谢!

相关内容