Ошибка rsync: у символической ссылки нет референта
Я пытаюсь настроить rsnapshot (который использует rsync) для резервного копирования сервера Windows, но у меня возникли проблемы с тем, что rsync не может перейти по символической ссылке на сервере для резервного копирования.
Настроить:
- Windows Server 2008 R2 с установленным Cygwin, который содержит файлы для резервного копирования
- Сервер ArchLinux в той же сети, который должен создавать резервные копии файлов с сервера Windows
- На сервере Windows установлен и работает sshd
- На сервере Windows нет работающего демона rsync (насколько я могу судить), но я могу использовать rsync через ssh для подключения к серверу Windows с сервера Linux и копирования файлов.
- Поскольку приложение сохраняет постоянно открытыми некоторые файлы для резервного копирования, сервер Windows настроен на создание теневых копий тома на диске, который содержит данные для резервного копирования.
Я использую следующий скрипт для создания ссылки на последний том теневой копии, чтобы он был доступен для rsync:
#!/bin/sh # Mount the latest shadow copy for the specified volume VOLUME="D:" LINK_NAME="E:\\latest-data-shadow-copy" SHADOW_VOLUME=`vssadmin list shadows /for=$VOLUME | grep "Shadow Copy Volume:" | tail -1 | tr -s ' ' | cut -d ' ' -f5` SHADOW_VOLUME+="\\" rm $LINK_NAME cmd.exe /c mklink /d "$LINK_NAME" "$SHADOW_VOLUME"
Эта проблема
Когда я пытаюсь запустить rsnapshot для резервного копирования данных на томе с теневой копией с символической ссылкой, он возвращает следующую ошибку:
symlink has no referent: "/cygdrive/e/latest-data-shadow-copy"
Это команда rsync, которую вызывает rsnapshot:
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --rsh=/usr/bin/ssh 'user@windowsip:/cygdrive/e/latest-data-shadow-copy/data-folder/' /media/backup-drive-1/.sync/
Однако если я попытаюсь использовать scp
чтобы скопировать файлы с тома с символической ссылкой, он работает нормально:
scp user@windowsip:/cygdrive/e/latest-data-shadow-copy/data-folder/test-file.txt test-file.txt
Насколько я могу понять, это, по-видимому, говорит о том, что причина ошибки rsync заключается в том, что она запускается в chroot на сервере Windows, не позволяя ему получить доступ к символическому объему теневого копирования.
Я пытался создать /etc/rsync.conf
и добавив следующее:
use chroot = no
но это не влияет на ошибку. Я предполагаю, что это потому, что это конфигурационный файл для демона rsync, который я не запускаю.
Вопросы
- Что мешает
rsync
от доступа к символьной копии во времяscp
можно получить доступ к файлам без проблем? - Если проблема заключается в
use chroot
Настройка rsync, как мне ее изменить, если я не запускаю демон rsync?
Спасибо за ваши ответы заранее!
1 ответ
У меня была похожая проблема с symlink has no referent:
Основная причина была: ссылка указывала на несуществующее место. Просто кто-то в организации изменил структуру файловой системы после создания ссылок и не обновил ссылки.
Решение было одним из следующих:
- Исправьте ссылки, указывающие на существующее местоположение.
- Удалять ссылки по мере необходимости (никто, кроме rsync их не использует).
- Исключить попытку rsync получить доступ к вашей ссылке с опцией
--exclude '/cygdrive/e/latest-data-shadow-copy'
, Это вопрос "профилактического" метода, однако, возможно, не самый лучший, поэтому предлагается последний вариант.