背景
我在 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。