不允许 Rsync 操作

Cro*_*oni 5 backup rsync

我已经备份了我之前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 文件系统......对不起!在提问时,我并不总是意识到什么是重要的,什么是不重要的。

bit*_*ant 6

rsync手册页说-a是一样的-rlptgoD。我建议在您的 rsync 命令中进行此替换,即rsync -rlptgoDvz,然后删除在 NTFS 下中断的单个选项。我希望您至少需要删除-p(权限)、-g(组)、-o(所有者),也许还需要-l(符号链接)。删除所有这些会给你留下:

rsync -rtDvz
Run Code Online (Sandbox Code Playgroud)

  • Rsync 手册页似乎建议最好使用“-a”,然后关闭一些隐含选项,例如“rsync -a --no-p --no-g --no-o”,而不是显式地使用将“-a”解压为其隐含标志。 (3认同)

小智 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


Cro*_*oni 1

使用这个命令解决了这个问题:

rsync --progress --modify-window=1 --update --recursive --times

它仍然会抛出“无法设置时间”错误,但至少同步现在可以正常工作。我从这里找到了答案: https: //serverfault.com/a/144475