我已经备份了我之前rsync -avz
在 Linux Mint 安装时使用的数据。现在,当我尝试在 Windows 10 Ubuntu 子系统上使用相同的命令备份我的数据时,rsync 只会忽略我的目标文件并尝试将所有文件从源复制到目标。我还在多个文件上收到 2 条不同的错误消息:
rsync: chgrp "/mnt/p/file" failed: Operation not permitted (1)
和
rsync: mkstemp "/mnt/p/file" failed: Operation not permitted (1)
我并不真正关心权限,我想做的就是将我的数据备份到外部硬盘驱动器。
我试图用谷歌搜索一个解决方案,但这些都没有帮助:
sudo chown -R user:user /mnt/p
# 没有效果
rsync -rlptgoD --chmod=ugo=rwX
# 抛出同样的错误并且根本不复制任何文件
rsync -avz --no-o --no-g --no-perms
# 抛出错误“无法设置时间”
编辑:
我尝试了另一个提供的选项:rsync -rtDvz
,它会抛出rsync: failed to set times on "/mnt/p/file": Operation not permitted (1)
每个文件。传输也需要超长的时间,因为它试图修改所有文件,即使它不能。
我还注意到一件新事情,当我运行命令sudo chown -R user /mnt/p
并检查文件权限时ls -l p
,它显示所有文件权限都是root root
. 出于某种原因,我无法更改外部硬盘驱动器文件的文件权限。
哦是的,我应该告诉你我正在尝试将数据备份到外部 USB 记忆棒,它是 Fat32 文件系统......对不起!在提问时,我并不总是意识到什么是重要的,什么是不重要的。
该rsync
手册页说-a
是一样的-rlptgoD
。我建议在您的 rsync 命令中进行此替换,即rsync -rlptgoDvz
,然后删除在 NTFS 下中断的单个选项。我希望您至少需要删除-p
(权限)、-g
(组)、-o
(所有者),也许还需要-l
(符号链接)。删除所有这些会给你留下:
rsync -rtDvz
Run Code Online (Sandbox Code Playgroud)
小智 6
在 WSL Ubuntu (Windows 10) 中使用 rsync 与网络附加卷同步时,我一直在寻找此问题的解决方案,我认为该解决方案也适用于您的 USB 记忆棒。对我有用的是在安装驱动器时设置用户和组。例如:
sudo mount -t drvfs -o rw,noatime,uid=1000,gid=1000 'P:\' /mnt/p
Run Code Online (Sandbox Code Playgroud)
使用该--update/-u
参数是一个巧妙的技巧,可以通过跳过目的地上日期/时间较新的文件来使其工作,但如果您想更准确地匹配文件上的日期/时间(就像我所做的那样),那么它是一个不太理想的解决方案。当然,您系统上的 uid 和 gid 值可能有所不同,因此请检查/proc/mounts
其他挂载可能已经在使用哪些值:
cat /proc/mounts
Run Code Online (Sandbox Code Playgroud)
解决日期/时间的权限后,您可以删除--update
命令并将其缩短为:
rsync -rt --progress --modify-window=1 "$SOURCE" "$DEST"
Run Code Online (Sandbox Code Playgroud)
我认为它--modify-window=1
可能仍然有用,因为在我所做的其他研究中似乎在 Windows 中的某些情况下可能需要它:
https://pserver.samba.org/rsync/daylight- savings.html
使用这个命令解决了这个问题:
rsync --progress --modify-window=1 --update --recursive --times
它仍然会抛出“无法设置时间”错误,但至少同步现在可以正常工作。我从这里找到了答案: https: //serverfault.com/a/144475