6

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

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .