I have users running rsync 3.0.6 on Mac OS 10.5 and 10.6 with the following
arguments (for example):
rsync -aNHAXx --fileflags --force-change --no-inc-recursive --delete-during
--filter="P _Archive*" --filter="P /*" --backup
--backup-dir="_Archive_2010_March_07_22-27-43" / /Volumes/Backup
I can't seem to figure out how make_bak_dir could be returning this error
for a handful of them:
rsync: make_bak_dir mkdir
"/Volumes/Backup/_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/
Orchestra" failed: File exists
rsync: keep_backup failed:
"/Volumes/Backup/Users/jsmith/Library/Mail/Mailboxes/ Orchestra/ * New
Mexico Concert/Assistant - John Smith.mbox/Messages/269981.emlx" ->
"_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/
Orchestra/ * New Mexico Concert/Assistant - John
Smith.mbox/Messages/269981.emlx": No such file or directory
rsync: stat
"/Volumes/Backup/_Archive_2010_March_07_22-27-43/Users/jsmith/Library/Mail/Mailboxes/
Orchestra/ * New Mexico Concert/Assistant - John
Smith.mbox/Messages/269981.emlx" failed: No such file or directory
Here's another example from a different user:
rsync: make_bak_dir mkdir "/Volumes/LaCie
1TB/_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches" failed: File
exists
rsync: keep_backup failed: "/Volumes/LaCie
1TB/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1" ->
"_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1":
No such file or directory
rsync: stat "/Volumes/LaCie
1TB/_Archive_2010_March_04_18-30-22/Users/jdoe/Library/Caches/Adobe/Color/ACEConfigCache1"
failed: No such file or directory
Because everywhere that make_bak_dir is called, there's a test that the
previous open() that was called failed with ENOENT. For example, from
receiver.c:
if ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600))
< 0) {
int save_errno = errno ? errno : EINVAL; /* 0 paranoia */
if (errno == ENOENT && make_bak_dir(backupptr) == 0) {
Does make_bak_dir simply need to trap for that error, like:
/* Try to find an existing dir, starting from the deepest dir. */
while (1) {
if (--p == fbuf)
return -1;
if (*p == '/') {
*p = '\0';
if (mkdir_defmode(fbuf) == 0 || errno == EEXIST) // <-- Trap for EEXIST?
break;
if (errno != ENOENT) {
rsyserr(FERROR, errno,
"make_bak_dir mkdir %s failed",
full_fname(fbuf));
return -1;
}
}
}
Thanks,
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.samba.org/pipermail/rsync/attachments/20100308/55c611d1/attachment.html>