rsync:--干运行?使用了错误的选项?

use*_*501 2 linux backup samba rsync truenas

我最初的问题:

--dry-runrsync 命令的选项有什么作用?在我当前工作的网络上,它似乎产生了一个很长的文件列表,这不是很有用。

以下是一些进一步的细节:

我最近(终于)开始在 TrueNAS 机器上部署 samba 共享。它必须是 samba,因为我同时使用 Linux、Windows,有时还使用 OS X 系统,因此我需要一个网络存储位置,如果需要,我可以从所有这三个系统中使用它。

我现在正在努力将数据从随机的硬盘阵列移动到 TrueNAS 系统上的存储池。我发现执行此操作的最简单方法是在 TrueNAS 系统上使用 rsync 服务器,并在客户端上使用 rsync 发送数据。

我从中复制数据的某些驱动器具有相同目录名称的多个副本。但我不能保证它们是相同的,因为其中一些是后来制作的。

警告:我不能依赖文件的时间戳。原因:在开始此数据迁移之前,我将大量内容移至单个磁盘。

示例:我有一个 3TB 驱动器的磁盘,其中包含以下内容

Documents-backup/...
Documents-backup_2/...    # same directory structure as Documents-backup,
                          # may or may not be identical
Run Code Online (Sandbox Code Playgroud)

然后另一个驱动器包含

Documents-backup/...    # may or may not be identical to dir on another disk
Run Code Online (Sandbox Code Playgroud)

其中一些文件夹的大小很大,内容超过 100 GB。

我想做的就是使用 rsync 来:

  • 首先检查(使用试运行和校验和?)文件夹是否相同。如果是,我可以丢弃/删除其中一个,无需复制它并在 NAS 上保留 2 个副本
  • 如果它们不相同,则给出具有不同校验和的文件列表

我认为以下命令可以做到这一点:

rsync -a -c --progress --dry-run ./local-path user@ipaddress::rsyncservername/remote-path
Run Code Online (Sandbox Code Playgroud)

然而,据我所知,这一切都是在打印所有正在检查的文件的列表,而不是具有不同校验和的文件。

研究/部分答案?

我通过搜索发现了这个问题rsync dry-run。这个问题提到了不同的权限。由于我使用的是存档开关-a,我认为这保留了权限。我的猜测是 samba 不支持 Linux 权限,这导致 rsync 认为文件之间存在“差异”,尽管校验和相同。

备份 Linux 主文件夹时 rsync 空运行中的更改的更有意义的回顾

所以我的问题稍微狭窄一些,但本质上还是一样的。考虑到我所拥有的限制(服务器必须是 samba),我如何执行 rsync 来使用校验和检查文件之间的任何差异?

roa*_*ima 6

\n

rsync 命令的 --dry-run 选项有什么作用?

\n
\n

正是man rsync所说的那样,

\n
\n

这使得 rsync 执行试运行,不会进行任何更改(并产生与实际运行基本相同的输出)。它最常与-v,--verbose和/或-i,--itemize-changes选项结合使用,以查看 rsync 命令在实际运行之前将要执行的操作。

\n
\n

您建议的命令将运行非常非常慢,因为它必须禁用其优化的重要部分,而是对每个文件进行校验和。我注意到您警告您之前省略了时间戳,实际上您应该使用校验和来验证初始数据。复制时间戳后,您应该从将来的同步运行中删除-c( --checksum) 标志。

\n

您可能需要的是--itemize-changes( -i) 标志,以显示每个文件需要更改的内容。--dry-run( )标志-n将报告每个文件需要更改 - 即使唯一需要更改的部分是文件修改时间等元数据。您可能还需要考虑--delete识别应从目标中删除的文件,因为它们不再位于源中。

\n

考虑这个示例场景

\n
date >origfile             # Original file\nsleep 65\ncp origfile copyfile       # Same content, different timestamp\ncp -p origfile samefile    # Same content, same timestamp\ndate >difffile             # Different content, different timestamp\n\nls -l ????file\n-rw-r--r-- 1 roaima roaima 29 May 21 17:03 copyfile\n-rw-r--r-- 1 roaima roaima 29 May 21 17:03 difffile\n-rw-r--r-- 1 roaima roaima 29 May 21 17:01 origfile\n-rw-r--r-- 1 roaima roaima 29 May 21 17:01 samefile\n\n# Only use --no-whole-file for this scenario. DO NOT use it in production code\nfor file in {copy,diff,same}file\ndo\n    echo "== $file =="\n    rsync --dry-run -ai --delete --no-whole-file --checksum origfile "$file"\n    echo\ndone\n
Run Code Online (Sandbox Code Playgroud)\n

输出(分阶段)

\n
    \n
  1. copyfile需要更新(时间戳)

    \n
     == copyfile ==\n >f..t...... origfile\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. difffile需要更新(内容和时间戳)

    \n
     == difffile ==\n >fc.t...... origfile\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. samefile不需要更新(没有输出rsync

    \n
     == samefile ==\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
\n