参照リンクの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/broスナップショットを再作成します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上記の内容を(3110017-1)ddに置き換えてから、3110016wc -cbtrfs send」を使用して上記のルーチンを再実行すると、604(604 B)が得られます。

また、次の2つのテストを実行するために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 -c"btrfs send"出力データを確認する代わりにbtrfs receive --dumpdd3110016値を使用すると、次のようないくつかの "clone"エントリが出力されます。

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/mount:rw,relatime,space_cache=v2,subvolid=5,subvol=/

ありがとうございます!

関連情報