Thread (6 messages) 6 messages, 3 authors, 2021-03-03

Re: Unexpected "ERROR: clone: did not find source subvol" on btrfs receive

From: Alexander Wetzel <hidden>
Date: 2021-02-21 17:45:38

Am 21.02.21 um 12:57 schrieb Alexander Wetzel:
quoted
While compiling I also switched to 
https://github.com/kdave/btrfs-progs.git. Same problem.

I then tracked the error down up to btrfs_uuid_tree_lookup_any():

nr_items is zero after the call
ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &search_arg);
(ret is also zero)

So looks like this is a filesystem issue?
I've now "reused" the ret < 0 output in btrfs_uuid_tree_lookup_any() and 
added nt_items to it, too.

Then I get:

# /home/alex/src/b2/btrfs-progs/btrfs  receive -f test2 .
At snapshot 2021-02-20-TEMP
ioctl(BTRFS_IOC_TREE_SEARCH, uuid, key 483c17093f551dd3, UUID_KEY, 
896d0cfd51ec5cb6, nr_items=0) ret=0, error: No such file or directory
ioctl(BTRFS_IOC_TREE_SEARCH, uuid, key 483c17093f551dd3, UUID_KEY, 
896d0cfd51ec5cb6, nr_items=0) ret=0, error: No such file or directory
ERROR: clone: did not find source subvol si=0, 
uuid=d31d553f-0917-3c48-b65c-ec51fd0c6d89

In common/send-stream.c read_and_process_cmd() the very first time we 
try to use BTRFS_SEND_C_CLONE it triggers the problem on my setup.

Dumping the variables of the problematic call here I get:
   path=var/lib/mysql/nextcloud/oc_activity.ibd
   offset=745472
   len=303104
   uuid=d31d553f-0917-3c48-b65c-ec51fd0c6d89
   clone_ctransid=195056
   clone_path=var/lib/mysql/nextcloud/oc_activity.ibd
   clone_offset=745472

Guessing around I assume this is an instruction to clone 303104 Bytes at 
offset 745472 for var/lib/mysql/nextcloud/oc_activity.ibd from the 
parent subvol uuid d31d553f-0917-3c48-b65c-ec51fd0c6d89 at generation 
195056.

So I suspect now my problem is, that my RO snapshot hs somehow
Generation != (Gen at creation).
A RO snapshot should not be able to get to a newer generation, correct?

Or maybe that btrfs send is using "Gen at creation" instead of 
"Generation"... but don't think so.


# btrfs sub show 2021-02-14/
2021-02-14
         Name:                   2021-02-14
         UUID:                   d31d553f-0917-3c48-b65c-ec51fd0c6d89
         Parent UUID:            a2ff485b-9f8f-2543-ad03-dc7c917e143b
         Received UUID:          -
         Creation time:          2021-02-14 21:46:26 +0100
         Subvolume ID:           358
         Generation:             208977	<---
         Gen at creation:        195056
         Parent ID:              5
         Top level ID:           5
         Flags:                  readonly
         Snapshot(s):
                                 2021-02-20-TEMP

Now I somehow got another test ro snapshot to a new generation:
# btrfs sub snap -r active/ t1
Create a readonly snapshot of 'active/' in './t1'
# btrfs sub show t1
t1
         Name:                   t1
         UUID:                   70e6a915-e03a-fb48-869e-98ab8bad2ad4
         Parent UUID:            a2ff485b-9f8f-2543-ad03-dc7c917e143b
         Received UUID:          -
         Creation time:          2021-02-21 18:02:32 +0100
         Subvolume ID:           411
         Generation:             209009
         Gen at creation:        209009
         Parent ID:              5
         Top level ID:           5
         Flags:                  readonly
         Snapshot(s):


Playing around a bit I found out that renaming a subvol can - but not 
always - advances the generation:

# btrfs sub snap -r active/ t1
Create a readonly snapshot of 'active/' in './t1'
# btrfs sub show t1
t1
         Name:                   t1
         UUID:                   83d278b0-1782-3a4a-8293-c6df2e67acd4
         Parent UUID:            a2ff485b-9f8f-2543-ad03-dc7c917e143b
         Received UUID:          -
         Creation time:          2021-02-21 18:34:40 +0100
         Subvolume ID:           414
         Generation:             209069
         Gen at creation:        209069
         Parent ID:              5
         Top level ID:           5
         Flags:                  readonly
         Snapshot(s):
# mv t1 x1
# btrfs sub show x1
x1
         Name:                   x1
         UUID:                   83d278b0-1782-3a4a-8293-c6df2e67acd4
         Parent UUID:            a2ff485b-9f8f-2543-ad03-dc7c917e143b
         Received UUID:          -
         Creation time:          2021-02-21 18:34:40 +0100
         Subvolume ID:           414
         Generation:             209070
         Gen at creation:        209069
         Parent ID:              5
         Top level ID:           5
         Flags:                  readonly
         Snapshot(s):

But that is not always working. Creating/renaming/deleting snapshots I 
can trigger it from time to time but so far I don't see a pattern.

But then I just got that:
# btrfs sub snap -r active/ q1
Create a readonly snapshot of 'active/' in './q1'
# btrfs sub show q1
q1
         Name:                   q1
         UUID:                   53a3833c-9caa-b944-80d1-8d592c68ff74
         Parent UUID:            a2ff485b-9f8f-2543-ad03-dc7c917e143b
         Received UUID:          -
         Creation time:          2021-02-21 18:40:20 +0100
         Subvolume ID:           416
         Generation:             209084
         Gen at creation:        209083
         Parent ID:              5
         Top level ID:           5
         Flags:                  readonly
         Snapshot(s):
root@mail:/mnt/backup/backupdev#

No rename necessary and the generations also differ...

But I guess I'm at then end of what I can find out without a much better 
understanding of btrfs internals...

I hope someone here can shed more light on that,

Alexander
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help