rsync,'uid / gid无法设置'案例导致未来的硬链接失败,如何修复?

问题描述 投票:3回答:4

我使用rsync版本3.1.1协议版本31与cygwin版本2.3.1(0.291 / 5/3)。

我相信我需要使用未知的uid / gid来播放我的所有Win7文件,rsync会复制这些文件,在这些文件上运行第一个rsync之前。

在未知的uid / gid的rsync上生成'uid / gid无法设置'消息并复制文件但是在将来的增量备份中它们不能被硬链接。

我已经尝试了很多rsync选项来解决这个问题但没有成功。

我该怎么做呢?

我认为这是因为当我有rsync在我的增量备份上创建硬链接时(使用相应的--link-dest = destination),只有具有特定用户和组的文件才会创建其硬链接。我有一个600,000个文件的硬盘驱动器,它们不允许在通过rsync传输硬链接后创建。我的所有其他驱动器都有许多文件,这些文件也是如此。这使得带有硬链接的增量备份在该驱动器中无用,与其他驱动器“不太正确”。

以下是该Win7驱动器上各种用户和组状态的示例:

ls -al
total 828
drwxrwx---+ 1 Unknown+User   Unknown+Group      0 Dec  7 21:33 .
dr-xrwxr-x+ 1 Unknown+User   Unknown+Group      0 Dec  7 20:53 ..
-rwxrwx---+ 1 Administrators None          773985 Jan  1  2012 1.txt
-rwxrwx---+ 1 Unknown+User   Unknown+Group  27936 Mar 12  2009 DATtoKML.kml

1.txt文件是通过最近拖放windows文件资源管理器放在那里的。 DATtoKML.kml文件是600,000个有问题的文件的示例。 1.txt文件没有问题是rsynced和之后硬链接。

以下是rsynced(将--link-dest设置为之前的rsynced位置)后目标文件的样子:

ls -al
total 792
drwxrwxrwx 2 root root     4096 Dec  7 21:33 .
drwxrwxrwx 4 root root     4096 Dec  7 21:34 ..
-rwxrwxrwx 2  544 197121 773985 Jan  1  2012 1.txt
-rwxrwxrwx 1 root root    27936 Mar 12  2009 DATtoKML.kml

正如您所看到的,DATtoKML.kml没有硬链接,并且将永远在每个增量rsync上完全转移。

此外,这些非可硬链接文件在rsync处理时从rsync获取消息。消息是'uid / gid'无法设置'。这些不是致命错误,因为文件复制,但似乎没有设置其用户和组,因此它们是可硬链接的。

以下是导致上述列表的两个rsync:

Dale@Uva1 ~
$ rsync -av --chmod=o=rwx /cygdrive/e/DATtoKML/  [email protected]:/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST
sending incremental file list
created directory /DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST
./
uid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST/."
gid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST/."
1.txt
DATtoKML.kml
uid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST/.DATtoKML.kml.eR2hUv"
gid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST/.DATtoKML.kml.eR2hUv"

sent 802,347 bytes  received 628 bytes  1,605,950.00 bytes/sec
total size is 801,921  speedup is 1.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]

Dale@Uva1 ~
$ rsync -av --chmod=o=rwx --link-dest=/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07-FIRST /cygdrive/e/DATtoKML/  [email protected]:/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07
sending incremental file list
created directory /DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07
./
uid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07/."
gid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07/."
uid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07/.DATtoKML.kml.1lp4od"
gid 4294967295 (-1) is impossible to set on "/DataVolume/shares/DalesDesktop/e+DATtoKML/2015-12-07/.DATtoKML.kml.1lp4od"
DATtoKML.kml

sent 155 bytes  received 559 bytes  476.00 bytes/sec
total size is 801,921  speedup is 1,123.14
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]

Dale@Uva1 ~
$

到目前为止,似乎唯一可行的是在我进行rsync之前chown和chgrp DATtoKML.kml以及Win7驱动器上的文件父目录。这对我来说似乎不太实际,在几乎所有这些都不好的驱动器上都不是很难做到,但是另一个驱动器将这些类型的错误分散在数千个目录中。

我认为rsync需要这样的选项来处理'uid / gid无法设置'的情况:

--uid-error=544 --gid-error=197121

或者,只要使用“uid / gid无法设置”,就应该使用适当的用户和组(它应该从用户那里了解)以便将来硬连接。

有人想尝试使用该选项编译rsync版本吗?

编辑:看起来所有相关的文件和目录都有一个4294967295的uid和/或gid。作为一个临时解决方案,我将编写一个bash脚本,它可以在每个win7驱动器上找到(但只包含将要传输的文件)考虑我的rsync排除文件)并将任何坏的uid更改为544,将坏的gid更改为197121.使用544和197121是因为它们是运行rsync命令的用户和用户组。

这样,当我开始在我的rsync日志中看到这些uid / gid问题时,我可以再次运行该脚本。

希望将来能够对这个问题有一个真正的答案。

linux cygwin rsync
4个回答
2
投票

我刚刚添加了--no-owner --no-group,消息不再显示了。

然后,这不会复制文件所有者或组,但是从Windows系统复制时,这通常不是问题。


0
投票

使用--usermap和--groupmap rsync选项(这要求源和目标环境都使用3.1.0或更高版本)。在我的情况下,这将无法工作,因为我的目的地(WD MyCloud)使用3.0.9。

要么

使用在cygwin下运行的gcc更改rsync源代码(对于某些C知识,真的不那么难)。


0
投票

如果要保留所有权/组成员身份,可以使用-M --fake-super选项将其记录为扩展属性。 (这有其他副作用可能会影响复制的文件,所有这些副作用都是可逆的,就像更改常规文件的符号链接一样。)

请记住在还原时包含相同的选项,以恢复已保存的文件元数据。


-1
投票

朝着man rsync-a意味着与-rlptgoD相同,因此也设置-o (owner)-g (group)

所以用-a取代-rlptD

© www.soinside.com 2019 - 2024. All rights reserved.