linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Incremental receive completes succesfully despite missing files
@ 2019-01-20 10:25 Dennis K
  2019-01-20 14:04 ` Andrei Borzenkov
  2019-01-21 22:23 ` Chris Murphy
  0 siblings, 2 replies; 24+ messages in thread
From: Dennis K @ 2019-01-20 10:25 UTC (permalink / raw)
  To: linux-btrfs

Apologies in advance, if the issue I put forward is actually the
intended behavior of BTRFS.

I have noted while playing with sub-volumes, and trying to determine
what exactly are the requirements for a subvolume to act as a legitimate
parent during a receive operation, that modification of one subvolume,
can affect children subvolumes that are received.

It's possible I have noted this before when directories which I though
should have existed in the destination volume, where not present,
despite being present in the snapshot at the sending end.  (ie, a
subvolume is sent incrementally, but the received subvolume is missing
files that exist on the sent side).

I can replicate this as follows

Create the subvolumes and put some files in them.
# btrfs sub create 1
# btrfs sub create 2
# cd 1
# dd if=/dev/urandom bs=1M count=10 of=test
# cd ..
# btrfs sub snap 1 2
# dd if=/dev/urandom bs=1M count=1 of=test2
# cd ..

Now set as read-only to send.  Subvolume 1 has the file "test, and
subvolume 2 has the files "test" and "test2".
# btrfs prop set 1 ro true
# btrfs prop set 2 ro true

Send, snapshot 2 is an incremental send.  The files created are the
expected sizes.
# btrfs send 1 -f /tmp/1
# btrfs send -p 1 2 -f /tmp 2

Now we make subvolume one read-write
# btrfs prop set 1 ro false
# rm 1/test

Delete subvolume 2 and then recreate it be receiving it.
# btrfs sub del 2
# btrfs receive -f /tmp/2 .

What happens, is that subvolume 2 is created, but it is missing the file
'test' which was present in subvolume 1 at the time it was created as a
snapshot and sent.  It now only contains the file "test2", which is NOT
the state that it was sent.


Note the same results are obtained, if you also delete subvolume 1 and
then recreate it with btrfs-receive.

This may explain why previously I found a send operation resulted in the
receiving end missing files previously.

I understand that during send/receive, a snapshot is taken of the parent
subvolume, then it is modified.  The problem is that if that snapshot is
modified, then these modifications will affect the received subvolumes,
including, in this case, silent data loss.


It would be better for the receive operation to fail, or at least put
out a warning if the parent subvolume it is using has changed or is
different from the reference subvolume used during send.  I'm not sure
whether BTRFS can check this via generation number or some other data,
orbut at the moment, there is no such check and this appears to be a bug.

Is this correct behaviour?  Does BTRFS rely on the user, and user-space
tools, never changing any subvolume in order to avoid silent data loss?

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2019-01-27  2:00 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-20 10:25 Incremental receive completes succesfully despite missing files Dennis K
2019-01-20 14:04 ` Andrei Borzenkov
2019-01-21 22:23 ` Chris Murphy
2019-01-22  4:36   ` Chris Murphy
2019-01-22  4:54   ` Chris Murphy
2019-01-22  6:00     ` Remi Gauvin
2019-01-22  6:28       ` Chris Murphy
2019-01-22 17:57         ` Andrei Borzenkov
2019-01-22 19:37           ` Chris Murphy
2019-01-22 19:45             ` Hugo Mills
2019-01-23 10:44   ` Dennis Katsonis
2019-01-23 11:25     ` Andrei Borzenkov
2019-01-23 13:52       ` Dennis Katsonis
2019-01-23 18:17         ` Andrei Borzenkov
2019-01-23 15:25       ` Hans van Kranenburg
2019-01-23 15:32         ` Nikolay Borisov
2019-01-23 16:23           ` Hans van Kranenburg
2019-01-24 10:40             ` Dennis K
2019-01-24 17:22               ` Chris Murphy
2019-01-26  2:43                 ` Dennis Katsonis
2019-01-26 23:09                   ` Chris Murphy
2019-01-27  1:58                     ` Dennis Katsonis
2019-01-23 15:40         ` Remi Gauvin
2019-01-23 16:59           ` Hans van Kranenburg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).