10.01.2021 10:41, [email protected] пишет:
> I've tested some more.
> 
> Repeatedly sending the difference between two consecutive snapshots creates a 
> structure on the target drive where all the snapshots share data. So 10 
> snapshots of 10 files of 100MB takes up 1GB, as expected.
> 
> Repeatedly sending the difference between the first snapshot and each next 
> snapshot creates a structure on the target drive where the snapshots are 
> independent, so they don't share any data.

How should "btrfs receive" know that in

btrfs send -p base snap1 | btrfs receive
btrfs send -p base snap2 | btrfs receive

snap1 and snap2 are related? By definition "btrfs send -p base" computes
difference to base snapshot and btrfs receive applies this difference to
replica of base snapshot. btrfs receive cannot reuse replica of snap1
because send stream does not contain any information about it.


> How can that be avoided?
> 

You can specify additional clone sources (btrfs send -p base -c snap1
snap2) but in your example the most efficient is to send delta between
two consecutive snapshots.

> Script (version that sends the difference between the first snapshot and each 
> current snapshot):
> # cat ~/btrfs-send-test.sh 
> #!/bin/bash
> 
> btrfs subvolume delete /mnt/send/storage
> btrfs subvolume delete /mnt/send/snapshots/*
> btrfs subvolume delete /mnt/send/snapshots/
> btrfs subvolume delete /mnt/rec/diff
> btrfs subvolume delete /mnt/rec/snapshots/*
> btrfs subvolume delete /mnt/rec/snapshots/
> sync
> btrfs subvolume create /mnt/send/storage
> btrfs subvolume create /mnt/send/snapshots/
> btrfs subvolume create /mnt/rec/diff
> btrfs subvolume create /mnt/rec/snapshots
> 
> btrfs subvolume snapshot -r /mnt/send/storage/ /mnt/send/snapshots/0
> btrfs send /mnt/send/snapshots/0 | btrfs receive /mnt/rec/snapshots
> 
> onelesscounter=0
> counter=1
> while [ $counter -le 10 ]
> do
>       dd if=/dev/urandom of=/mnt/send/storage/file$( printf %03d "$counter" 
> ).bin bs=1M count=100
>       md5sum /mnt/send/storage/file$( printf %03d "$counter" ).bin >> 
> /mnt/send/storage/md5sums.txt
>       btrfs subvolume snapshot -r /mnt/send/storage 
> /mnt/send/snapshots/$counter
>       btrfs send -p /mnt/send/snapshots/0 /mnt/send/snapshots/$counter -f 
> /mnt/rec/diff/$counter
>       #btrfs send -p /mnt/send/snapshots/$onelesscounter 
> /mnt/send/snapshots/$counter -f /mnt/rec/diff/$counter 
>       btrfs receive -f /mnt/rec/diff/$counter /mnt/rec/snapshots
>       ((counter++))
>       ((onelesscounter++))
> done
> echo All done
> 
> # df -h
> /dev/sda3       5.0G 1007M  3.6G  22% /mnt/send
> /dev/sdd2       932G   11G  919G   2% /mnt/rec
> 
> # ls -lh /mtn/rec/diff
> total 5.4G
> -rw------- 1 root root  101M Jan 10 09:17 1
> -rw------- 1 root root 1001M Jan 10 09:19 10
> -rw------- 1 root root  201M Jan 10 09:17 2
> -rw------- 1 root root  301M Jan 10 09:17 3
> -rw------- 1 root root  401M Jan 10 09:17 4
> -rw------- 1 root root  501M Jan 10 09:17 5
> -rw------- 1 root root  601M Jan 10 09:18 6
> -rw------- 1 root root  701M Jan 10 09:18 7
> -rw------- 1 root root  801M Jan 10 09:18 8
> -rw------- 1 root root  901M Jan 10 09:18 9
> 
> #rm /mtn/rec/diff/*
> #sync
> 
> # df -h
> /dev/sda3       5.0G 1007M  3.6G  22% /mnt/send
> /dev/sdd2       932G  5.4G  924G   1% /mnt/rec  <= all data is individually 
> stored in the snapshots?
> 
> 
> 
> ---
> 
> Take your mailboxes with you. Free, fast and secure Mail &amp; Cloud: 
> https://www.eclipso.eu - Time to change!
> 
> 

Reply via email to