我正在尝试配置 rsnapshot(使用 rsync)来备份 Windows 服务器,但是我遇到了 rsync 无法跟踪要备份的服务器上的符号链接的问题。
设置:
- 安装了 Cygwin 的 Windows Server 2008 R2,其中包含要备份的文件
- 同一网络上的 ArchLinux 服务器应从 Windows 服务器备份文件
- Windows 服务器已安装 sshd 并正常运行
- Windows 服务器没有正在运行的 rsync 守护程序(据我所知),但我可以使用 ssh 上的 rsync 从 Linux 服务器连接到 Windows 服务器并复制文件。
- 由于应用程序使某些需要备份的文件始终处于打开状态,因此 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"
这是 rsnapshot 调用的 rsync 命令:
/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 错误的原因是它在 Windows 服务器上的 chroot 中运行,从而阻止它访问符号链接的卷影副本卷。
我尝试创建/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'
。这是要求的“预防”方法,但可能不是最好的方法,因此建议使用最后一个选项。