开发者

rsync prints "skipping non-regular file" for what appears to be a regular directory

开发者 https://www.devze.com 2023-03-30 17:56 出处:网络
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 stil

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.


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


Are 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.


You 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


I 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

0

精彩评论

暂无评论...
验证码 换一张
取 消