Metlivi 博客

如何使用文件校验和检查离线日记备份

要检查数字日记的离线副本是否与源文件逐字节一致,请从指定源文件创建 SHA-256 校验和清单及文件目录列表,然后对照该受保护的基线验证备份。校验和匹配可以证明所列文件的字节完全一致;但它不能证明列表是完整的、原始文件正确或可读,也不能证明不可信的基线是真实有效的。

2026年9月29日5 分钟阅读生活美学与自我表达作者:Metlivi Editorial Team
第 1 节

校验和检查能告诉你什么

校验和是根据文件内容计算出的一个值。如果内容发生变化,计算出的值通常也会不同。因此,将备份与参考值进行比对有助于发现在复制或存储过程中发生的变化。数字保存联盟(Digital Preservation Coalition)将校验和描述为一种检查传输是否成功以及文件是否持续保持稳固(fixity)的方法,并强调应与已知正确的参考值进行比对([Fixity and checksums](https://www.dpconline.org/handbook/technical-solutions-and-tools/fixity-and-checksums))。

参考基准至关重要:如果你从同一份已经损坏的副本中同时计算基线和比对值,两者的匹配并不能证明早期文件包含什么内容。同样,匹配也不能证明日记条目能够正常打开、源文件是完整的,或者文件是由谁创建的。请将此视为仅针对特意选定的一组文件进行的字节级比对。

第 2 节

选择并记录源文件集

确定一个需要备份的稳定导出的日记文件夹,并在计算哈希值之前完成所有编辑。本例适用于常规文件(包括隐藏文件);它不跟踪符号链接,也不以一致的方式捕获运行中的应用程序数据库。必要时请将链接的素材导出到所选文件夹中,并查阅应用程序的导出说明。将生成的目录列表和清单保存在该文件夹之外。

这些示例需要 Bash 和 GNU findutils/coreutils(如在 Ubuntu Linux 上);它们不适用于未经修改的 macOS 或 Windows 终端。该示例使用虚构的本地路径和新的输出文件名。请使用现有的父目录存放记录;选择未使用的文件名,以免覆盖早期的基线。请将它们替换为你自己电脑上的路径;将私密日记和生成的记录保留在本地。Ubuntu 手册记录了 `sha256sum` 的生成及其用于验证先前输出的 `--check` 选项([sha256sum manual](https://manpages.ubuntu.com/manpages/noble/man1/sha256sum.1.html))。

```bash ( set -euo pipefail set -C cd "/home/example/Diary" find . -type f -print0 | LC_ALL=C sort -z > "/home/example/diary-inventory.nul" xargs -0 -r sha256sum < "/home/example/diary-inventory.nul" > "/home/example/diary-source.sha256" test -s "/home/example/diary-source.sha256" ) ```

该子 shell 会在目录切换或管道失败时停止运行,拒绝覆盖现有的记录文件,并拒绝空的校验和清单。如果它报错,请勿使用部分输出作为基线。目录列表使用 NUL 分隔符,以便包含换行符的文件名仍能清晰区分。两份记录均保存在所选文件夹之外。在信任该源文件集之前,请对照日记导出的内容进行仔细核对;清单无法发现生成之前就被遗漏的附件。

第 3 节

保护基线并复制文件

将清单和目录列表单独存放在与工作源文件和离线备份均分开的位置。保护它们免遭意外修改,在可行的情况下保留第二份受保护的副本。只有当你有理由信任并保存该基线时,校验和比对作为参考检查才具有价值。数字保存指南同样将稳固性信息视为记录下来并用于审计的内容;美国国家档案和记录管理局(NARA)在其数字保存计划中描述了记录稳固性、跟踪文件操作以及创建清单和日志的做法([National Archives digital preservation](https://www.archives.gov/preservation/digital-preservation/about))。

使用你常用的文件复制方式将选定的日记文件夹复制到备份驱动器。在不进行检查时,请保持备份驱动器处于断开状态。此处的命令不执行复制操作;它们只检查已经复制的文件。在检查备份之前,避免对其进行编辑、重命名或重组,因为路径更改可能导致清单找不到预期的文件。

第 4 节

验证复制的字节

挂载离线驱动器并进入已复制的日记文件夹。使用源端记录的相同 SHA-256 算法和相对路径,对照基线清单运行检查:

```bash ( set -euo pipefail cd "/media/example/DiaryBackup/Diary" sha256sum --check --strict "/home/example/diary-source.sha256" ) ```

清单中存储的是以 `./` 开头的相对路径,因此验证需从已复制的日记文件夹中运行。`OK` 表示该文件匹配。缺失或不匹配的文件、格式错误的校验和行以及命令错误都需要调查;请勿使用 `--ignore-missing` 掩盖它们,也不要因为看到几行 `OK` 就假定整个检查已通过。[Ubuntu 手册](https://manpages.ubuntu.com/manpages/noble/man1/sha256sum.1.html)记录了这些选项。

此检查不会报告备份中存在但未列在清单中的额外文件。如果需要检测多余的文件或意外的目录内容,请作为单独的步骤将备份的文件清单与保存的源文件清单进行比对。即便清单一致,仍然无法证明你最初选择的文件包含了你打算保存的每一篇日记内容。

第 5 节

在不替换证据的情况下排查不匹配问题

如果文件不匹配,请记录其路径并保持两份副本均不变。确认预期的清单和工作文件夹无误后,再分别比对源文件和备份。检查编辑、重命名或不完整的复制是否能解释这种差异。在调查期间保留不匹配的副本;自动覆盖它会消除证据。

数字保存指南提倡使用已知良好的副本替换稳固性已丢失的副本,这取决于手头是否有另一份值得信赖的副本可用([Digital Preservation Coalition](https://www.dpconline.org/handbook/technical-solutions-and-tools/fixity-and-checksums))。对于个人日记而言,只有在比对现有证据之后才能做出这一决定。校验和仅用于发现差异;它们无法修复文件,也无法替你决定哪个版本是正确的。

第 6 节

局限性与实用的记录方式

在本地保留一份简短记录,包含源文件夹、基准日期、算法、清单位置以及每次检查的结果。对于日后的检查,请保留已确立的基线,而不是从正在评估的备份中重新生成基线。在进行刻意的编辑或格式转换后,请单独记录新版本。继续定期进行打开和恢复检查:仅凭字节稳固性无法判断你的日记是否仍然可用。

相关阅读

继续探索这个主题