为了调试反复崩溃的 Ubuntu 16.04,我想将 /var/log 从 HDD 备份到外部 USB 介质。我正在运行实时操作系统(Ubuntu 16.04)并使用 --archive 选项:
$ sudo rsync --archive /media/ubuntu/2f1ea741-cc93-4b0e-ad74-1e21d56d27a9/var/log/* /media/ubuntu/transcend/DebuggingSystemCrash@box3/var_log_2016-07-04-0939
预期行为
存档模式等于-rlptgoD
,因此应保留修改时间(我想要的),因为
-t, --times preserve modification times
观察到的行为
文件的时间戳(atime和时间)是不是正在保存,见截图。文件夹的修改时间是保存下来。
由于源和目标都已安装,这个问题可能与当源树具有安装点时,如何告诉 rsync 在文件上保留时间戳。
我还读过:
我错过了什么吗?
更新
不是以 sudo 身份运行 rsync 会产生有关 mtime 的预期行为,但会跳过一些文件。
答案1
与 的差异sudo
可能是由于以下摘录所致文档/文件系统/vfat.txt。 (需要知道您的目标文件系统的类型vfat
以及谁拥有该目录^Wfilesystem - 在情况下由挂载选项确定vfat
)。
无论如何,我还是发布了这篇文章,因为它显示了文件系统类型的重要性。总体结论是在 Linux 上使用 FAT 很痛苦(FAT 上的 rsync 也存在一个特殊问题)。
我确信至少列出的问题之一已经通过不同的默认值得到了解决(可能是udisks
GUI 使用的,而不是手动mount
命令)。任何状况之下如果您想要将 Linux 操作系统的部分内容复制到 FAT 中,并且需要文件元数据中的特定结果,我建议您会浪费时间(时间戳),甚至文件名。在这种情况下,您应该使用本机 Linux 文件系统,最好与源文件系统类型相同。
或者,不复制单个文件,而是创建一个档案使用本机 Linux 工具,例如tar
.认为 Zip 文件 - 但专为备份而设计Linux*nix 文件 - 它们的名称和最常见的元数据。例如,tar -c -f out.tar input-directory/
(省略压缩)。
在 Linux 上设置 FAT 时间戳的参考文档
allow_utime=### -- This option controls the permission check of mtime/atime.
20 - If current process is in group of file's group ID,
you can change timestamp.
2 - Other users can change timestamp.
The default is set from `dmask' option. (If the directory is
writable, utime(2) is also allowed. I.e. ~dmask & 022)
Normally utime(2) checks current process is owner of
the file, or it has CAP_FOWNER capability. But FAT
filesystem doesn't have uid/gid on disk, so normal
check is too unflexible. With this option you can
relax it.
社区确认和其他需要避免的潜在问题
所以博客文章我发现确认“只有 FAT32 安装的所有者才能在其上设置文件时间戳”。我将其称为设计错误(root 也应该能够做到),参考文档几乎已经说明了这一点,但我懒得为其提交补丁。
该博客还提供了文件/目录差异的解释。不幸的是,这似乎与您所描述的相反。 我认为下面描述的文件/目录差异应该阻止您的普通用户在目录上正确设置时间戳 - 而您所展示的是,如果您是 root,则可以在目录上设置正确的时间戳,但不能在文件上设置正确的时间戳。
在我看来,这--modify-window=1
是针对 rsync 特定问题的解决方法。因此,使用cp
复制文件可能会为您提供另一个数据点。
即使 FAT32 挂载点的所有者也无法可靠地设置目录时间
虽然我现在能够正确复制原始文件时间戳,但我注意到所有目录修改时间都设置为我运行 rsync 命令的时间,这根本不是我想要的。谷歌搜索一下发现了这个论坛发布的关于这个问题的帖子:http://ubuntuforums.org/showthread.php?t=886048
此论坛帖子建议添加选项“--modify-window=1”,该选项在 rsync 认为文件和目录时间不同之前必须匹配文件和目录时间的匹配程度方面给予 1 秒的时间,有人说这可以正确保留原始目录时间戳。