rsync 错误:符号链接没有参照物

Mar*_*rek 7 backup cygwin rsync chroot rsnapshot

我正在尝试配置 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"
    
    Run Code Online (Sandbox Code Playgroud)

问题

当我尝试运行 rsnapshot 来备份符号链接卷影副本卷上的数据时,它返回以下错误:

    symlink has no referent: "/cygdrive/e/latest-data-shadow-copy"
Run Code Online (Sandbox Code Playgroud)

这是 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/
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用scp从符号链接的卷影复制卷复制文件,它可以正常工作:

    scp user@windowsip:/cygdrive/e/latest-data-shadow-copy/data-folder/test-file.txt test-file.txt
Run Code Online (Sandbox Code Playgroud)

据我所知,这似乎表明 rsync 错误的原因是它正在 Windows 服务器上的 chroot 中运行,从而阻止它访问符号链接的卷影副本卷。

我尝试创建一个/etc/rsync.conf并添加以下内容:

    use chroot = no
Run Code Online (Sandbox Code Playgroud)

但它对错误没有影响。我认为这是因为这是我没有运行的 rsync 守护程序的配置文件。

问题

  • 是什么阻止rsync访问符号链接的卷影副本而scp可以毫无问题地访问文件?
  • 如果问题是use chrootrsync 设置,如果我没有运行 rsync 守护程序,我该如何更改它?

提前感谢您的回复!

小智 1

我有类似的问题symlink has no referent:

根本原因是:链接指向不存在的地方。只是组织中的某人在创建链接后更改了文件系统结构,并且没有更新链接。

解决方案是以下之一:

  1. 修复指向现有位置的链接。
  2. 删除不必要的链接(除了 rsync 之外没有人使用它们)。
  3. 使用选项排除 rsync 访问您的链接的尝试--exclude '/cygdrive/e/latest-data-shadow-copy'。这是被问到的“预防”方法,然而,也许不是最好的方法,所以提出了最后一个选项。