risposta-alla-domanda-sullo-sviluppo-web-bd.com

rsync stampa "saltando file non regolari" per quella che sembra essere una directory normale

Eseguo il backup dei miei file usando rsync. Subito dopo una sincronizzazione, l'ho eseguito in attesa di non vedere nulla, ma invece sembrava che stesse saltando le directory. Ho (ovviamente) cambiato nome, ma credo di aver ancora catturato tutte le informazioni che potevo. Cosa sta succedendo qui?

$ 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

Quindi eseguo la sincronizzazione (non prevedendo modifiche):

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

Ed ecco la parte strana:

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

Quindi ha funzionato:

$ 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

ma ancora:

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

Altre note:

Le mie attuali directory "foo" e "bar" hanno spazi, ma nessun altro strano carattere. Altre directory hanno spazi e non hanno problemi. Sono stato "stat" e non ho visto differenze tra le directory che non sono rsync e quelle che lo fanno.

Se hai bisogno di maggiori informazioni, basta chiedere.

29
Richard

Sei assolutamente sicuro che quei singoli file non siano link simbolici?

Rsync ha alcuni utili flag come -l che "copieranno i link simbolici come collegamenti simbolici". Aggiunta di -l al tuo comando:

rsync -rtvpl /source/backup /destination

Credo che i collegamenti simbolici vengano saltati di default perché possono rappresentare un rischio per la sicurezza. Controlla la pagina man o --help per maggiori informazioni su questo:

rsync --help | grep link

Per verificare che questi siano collegamenti simbolici o proattivo per trovare collegamenti simbolici, puoi usare file o find :

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

Sei assolutamente sicuro che non si tratti di una directory di collegamenti simbolici?

prova un:

file /source/backup/myfiles/foo

per assicurarsi che sia una directory

Inoltre, potrebbe benissimo essere un mount di loopback Prova

mount

e assicurarsi che/source/backup/myfiles/foo non sia elencato.

4
Gauthic

Dovresti provare il comando seguente, molto probabilmente funzionerà per te:

rsync -ravz /source/backup /destination
1
mSatyam

Puoi provare quanto segue, funzionerà

rsync -rtvp /source/backup /destination
0
Premjith

Io personalmente uso sempre questa sintassi nel mio script e lavoro a meraviglia per il backup del sistema di intere (saltare sys/* & proc/* nfs4/*)

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

Ecco il mio script eseguito da cron di root ogni giorno:

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