https://bugzilla.samba.org/show_bug.cgi?id=13991
Bug ID: 13991 Summary: rsync --delete --one-file-system skips deletes after crossing filesystems on destination. Product: rsync Version: 3.1.3 Hardware: All OS: Linux Status: NEW Severity: normal Priority: P5 Component: core Assignee: wa...@opencoder.net Reporter: ar...@metronet.co.uk QA Contact: rsync...@samba.org When using rsync with the -x (or --one-file-system) option to sync to a destination that crosses filesystems: --delete won't delete files in the second filesystem. Example done on a Centos7 machine where deleteme1 is left in the destination after deleting from the source: ------------------ root@arden-lt ~]# ## Setup environment in lvm root@arden-lt ~]# cd /tmp [root@arden-lt tmp]# VG=vg_ardenkvm [root@arden-lt tmp]# mkdir testsrc testdst [root@arden-lt tmp]# lvcreate -l 1 $VG/lvtest1 Volume group name expected (no slash) Run `lvcreate --help' for more information. [root@arden-lt tmp]# lvcreate -l 1 -n lvtest1 $VG Logical volume "lvtest1" created. [root@arden-lt tmp]# mkfs /dev/$VG/lvtest1 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 1024 inodes, 4096 blocks 204 blocks (4.98%) reserved for the super user First data block=1 Maximum filesystem blocks=4194304 1 block group 8192 blocks per group, 8192 fragments per group 1024 inodes per group Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done [root@arden-lt tmp]# mkdir testdst/test1 [root@arden-lt tmp]# mount /dev/$VG/lvtest1 testdst/test1 [root@arden-lt tmp]# mkdir testsrc/test1 [root@arden-lt tmp]# touch testsrc/deleteme testsrc/test1/deleteme1 [root@arden-lt tmp]# ## First sync with no problems [root@arden-lt tmp]# rsync -axv --del testsrc/. testdst/. sending incremental file list ./ deleteme test1/ test1/deleteme1 sent 213 bytes received 69 bytes 564.00 bytes/sec total size is 0 speedup is 0.00 [root@arden-lt tmp]# \rm testsrc/deleteme testsrc/test1/deleteme1 [root@arden-lt tmp]# ## Second sync that should delete files [root@arden-lt tmp]# rsync -axv --del testsrc/. testdst/. sending incremental file list deleting deleteme ./ test1/ sent 72 bytes received 31 bytes 206.00 bytes/sec total size is 0 speedup is 0.00 [root@arden-lt tmp]# ## Files on src [root@arden-lt tmp]# find testsrc -print testsrc testsrc/test1 [root@arden-lt tmp]# ## Files on dest that should be the same as src, [root@arden-lt tmp]# ## but deleteme1 is still there [root@arden-lt tmp]# find testdst -print testdst testdst/test1 testdst/test1/lost+found testdst/test1/deleteme1 [root@arden-lt tmp]# ## Without -x it works as expected [root@arden-lt tmp]# rsync -av --del testsrc/. testdst/. sending incremental file list deleting test1/lost+found/ deleting test1/deleteme1 sent 66 bytes received 53 bytes 238.00 bytes/sec total size is 0 speedup is 0.00 [root@arden-lt tmp]# find testdst -print testdst testdst/test1 [root@arden-lt tmp]# rsync --version rsync version 3.1.3 protocol version 31 Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, no ACLs, xattrs, iconv, symtimes, prealloc rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. [root@arden-lt tmp]# ----------------------- [OK it's not very good removing lost+found, but that's not the problem]. I think the problem is the code in delete_in_dir() in generator.c: if (one_file_system) { if (file->flags & FLAG_TOP_DIR) filesystem_dev = *fs_dev; else if (filesystem_dev != *fs_dev) return; } As far as I can tell this is unnecessary. --one-file-system should only check the source filesystems not the destination filesystems. This code can cause worse problems too. I haven't figured out the simplest way of demonstrating it. But if there are other filesystems mounted, deletes can fail at the higher level as well - contact me if you want details. -- You are receiving this mail because: You are the QA Contact for the bug. -- Please use reply-all for most replies to avoid omitting the mailing list. To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html