我正在使用rsync版本3.1.1协议版本31,cygwin版本2.3.1(0.291/5/3)。
我认为在第一次运行rsync之前,我需要chown所有Win7文件,其中包含未知的uid/gid。对于未知的uid/gid,rsync会生成“无法设置uid/gid”的消息,并复制文件,但是这些文件不能在将来的增量备份中进行硬链接。
我已经尝试了很多rsync选项来解决这个问题,但没有成功。
如何做到这一点呢?
我之所以这样认为,是因为当我让rsync在我的增量备份中创建硬链接(使用适当的--link-dest=destination),只有特定用户和组的文件才会创建它们的硬链接。我有一个硬盘上有60万个文件,它们在被rsync传输后无法创建硬链接。我的其他硬盘上也有许多文件表现出这种情况。这使得该驱动器上具有硬链接的增量备份无用,并且其他驱动器上的备份也不完全正确。
以下是该Win7驱动器上各种用户和组状态的示例:
到目前为止,唯一有效的方法似乎是在将文件从Win7驱动器同步到Linux系统之前,先使用chown和chgrp命令更改DATtoKML.kml文件及其父目录的所有者和组。但这对于几乎所有都有问题的驱动器来说并不实用,而另一个驱动器上则有成千上万个目录存在此类错误。
我认为rsync需要一个选项来处理“无法设置uid/gid”的情况:
或者,它应该只使用适当的用户和组(它应该从正在同步的用户那里知道),以便在“无法设置uid/gid”时保持硬链接。 有人想尝试编译带有该选项的rsync版本吗?
编辑:看起来存在问题的所有文件和目录的uid和/或gid为4294967295。作为临时解决方案,我将编写一个bash脚本,在每个win7驱动器上找到(但仅包括将被传输的文件,考虑到我的rsync排除文件)并将任何错误的uid更改为544,错误的gid更改为197121。 选择544和197121是因为它们是运行rsync命令的用户的用户和组。
这样,当我开始看到这些uid/gid问题在我的rsync日志中浮出水面时,我可以再次运行脚本。
希望将来有一个真正的答案来解决这个问题。
我认为在第一次运行rsync之前,我需要chown所有Win7文件,其中包含未知的uid/gid。对于未知的uid/gid,rsync会生成“无法设置uid/gid”的消息,并复制文件,但是这些文件不能在将来的增量备份中进行硬链接。
我已经尝试了很多rsync选项来解决这个问题,但没有成功。
如何做到这一点呢?
我之所以这样认为,是因为当我让rsync在我的增量备份中创建硬链接(使用适当的--link-dest=destination),只有特定用户和组的文件才会创建它们的硬链接。我有一个硬盘上有60万个文件,它们在被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
最近在Windows文件浏览器中进行了拖放操作,将1.txt文件放置在那里。DATtoKML.kml文件是600,000个文件中的一个示例,它们是一个问题。1.txt文件在此之后被rsynced和硬链接都没有问题。
这是在设置--link-dest到先前rsync位置之后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处理时会收到消息。消息是“uid/gid”无法设置。这些不是致命错误,因为文件可以复制,但似乎没有设置其用户和组,因此无法进行硬链接。
以下是导致上述列表的两个rsync:
Dale@Uva1 ~
$ rsync -av --chmod=o=rwx /cygdrive/e/DATtoKML/ root@192.168.0.11:/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/ root@192.168.0.11:/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 ~
$
到目前为止,唯一有效的方法似乎是在将文件从Win7驱动器同步到Linux系统之前,先使用chown和chgrp命令更改DATtoKML.kml文件及其父目录的所有者和组。但这对于几乎所有都有问题的驱动器来说并不实用,而另一个驱动器上则有成千上万个目录存在此类错误。
我认为rsync需要一个选项来处理“无法设置uid/gid”的情况:
--uid-error=544 --gid-error=197121
或者,它应该只使用适当的用户和组(它应该从正在同步的用户那里知道),以便在“无法设置uid/gid”时保持硬链接。 有人想尝试编译带有该选项的rsync版本吗?
编辑:看起来存在问题的所有文件和目录的uid和/或gid为4294967295。作为临时解决方案,我将编写一个bash脚本,在每个win7驱动器上找到(但仅包括将被传输的文件,考虑到我的rsync排除文件)并将任何错误的uid更改为544,错误的gid更改为197121。 选择544和197121是因为它们是运行rsync命令的用户的用户和组。
这样,当我开始看到这些uid/gid问题在我的rsync日志中浮出水面时,我可以再次运行脚本。
希望将来有一个真正的答案来解决这个问题。