Ошибка rsync: у символической ссылки нет референта

3025
Marek

Я пытаюсь настроить 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?

Спасибо за ваши ответы заранее!

6
Это то, что scp доверяет системным вызовам для разрешения "/ cygdrive / e / latest-data-shadow-copy", а rsync пытается разрешить его самостоятельно? Если вы указываете цель этой ссылки на rsync, она работает? ShadSterling 10 лет назад 0

1 ответ на вопрос

0
Ivy Growing

У меня была похожая проблема с symlink has no referent:

Основной причиной было: ссылка указывала на несуществующее место. Просто кто-то в организации изменил структуру файловой системы после создания ссылок, а не обновил ссылки.

Решение было одним из следующих:

  1. Исправьте ссылки, указывающие на существующее местоположение.
  2. Удалять ссылки как ненужные (никто, кроме rsync их не использует).
  3. Исключите попытку доступа к вашей ссылке с помощью опции rsync --exclude '/cygdrive/e/latest-data-shadow-copy'. Это вопрос «профилактического» метода, однако, возможно, не самый лучший, поэтому предлагается последний вариант.

Похожие вопросы