zfsonlinux recently added support for visible .zfs snapshot directories, so you no longer have to mount a snapshot to browse/view/recover files from it.
This is good, but has caused my rsync backup to zfs script to complain about being unable to delete files in the .zfs directory (which is in the backup but not in the source).
e.g.
sending incremental file list rsync: delete_file: unlink(.zfs/snapshot/2012-03-31/vmlinuz.old) failed: Read-only file system (30) rsync: delete_file: unlink(.zfs/snapshot/2012-03-31/vmlinuz) failed: Read-only file system (30) [...] cannot delete non-empty directory: .zfs/snapshot/2012-03-31 rsync: delete_file: rmdir(.zfs/snapshot/2012-03-31) failed: Device or resource busy (16) rsync: delete_file: unlink(.zfs/snapshot/2012-03-30/vmlinuz.old) failed: Read-only file system (30) rsync: delete_file: unlink(.zfs/snapshot/2012-03-30/vmlinuz) failed: Read-only file system (30) [...]
The solution is to tell rsync to ignore .zfs directories on the destination.
1. use the -F option to make rsync use /.rsync-filter
2. create or add the following line to /.rsync-filter
-r .zfs/*** -s .zfs/***
On the first line, the ‘-‘ makes it an exclude rule, and the ‘r’ indicates that the rule applies to the receiving side. Together, ‘-r’ prevents rsync from attempting to delete the .zfs directories
On the second line, the ‘-s’ indicates that the rule applies to the sending side, preventing rsync from trying to backup any .zfs snapshot directories. This is only useful when backing up a ZFS filesystem.
another, much simpler, alternative is:
If you set this on the top-level zfs fs (the pool), then child filesystems will inherit it unless you’ve manually changed that setting on the child form the default (inherit).
The .zfs directory will still be available for use (e.g. ‘cd .zfs’) but won’t show up in directory listings.
weird, i’m running rsync -axvPH –delete –numeric-ids /src /dst.
src si ext4
dst is zfs (not .zfs snapshot)
i still get these errors
rsync: delete_file: rmdir(usr/src/linux-headers-3.2.0-26-generic/arch) failed: File exists (17)
cannot delete non-empty directory: usr/src/linux-headers-3.2.0-26-generic
what could it be? i deleted them with rm in the end… and only in that directory is was complaining…
could be http://lists.samba.org/archive/rsync/2005-March/011797.html ([Bug 2409] New: rsync doesn’t handle directories changing into symlinks well) which was closed with WONTFIX as being a safety feature.
you might need –delete-before.
if it’s not that, try google: http://www.google.com.au/search?q=rsync%3A+delete_file%3A+rmdir+failed%3A+File+exists