Windows 上基于 Rsync 和 Cygwin 的备份出现权限被拒绝错误

Windows 上基于 Rsync 和 Cygwin 的备份出现权限被拒绝错误

背景

我在 Windows 10 上使用 rsync/cygwin 将所有本地文件(源)备份到外部硬盘(目标)。我使用了本指南http://www.howtogeek.com/175008/the-non-beginners-guide-to-syncing-data-with-rsync/作为如何使用 rsync/cygwin 进行备份的教程。注意:我的外部硬盘已格式化为 NTFS。

在第一次备份时,我手动将所需文件夹复制/粘贴到目标位置。所有后续备份均使用 rsync 完成,如下所述。

我的备份方法使用 rsync/cygwin

在 Windows 上,我使用 rsync 命令创建了一个 backup.bat 文件,这样我就可以快速插入外部驱动器并开始备份。下面是我的 backup.bat 文件的示例,其中 C 是我的本地驱动器,E 是我的外部驱动器。

pause
rsync -avhP --delete --log-file="/cygdrive/C/Users/MyUsername/rsync-backup-log.txt" "/cygdrive/C/Users/MyUsername/Folder A" "/cygdrive/E/Backup/"
rsync -avhP --delete --log-file="/cygdrive/C/Users/MyUsername/rsync-backup-log.txt" "/cygdrive/C/Users/MyUsername/Folder B" "/cygdrive/E/Backup/"
rsync -avhP --delete --log-file="/cygdrive/C/Users/MyUsername/rsync-backup-log.txt" "/cygdrive/C/Users/MyUsername/Folder C" "/cygdrive/E/Backup/"
pause

为了确保没有权限问题,我将 C:\cygwin64\etc\fstab 文件编辑如下:

none /cygdrive cygdrive binary,posix=0,user,noacl 0 0

问题/争议

我遇到的问题是经常看到“权限被拒绝 (13)”错误。下面是 rsync 日志的摘录。请注意,有些文件/文件夹备份时没有错误。但是,有些文件/文件夹会出现权限错误。

...
2016/12/17 15:57:04 [2968] >f+++++++++ Documents/Subfolder A/IMG_5678.JPG
2016/12/17 15:57:04 [2968] >f+++++++++ Documents/Subfolder A/IMG_5679.JPG
2016/12/17 15:57:04 [2968] >f+++++++++ Documents/Subfolder A/IMG_5680.JPG
2016/12/17 15:57:04 [2968] >f+++++++++ Documents/Subfolder A/IMG_5681.JPG
2016/12/17 15:57:04 [2968] >f+++++++++ Documents/Subfolder A/IMG_5682.JPG
2016/12/17 15:57:04 [2968] >f+++++++++ Documents/Subfolder A/IMG_5996.JPG
...
2016/12/17 15:58:03 [6052] >f+++++++++ Folder B/Subfolder C/FileD.docx
2016/12/17 15:58:03 [6052] cd+++++++++ Folder B/Subfolder C/Subfolder E/
2016/12/17 15:58:04 [6052] >f+++++++++ Folder B/Subfolder F/FileG.docx
2016/12/17 15:58:04 [6052] rsync: mkstemp "/cygdrive/E/Backup/Folder B/Subfolder C/.FileD.docx.dBBzQZ" failed: Permission denied (13)
2016/12/17 15:58:07 [6052] rsync: mkstemp "/cygdrive/E/Backup/Folder B/Subfolder F/.FileG.docx.8DkCUR" failed: Permission denied (13)
2016/12/17 15:58:07 [6052] rsync: recv_generator: mkdir "/cygdrive/E/Backup/Folder B/Subfolder H/Subfolder J" failed: Permission denied (13)
2016/12/17 15:58:07 [6052] *** Skipping any contents from this failed directory ***
2016/12/17 15:58:07 [6052] >f+++++++++ Folder B/Subfolder H/FileK.xlsx
2016/12/17 15:58:07 [6052] cd+++++++++ Folder B/Subfolder H/Subfolder J/
2016/12/17 15:58:07 [6052] rsync: mkstemp "/cygdrive/E/Backup/Folder B/Subfolder H/.FileK.xlsx.WQa396" failed: Permission denied (13)
2016/12/17 15:58:07 [6052] sent 91.52M bytes  received 1.79K bytes  9.63M bytes/sec
...

故障排除

为了排除故障,我在 Windows 资源管理器中导航到出现权限错误的文件夹之一(在外部硬盘上)。下面是我收到的对话框通知的屏幕截图。当我单击“继续”以获取权限时,文件夹会打开,但里面是空的。当我重新运行 rsync 命令(backup.bat)时,该文件夹中的文件已正确备份,没有错误。

截屏:

在此处输入图片描述

答案1

我设法找到了一个目前对我有用的解决方案。我不确定这是否是一个保证正确的方法。

为了避免权限问题,我需要在 rsync 命令中添加以下内容:--no-p --chmod=ugo=rwX。因此,我的 rsync 备份命令应如下所示:

rsync -avhP --no-p --chmod=ugo=rwX --delete --log-file="/cygdrive/C/Users/MyUsername/rsync-backup-log.txt" "/cygdrive/C/Users/MyUsername/Folder A" "/cygdrive/E/Backup/"

该解决方案归功于类似帖子中的以下答案:https://superuser.com/a/69764/607501

答案2

正如您已经指出的, --no-p--chmod=ugo=rwX设置所有权限位。

但是,如果您希望对新目录的权限进行更细粒度的控制,则可以使用其他参数--chmod=

您链接的指南实际上有一个这样的例子(可能是在您使用它之后添加的):--chmod=Du=rwx,Dgo=rx,Fu=rw

man rsync包含有关此选项的大量信息。

答案3

供您参考:我创建了 OpenSSH 和 rsync 的 Cygwin 版本的打包:

https://github.com/Bill-Stewart/CygSSH

当您安装时,它会将noacl选项设置为fstab文件中的默认选项,以便 Cygwin 程序(包括 rsync)不会更改您的文件权限。

我建议使用 SSH 进行 rsync 复制,以便数据在传输过程中得到加密。

答案4

我把 Windows 置于开发者模式而不是使用 powershell,并从微软商店下载了 ubuntu,然后安装了 VcXsrv,然后用 ubuntu 安装 nautilushttps://seanthegeek.net/234/graphical-linux-applications-bash-ubuntu-windows/

这工作得很好,有时 Windows 会出现一些文件更新错误,而 ubuntu firefox 很难在 ubuntu 子系统中下载文件,但总的来说,它加快了我在 ubuntu 中的速度,而不是使用 cygwin。

相关内容