rsync печатает "пропуски нерегулярного файла" для того, что выглядит как обычный каталог
Я создаю резервные копии своих файлов с помощью rsync. Сразу после синхронизации я запустил ее, ожидая ничего не видя, но вместо этого было похоже, что она пропускает каталоги. Я (очевидно) изменил имена, но я считаю, что я все еще захватил всю информацию, которую мог. Что здесь происходит?
$ 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
Затем я синхронизирую (ожидая никаких изменений):
$ 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"
И вот странная часть:
$ 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"
Так оно и работало:
$ 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
но все равно:
$ 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"
Другие примечания:
Мои фактические каталоги "foo" и "bar" имеют пробелы, но никаких других странных символов. Другие каталоги имеют пробелы и не имеют проблем. Я "стат" -ed и не видел различий между каталогами, которые не являются rsync и теми, которые делают.
Если вам нужна дополнительная информация, просто спросите.
Ответы
Ответ 1
Вы абсолютно уверены, что эти отдельные файлы не являются символическими ссылками?
В Rsync есть несколько полезных флагов, таких как -l
которые будут "копировать символические -l
виде символических ссылок". Добавление -l
к вашей команде:
rsync -rtvpl /source/backup /destination
Я считаю, что символические ссылки пропускаются по умолчанию, поскольку они могут представлять угрозу безопасности. Для получения дополнительной информации об этом на странице руководства или --help:
rsync --help | grep link
Чтобы убедиться в этом, это символические ссылки или проактивно, чтобы найти символические ссылки, вы можете использовать файл или найти:
$ file /path/to/file
/path/to/file: symbolic link to '/path/file'
$ find /path -type l
/path/to/file
Ответ 2
Вы абсолютно уверены, что это не символический каталог ссылок?
попробуйте:
file /source/backup/myfiles/foo
чтобы убедиться, что это каталог
Кроме того, это может быть очень хорошо
mount
и убедитесь, что /source/backup/myfiles/foo не указан.
Ответ 3
Вы должны попробовать команду ниже, скорее всего, это сработает для вас:
rsync -ravz /source/backup /destination
Ответ 4
Вы можете попробовать следующее, оно будет работать
rsync -rtvp /source/backup /destination
Ответ 5
Я лично всегда использую этот синтаксис в своем скрипте и обрабатываю резервную копию системы intire (пропуская sys/* & proc/* nfs4/*)
sudo rsync --delete --stats --exclude-from $EXCLUDE -rlptgoDv / $TARGET/ | tee -a $LOG
Вот мой скрипт, выполняемый root 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