it-swarm.com.de

rsync druckt "nicht reguläre Dateien überspringen" für ein scheinbar normales Verzeichnis

Ich sichere meine Dateien mit rsync. Gleich nach einer Synchronisierung ließ ich es laufen und erwartete, nichts zu sehen. Stattdessen sah es so aus, als würden Verzeichnisse übersprungen. Ich habe (offensichtlich) den Namen geändert, aber ich glaube, ich habe immer noch alle Informationen erfasst, die ich konnte. Was passiert hier?

$ 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

Dann synchronisiere ich (erwartet keine Änderungen):

$ 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"

Und hier ist der seltsame Teil:

$ 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 hat es funktioniert:

$ 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

aber dennoch:

$ 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"

Weitere Hinweise:

Meine aktuellen Verzeichnisse "foo" und "bar" enthalten Leerzeichen, aber keine anderen merkwürdigen Zeichen. Andere Verzeichnisse haben Leerzeichen und kein Problem. Ich habe "stat" -ed und sah keine Unterschiede zwischen den Verzeichnissen, die nicht rsync sind, und denjenigen, die dies tun.

Wenn Sie weitere Informationen benötigen, fragen Sie einfach.

29
Richard

Sind Sie absolut sicher, dass die einzelnen files keine symbolischen Links sind?

Rsync hat einige nützliche Flags wie -l, die "symbolische Links als symbolische Links kopieren". Hinzufügen von -l zu Ihrem Befehl:

rsync -rtvpl /source/backup /destination

Ich glaube, dass Symlinks standardmäßig übersprungen werden, da sie ein Sicherheitsrisiko darstellen können. Überprüfen Sie die Manpage oder --help, um weitere Informationen dazu zu erhalten:

rsync --help | grep link

Um zu überprüfen, ob es sich um symbolische Links handelt oder um aktiv nach symbolischen Links zu suchen, können Sie file oder find verwenden:

$ file /path/to/file
/path/to/file: symbolic link to `/path/file`
$ find /path -type l
/path/to/file
41
zaTricky

Sind Sie absolut sicher, dass es sich nicht um ein symbolisches Linkverzeichnis handelt?

versuche ein:

file /source/backup/myfiles/foo

um sicherzustellen, dass es ein Verzeichnis ist

Es könnte sich auch um eine Loopback-Montage handeln

mount

und stellen Sie sicher, dass/source/backup/myfiles/foo nicht aufgeführt ist.

4
Gauthic

Sie sollten den folgenden Befehl ausprobieren, höchstwahrscheinlich wird es für Sie funktionieren:

rsync -ravz /source/backup /destination
1
mSatyam

Sie können folgendes versuchen, es wird funktionieren

rsync -rtvp /source/backup /destination
0
Premjith

Ich persönlich verwende diese Syntax immer in meinem Skript und arbeite mit einem Leckerbissen, um das gesamte System zu sichern (überspringen von sys/* & proc/* nfs4/*

Sudo rsync --delete --stats  --exclude-from $EXCLUDE -rlptgoDv / $TARGET/ | tee -a $LOG

Hier ist mein Skript, das täglich von root's cron ausgeführt wird:

#!/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
0
gcclinux