当源树具有安装点时,如何告诉 rsync 在文件上保留时间戳

Nas*_*ser 45 backup rsync

与此问题相关

问题的简短描述:

当源树内部有安装点时,即使使用-a选项,也不会保留复制到目标树时该安装点内文件的时间戳

详细说明:

假设这是源树:

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt
Run Code Online (Sandbox Code Playgroud)

其中data/上述被安装外部USB硬盘。一切都是ext4文件系统。源中的所有内容都归我所有me

BACKUP 也正好是一个挂载点,备份U盘。

发出这个命令后rsync -av --delete /home/me/ /home/BACKUP/,我发现它/home/BACKUP/data/下面的所有内容都有当前时间戳,就好像这些文件是现在创建的,而不是/home/me/data/. 外面的其他文件和文件夹data确实保留了时间戳。

问题是:如何rsync在上述设置中使用以告诉它保留所有文件和文件夹上的时间戳,甚至是挂载点上的文件和文件夹?

我在用:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30
Run Code Online (Sandbox Code Playgroud)

h3r*_*ler 56

来自man rsync

   -t, --times                 preserve modification times
Run Code Online (Sandbox Code Playgroud)

编辑 - 改进这个答案,因为为什么这对 OP 没有帮助并不是很明显:

OP 正在将文件从一个文件系统复制到另一个文件系统并希望保留c-time. 大多数人理解c-time的意思是“创建时间”,这在大多数 UNIX/Linux 系统上是不正确的(Windows 文件系统跟踪“创建”或“诞生”时间)。

在大多数情况下,在UNIX和Linux,c-time是用来记录的最后一个索引节点“时间戳Ç ”焊割。如果更新了 inode 的任何属性,则会更改 inode:

c-time当他们被带到一个新的文件系统时,OP 无法保留他们的文件。在新文件系统中创建这些文件是上面列出的条件之一(创建 inode/file)。

/编辑

  • 谢谢你。我知道。但请仔细阅读问题。我确实使用了`-a`,它说:`归档模式;等于 -rlptgoD ` 因此已经包含了 `-t`。 (10认同)
  • 更改时间 (ctime) 在更改 inode 时更新(即创建/权限更改/移动等)。因为您正在创建一个新的 inode(因为您正在跨文件系统(单独的 inode 表)复制文件,所以 ctime 会更新。没有办法解决这个问题,因为它是 inode 的更改,而不是文件。看看http://en.wikipedia.org/wiki/Stat_(system_call)#ctime (5认同)
  • `ls -l` 显示 mtime(修改)而不是 ctime (3认同)

小智 9

正如 hr3miller 已经说过的,-a(或 --archive)等于 -rlptgoD 并且已经包括同步时间。

但是,当 rsync 将数据复制到,例如。保存用户和所有者失败的 NFS/FAT32/NTFS 挂载,rsync 不会尝试设置时间。Rsync 会发出类似警告

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)
Run Code Online (Sandbox Code Playgroud)

因此,通过使用省去保留用户和组

-rlptD
Run Code Online (Sandbox Code Playgroud)

代替

-rlptgoD
Run Code Online (Sandbox Code Playgroud)

仅当不保留所有者和组是您的选择时才使用此选项。请注意,保留符号链接和其他功能也可能触发该行为。您必须查看要备份的每个 rsync 功能 (-r -l -p -t -g -o -D) 的手册页。

  • 从手册页来看:`-r`是“递归到目录”,`-l`是“将符号链接复制为符号链接”,`-p`是“保留权限”,`-t`是“保留修改时间”,`- g` 是“保留组”,`-o` 是“保留所有者(仅限超级用户)”,`-D` 是“与 --devices --specials 相同”,`--devices` 是“保留设备文件” (仅限超级用户)”,`--specials` 是“保留特殊文件”。 (2认同)