rsync“不允许操作”


9

我正在尝试将简单的rsync同步到USB硬盘,命令是

rsync -az --modify-window=2 /home /mnt/exthd/tmp/

我以root身份运行。

但是我收到很多似乎都与权限不足有关的错误:

rsync: chown "/mnt/exthd/tmp/home/someuser" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/someuser/.bash_logout" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/someuser/.bash_profile" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/someuser/.bashrc" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest/.bash_logout" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest/.bash_profile" failed: Operation not permitted (1)
rsync: chown "/mnt/exthd/tmp/home/guest/.bashrc" failed: Operation not permitted (1)
rsync: symlink "/mnt/exthd/tmp/home/guest/fred2" -> "fred" failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1042) [sender=3.0.7]

这是版本3.0.7。我尝试使用--super选项无效。有任何想法吗?


USB磁盘上的文件系统是什么?
卡莱布

外部磁盘是否格式化为FAT(32)?这是行不通的,因为FAT不知道文件所有权属性。
斯文

@Caleb我想这是FAT,但是我怎么知道呢?
魔法师蒂姆(Tim the Enchanter)

跑步mount | grep /mnt/exthd应该告诉你。
卡莱布

Answers:


14

FAT文件系统(Linux的挂载称为vfat)无法在Linux端上存储有关文件的某些许可和所有权数据。

您的选择似乎是:

  • 使用ext3 / 4或其他支持这些属性的文件系统格式化磁盘。我认为,如果与Windows共享,甚至NTFS都能胜任。
  • 使用该--fake-super选项存储这些额外的属性,以便rsync将xattrs写入文件中,而不是使用文件系统属性
  • 忽略该错误,这些属性将丢失。
  • 将数据集包装到tar文件中,然后将tar文件放在FAT系统上。所有属性都将保留,并且如果您提取它,这些属性将显示出来。

--fake-super也不起作用,尽管错误从不允许的操作(1)变为不支持的操作(95)
魔法师蒂姆

嗯 您可以使用--no-owner不尝试设置所有者匹配的方式。(FAT没有所有者财产)并且也是可能的--no-perms
卡莱布

感谢您的帮助,真的很好,尽管错误再次更改,但仍然无法正常工作,现在每个错误行都rsync: failed to write xattr user.rsync.%stat在开头。
魔法师蒂姆(Tim the Enchanter)

3

Rsync正在尝试文件系统不允许或无法执行的操作(own和symlink)。我猜您的外部HD具有FAT文件系统。

如果要进行适当的备份,则可能要使用tar。


1
或一个不错的文件系统。
womble

FAT更像是文件存储库,而不是文件系统。:-)
Janne Pikkarainen

就个人而言-我讨厌rsync。使用它将文件和目录从我的MAC复制到使用NFS文件系统的路由器上的网络共享时,我已经看到太多不同类型的错误。我还不得不多次重新格式化该驱动器,因为rsync创建的文件被锁定并且无法删除。我一直尝试使用rsync vs cp的原因是它支持排除过滤器,并且应该更快。最后,我编写了两个非常简单的Java类-Copy.java和CopyJob.java,这是一个Runnable以支持多线程并添加了对过滤器的支持... :)
jrobertsz66
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.