I back up my files using rsync. Right after a sync, I ran it expecting to see nothing, but instead it looked like it was skipping directories. I've (obviously) changed names, but I believe I've still captured all the information I could. What's happening here?
$ ls -l /source/backup/myfiles drwxr-xr-x 2 me me 4096 2010-10-03 14:00 foo drwxr-xr-x 2 me me 4096 2011-08-03 23:49 bar drwxr-xr-x 2 me me 4096 2011-08-18 18:58 baz $ ls -l /destination/backup/myfiles drwxr-xr-x 2 me me 4096 2010-10-03 14:00 foo drwxr-xr-x 2 me me 4096 2011-08-03 23:49 bar drwxr-xr-x 2 me me 4096 2011-08-18 18:58 baz $ file /source/backup/myfiles/foo /source/backup/myfiles/foo/: directory Then I sync (expecting no changes):
$ rsync -rtvp /source/backup /destination sending incremental file list backup/myfiles skipping non-regular file "backup/myfiles/foo" skipping non-regular file "backup/myfiles/bar" And here's the weird part:
$ echo 'hi' > /source/backup/myfiles/foo/test $ rsync -rtvp /source/backup /destination sending incremental file list backup/myfiles backup/myfiles/foo backup/myfiles/foo/test skipping non-regular file "backup/myfiles/foo" skipping non-regular file "backup/myfiles/bar" So it worked:
$ ls -l /source/backup/myfiles/foo -rw-r--r-- 1 me me 3126091 2010-06-15 22:22 IMGP1856.JPG -rw-r--r-- 1 me me 3473038 2010-06-15 22:30 P1010615.JPG -rw-r--r-- 1 me me 3 2011-08-24 13:53 test $ ls -l /destination/backup/myfiles/foo -rw-r--r-- 1 me me 3126091 2010-06-15 22:22 IMGP1856.JPG -rw-r--r-- 1 me me 3473038 2010-06-15 22:30 P1010615.JPG -rw-r--r-- 1 me me 3 2011-08-24 13:53 test but still:
$ rsync -rtvp /source/backup /destination sending incremental file list backup/myfiles skipping non-regular file "backup/myfiles/foo" skipping non-regular file "backup/myfiles/bar" Other notes:
My actual directories "foo" and "bar" do have spaces, but no other strange characters. Other directories have spaces and have no problem. I 'stat'-ed and saw no differences between the directories that don't rsync and the ones that do.
If you need more information, just ask.
6 Answers
Are you absolutely sure those individual files are not symbolic links?
Rsync has a few useful flags such as -l which will "copy symlinks as symlinks". Adding -l to your command:
rsync -rtvpl /source/backup /destination I believe symlinks are skipped by default because they can be a security risk. Check the man page or --help for more info on this:
rsync --help | grep link To verify these are symbolic links or pro-actively to find symbolic links you can use file or find:
$ file /path/to/file /path/to/file: symbolic link to `/path/file` $ find /path -type l /path/to/file 2Are you absolutely sure that it's not a symbolic link directory?
try a:
file /source/backup/myfiles/foo to make sure it's a directory
Also, it could very well be a loopback mount try
mount and make sure that /source/backup/myfiles/foo is not listed.
1You should try the below command, most probably it will work for you:
rsync -ravz /source/backup /destination You can try the following, it will work
rsync -rtvp /source/backup /destination 1I personally always use this syntax in my script and works a treat to backup the entire system (skipping sys/* & proc/* nfs4/*)
sudo rsync --delete --stats --exclude-from $EXCLUDE -rlptgoDv / $TARGET/ | tee -a $LOG Here is my script run by root's cron daily:
#!/bin/bash # NFS="/nfs4" HOSTNAME=`hostname` TIMESTAMP=`date "+%Y%m%d_%H%M%S"` EXCLUDE="/home/gcclinux/Backups/root-rsync.excludes" TARGET="${NFS}/${HOSTNAME}/SYS" LOGDIR="${NFS}/${HOSTNAME}/SYS-LOG" CMD=`/usr/bin/stat -f -L -c %T ${NFS}` ## CHECK IF NFS IS MOUNTED... if [[ ! $CMD == "nfs" ]];then echo "NFS NOT MOUNTED" exit 1 fi ## CHECK IF LOG DIRECTORY EXIST if [ ! -d "$LOGDIR" ]; then /bin/mkdir -p $LOGDIR fi ## CREATE LOG HEADER LOG=$LOGDIR/"rsync_result."$TIMESTAMP".txt" echo "-------------------------------------------------------" | tee -a $LOG echo `date` | tee -a $LOG echo "" | tee -a $LOG ## START RUNNING BACKUP /usr/bin/rsync --delete --stats --exclude-from $EXCLUDE -rlptgoDv / $TARGET/ | tee -a $LOG In some cases just copy file to another location (like home) then try again