关于linux:rsync,’uid / gid无法设置’案例导致未来硬链接失败,如何解决?

rsync, 'uid/gid impossible to set' cases cause future hard link failure, how to fix?

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

我相信在运行第一个rsync之前,我需要用未知的uid/gid(rsync会复制这些文件)来浏览所有win7文件。

在未知的uid/gid上,rsync生成"uid/gid不可能设置"消息,并复制文件,但在以后的增量备份中,这些文件不能硬链接。

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

我该怎么做?

我相信这是因为当我使用rsync在增量备份上创建硬链接(使用适当的--link dest=destination)时,只有具有特定用户和组的文件才会创建硬链接。我有一个硬盘驱动器,有600000个文件,这些文件在通过rsync传输后不允许创建硬链接。我所有的其他驱动器都有许多这样的文件。这使得带有硬盘链接的增量备份在该驱动器上毫无用处,而对于其他驱动器则"不太合适"。

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

1
2
3
4
5
6
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文件是600000个问题文件的一个例子。1.txt文件在rsynched和硬链接之后没有问题。

以下是在rsynched(将--link dest设置为以前的rsynched位置)后目标上文件的外观:

1
2
3
4
5
6
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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之前,先对win7驱动器上的chown和chgrp dattokml.kml以及files父目录进行chown和chgrp。这对我来说似乎不太实际,在几乎所有坏的驱动器上也不难做到,但另一个驱动器的这些类型的错误分散在数千个目录中。

我认为rsync需要这样一个选项来处理"uid/gid不可能设置"的情况:

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

或者,只要出现"uid/gid不可能设置",它就应该使用适当的用户和组(应该从正在同步的用户那里知道)来实现未来的硬链接。

有人想用这个选项编译rsync版本吗?

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

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

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


我刚刚添加了--no-owner --no-group并且这条信息没有显示任何内容。

此后不复制文件所有者或集团,但当从视窗系统复制时,这并不总是一个问题。


如果你想保持所有权/集团成员,可以使用EDOCX1&3作为扩展属性记录。(This has other side-effects that can appear to affect the copied files,all of which are reverable,just as changing symbolic links to regular files.)

记住在恢复时包含相同的选项,以便恢复备份的元数据。


使用〔用户〕和〔组〕图表rsync选项(这两种要求都要求源与荒漠环境使用3.1.0版本或更高版本)。在我的案件中,自从我的目的地(WD Mycloud)使用3.0.9之后,这项工作就没有了。

黄金

在CYGWIN下运行的GCC源代码(事实上不难与某些知识共享)。


-rlptgoD相同的是-a-o (owner)-g (group)

-rlptD代替-a