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

Zyt*_*hyr 6 windows backup cygwin rsync permissions

背景

我在 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
Run Code Online (Sandbox Code Playgroud)

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

none /cygdrive cygdrive binary,posix=0,user,noacl 0 0
Run Code Online (Sandbox Code Playgroud)

问题/问题

我遇到的问题是我经常看到“权限被拒绝(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
...
Run Code Online (Sandbox Code Playgroud)

故障排除

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

截屏:

在此处输入图片说明

Zyt*_*hyr 3

我设法找到了目前适合我的解决方案。我不确定这是否是保证正确的方法。

为了避免权限问题,我需要将以下内容添加到我的 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/"
Run Code Online (Sandbox Code Playgroud)

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