用户:-根
/usr/bin/rsync -hprltaq --include '*/' --include '*.gz' --exclude '*' "/var/cache/backup/backup-20210817mysql.tar.gz" <storage_IP>::my-app/backup/sql_backup/
错误:-->
rsync: chgrp "/backup/sql_backup/.backup-20210817mysql.tar.gz.nWPkhd" (in my-app) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]
即使 rsync 抛出错误,文件也会被复制到目的地(存储服务器)。
存储服务器上的权限
ls -al backup/
drwxr-xr-x 9 nobody nogroup 4096 Oct 3 2020 .
drwxr-xr-x 81 nobody nogroup 12288 Aug 17 08:00 ..
drwxrwxrwx 2 nobody nogroup 4.0K Aug 17 12:54 sql_backup
我也尝试过 777 权限但得到同样的错误。
答案1
您指定的-a
( )标志包括将目标文件/目录的所有者和组设置为源项目的所有者和组的请求。存储服务器似乎没有以 root 身份运行 rsync 服务,并且运行该服务的用户不是拥有源文件的组的成员。--archive
rsync
/var/cache/backup/backup-20210817mysql.tar.gz
我可以看到三种可能的解决方案,
测试存储服务器的文件系统中是否具有可用的扩展属性,如果有,则使用它们来存储所有者/组和其他有用的元数据
rsync -M--fake-super --numeric-ids -ahq ...
这将是最好的解决方案。要保存和恢复文件,请始终包含
-M--fake-super--numeric-ids
.从写入存储服务器的元数据中删除所有者/组身份。然后您将负责“手动”恢复此
rsync -ahq --no-o --no-g ...
以 root 身份在存储系统上运行该服务。这以基于 Linux/UNIX 的操作系统为前提,您可以更改服务所有者,并且您对风险感到满意。不推荐,但只是列为一种可能性。