Hello,
I have a system that btrfs sends daily its rootfs to another system
far away. Incrementally (this is important to saving bandwidth since
we're talking about half a TB).
For a while my first system's hardware was out of commission, so I
spun it up (systemd-nspawn) on the second system since I had all the
files there. Now it's time to get back my services on the first
system, so i want to merge my changes I made on the second system.
Turns out to do this incrementally is a bit of a problem.
>From what I understand this might be impossible since the received
UUID will never match. I just wanted to send this out just in case I'm
missing anything, and perhaps express my frustration that maybe this
should work (what would it take to fix it?).
Here's a boiled down example of what i'm trying to do (assume ssdfs
and bigfs are my first and second systems respectively):
# create a subvolume (in ssdfs) and a few test files
alex@alex-desktop:/mnt% sudo btrfs subvolume create ssdfs/myvolume-0
Create subvolume 'ssdfs/myvolume-0'
alex@alex-desktop:/mnt% sudo touch ssdfs/myvolume-0/file-0
# create a RO snapshot so we can send it somewhere else (bigfs)
alex@alex-desktop:/mnt% sudo btrfs subvolume snapshot
ssdfs/myvolume-0 -r ssdfs/myvolume-1
Create a readonly snapshot of 'ssdfs/myvolume-0' in 'ssdfs/myvolume-1'
alex@alex-desktop:/mnt% sudo btrfs send ssdfs/myvolume-1|sudo
btrfs receive bigfs/
At subvol ssdfs/myvolume-1
# make an rw snashot at the destination and start modifying it
alex@alex-desktop:/mnt% sudo btrfs subvolume snapshot
bigfs/myvolume-1 bigfs/myvolume-2
Create a snapshot of 'bigfs/myvolume-1' in 'bigfs/myvolume-2'
alex@alex-desktop:/mnt% ls bigfs/myvolume-2/
file-0
alex@alex-desktop:/mnt% sudo touch bigfs/myvolume-2/file-1
# create an RO snapshot in preparation to send it back to ssdfs
alex@alex-desktop:/mnt% sudo btrfs subvolume snapshot
bigfs/myvolume-2 -r bigfs/myvolume-3
Create a readonly snapshot of 'bigfs/myvolume-2' in 'bigfs/myvolume-3'
# sending back incrementally (eg: without sending back file-0) fails
alex@alex-desktop:/mnt% sudo btrfs send bigfs/myvolume-1 -p
bigfs/myvolume-3|sudo btrfs receive ssdfs/
At subvol bigfs/myvolume-1
At snapshot myvolume-1
ERROR: cannot find parent subvolume
#### Cry
# some debug info
alex@alex-desktop:/mnt% ls *fs/myvolume*
ssdfs/myvolume-0:
file-0
ssdfs/myvolume-1: # ro
file-0
bigfs/myvolume-1: # ro
file-0
bigfs/myvolume-2:
file-0 file-1
bigfs/myvolume-3: # ro
file-0 file-1
alex@alex-desktop:/mnt% sudo btrfs subvolume show ssdfs/myvolume-1
myvolume-1
Name: myvolume-1
UUID: 1fcff3a8-c53f-1543-9b61-8108e486eecc
Parent UUID: 1b0a6fac-4139-1840-b654-f21833b6cd12
Received UUID: -
Creation time: 2021-04-16 19:32:46 -0700
Subvolume ID: 1650
Generation: 2198818
Gen at creation: 2198818
Parent ID: 5
Top level ID: 5
Flags: readonly
Snapshot(s):
alex@alex-desktop:/mnt% sudo btrfs subvolume show bigfs/myvolume-1
myvolume-1
Name: myvolume-1
UUID: 25301f81-10d5-e34e-8283-51656137ffc8
Parent UUID: -
Received UUID: 1fcff3a8-c53f-1543-9b61-8108e486eecc
Creation time: 2021-04-16 19:33:22 -0700
Subvolume ID: 6344
Generation: 63939
Gen at creation: 63935
Parent ID: 5
Top level ID: 5
Flags: readonly
Snapshot(s):
myvolume-2
alex@alex-desktop:/mnt% sudo btrfs subvolume show bigfs/myvolume-2
myvolume-2
Name: myvolume-2
UUID: a437c7cf-5f14-9d4d-adb6-3c35ed9d0546
Parent UUID: 25301f81-10d5-e34e-8283-51656137ffc8
Received UUID: -
Creation time: 2021-04-16 19:34:13 -0700
Subvolume ID: 6345
Generation: 63945
Gen at creation: 63939
Parent ID: 5
Top level ID: 5
Flags: -
Snapshot(s):
myvolume-3
Alexandru Stan