这是在 W10 机器上使用 WSL。
我正在尝试将一个驱动器镜像到另一个驱动器。
我使用的命令如下:
root@M17A:/mnt/c/WINDOWS/system32# rsync -rtivlHu --delete --exclude "Backups" "/mnt/f/" "/mnt/h/"
(注意:我也尝试过delete-before
)
我遇到的问题是有时目标中存在但源中不存在的文件不会被删除。此类文件可能位于 H 驱动器根目录中(在这种情况下永远不会被删除),或者深埋在目录结构中,最终可能会被删除,也可能不会被删除。
我在输出的开始处看到了这样的东西:
root@M17A:/mnt/c/WINDOWS/system32# rsync -rtivlHu --delete --exclude "Backups" "/mnt/f/" "/mnt/h/" sending incremental file list rsync: opendir "/mnt/f/$RECYCLE.BIN/S-1-5-21-3556251925-1847326050-1130181678-1001" failed: Permission denied (13) rsync: failed to set times on "/mnt/h/.": Invalid argument (22) IO error encountered -- skipping file deletion ./ temp.tmp ...
这rsync: opendir
句话似乎与回收目录有关,但并不是特别相关。回收站最终是否没有镜像也无所谓。只是这增加了分析问题所在时的难度。
请注意“遇到 IO 错误 —— 跳过文件删除”这一行。
我可以毫无困难地手动将文件复制到 H: 驱动器并从中删除文件。
这可能与 W10 所有权/权限有关吗?我不得不承认,我根本不了解 W10 的这一方面,当我试图了解它时,我最终不得不在黑暗的房间里睡了很长时间,被恐惧和精神疲劳所淹没。
答案1
IO 错误会导致故障安全并禁用 的操作--delete
。以下是文档 ( man rsync
) 对此事的说明:
如果发送方检测到任何 I/O 错误,则将自动禁用目标上的任何文件删除功能。这是为了防止发送方的临时文件系统故障(例如 NFS 错误)导致目标上大量文件删除。您可以使用该选项覆盖此
--ignore-errors
设置。
但是,简单地添加--ignore-errors
可以防止rsync
出现其他意外错误;它并不是您想象的那样直接。
我建议从您的副本中省略回收站,并避免使用--ignore-errors
:
rsync -auH -iv --delete --exclude 'Backups/' --exclude '/$RECYCLE.BIN/' /mnt/f/ /mnt/h/
如果Backups
实际上只有,/mnt/f/Backups
那么您应该使用/Backups/
来省略顶级目录。如果在源树中散布着Backups
不需要的目录(即,在 下的各个点),那么您当前没有前导的排除模式是正确的。Backups
/mnt/f
/