Pet*_*r A 16 ubuntu file-transfer file-copy files checksum
我有一个使用 Ubuntu 的家庭文件服务器。
最近,我的一个驱动器装满了,所以我又买了一个,把它扔进去了。
我有一个非常大的文件夹,该目录大小约为 1.7?T,并且包含相当数量的文件。
我使用GCP将文件从旧驱动器复制到新驱动器,它似乎运行良好。
我现在想在删除旧驱动器中的数据以释放空间之前,对照旧驱动器上的原始目录验证新驱动器上的新目录。我知道我可以做一个 CRC 检查来做到这一点。
具体怎么做呢?
Ant*_*gan 18
我只会使用以下diff
命令:
diff -rq --no-dereference /path/to/old/drive/ /path/to/new/drive/
Run Code Online (Sandbox Code Playgroud)
这会读取并比较目录树中的每个文件并报告任何差异。该-r
标志递归地比较目录,而-q
标志只是在文件不同时向屏幕打印一条消息——而不是打印实际差异(就像文本文件一样)。--no-dereference
如果存在不同的符号链接,例如,在一个目录中为符号链接,而在其对应目录中为链接到的文件的副本,则该标志可能很有用。
如果diff
命令没有输出 output,则表示目录树确实相同;可以运行echo $?
验证一下它的退出状态是0
,说明两组文件是一样的。
我认为在这种情况下计算 CRC 或校验和不是特别有益。如果这两组文件位于不同的系统上,并且每个系统都可以计算自己的一组文件的校验和,那么只需要通过网络发送校验和,那就更有意义了。计算校验和的另一个常见原因是保留校验和的副本以备将来使用。
rsync通常用于复制文件而不是gcp
,但它也可用于验证副本,无论它是如何制作的。简单地做
rsync -niaHc /origfolder/ /copyfolder
Run Code Online (Sandbox Code Playgroud)
小心以 . 结尾的第一个文件夹名称(源)/
。选项是
-n
不要复制(不做任何更改)-i
列举差异-a
保留(即比较,因为我们有-n
)权限、所有权、符号链接等,并向下递归目录-H
保留硬链接-c
比较校验和输出显示了一个代码,详细说明了每个不同文件或目录的差异。如果它们相同,则没有输出。如果比较的那个方面没问题,代码中有列YXcstpoguax
,其中每个字符都是一个点.
,或者是一个字母:
Y is type of update:
< sent (not appropriate in this case)
> need to copy
c missing file or directory
h is hard link
. no update
* and rest of line is a message, eg *deleting
X file type: f file d dir L symlink D device S special file
c checksum differs. + new item " " same
s size differs
t timestamp differs
p permissions differ
o owner differ
g group differ
u (not used)
a acl differ
x extended attributes differ
Run Code Online (Sandbox Code Playgroud)
例如,
.d..t...... a/b/ directory timestamp differs
cL+++++++++ a/b/d -> /nosuch2 symbolic link missing
cS+++++++++ a/b/f special file missing (a/b/f is a fifo)
>f..t...... a/b/ff file timestamp differs
hf a/b/xx1 => a/b/xx files should be a hard linked
cLc.t...... a/b/z -> /tmp/hi2 symbolic link to different name
cd+++++++++ a/c/ directory missing
>f+++++++++ a/c/i.10 missing file needs to be copied
Run Code Online (Sandbox Code Playgroud)
请参阅man rsync
下--itemize-changes
的更多细节。如果您在第 3列c
或第 4s
列中存在差异,那么您的数据已严重损坏。其他标志(例如不同的权限、所有者或时间戳)对您来说可能不太重要。如果所有文件都标记为“丢失”,那么您可能没有提供正确的目录进行比较。如果您确定,在没有-n
标志的情况下运行 rsync将“修复”差异。