备份下载后如何核对SHA256

适用环境:Linux GNU sha256sum、macOS自带shasum或Windows PowerShell Get-FileHash;针对普通备份文件的传输完整性检查。

文件名、大小相同,也可能不是同一份内容。SHA256 用来检查下载前后字节是否一致;它不能替代数据库一致性检查、解压测试或真实恢复,也不能证明一个不可信来源的备份是安全的。

在可信源端生成校验值

先确认备份程序已完成并关闭文件。进入备份批次目录,用实际文件名替换 site.tar.gz;目录有空格时保留引号。校验文件与压缩包应来自同一批次。

cd /var/backups/baole/run-2026-10-31
sha256sum -- site.tar.gz > SHA256SUMS
sha256sum -c SHA256SUMS

SHA256SUMS 包含校验值和相对文件名。成功时会显示 site.tar.gz: OK,并返回0。源文件还在写入时不要生成最终校验值;否则下载一个稍晚版本就会发生不一致。通过 SFTP 等受信任渠道保存两个文件,并保留源端结果。

Linux或Mac收到文件后验证

# Linux:先进入下载文件所在目录
sha256sum -c SHA256SUMS

# macOS:先进入下载文件所在目录
shasum -a 256 -c SHA256SUMS

选择适合本机的一条,不必两条都执行。校验命令按 SHA256SUMS 内的文件名寻找文件;如果下载工具改名或放在不同目录,会提示无法打开,不等于文件损坏。先恢复一致的文件名和目录,再检查。不要为了通过校验修改源端记录的哈希值。

Windows PowerShell比较

Get-FileHash -LiteralPath 'D:\Downloads\site.tar.gz' -Algorithm SHA256

把 Hash 列的完整64位十六进制字符串与可信源端值比较,大小写不影响结果,不要只看开头几位。也可以把源端值填入变量后比较:

$expectedHash = '这里替换为可信源端的完整64位SHA256'
$actualHash = (Get-FileHash -LiteralPath 'D:\Downloads\site.tar.gz' -Algorithm SHA256).Hash
$actualHash -ieq $expectedHash

替换完整值后得到 True 才表示匹配。False 时先确认选择的是正确批次和文件,再比较文件大小、下载日志与是否中断。Get-FileHash 报找不到文件时,应检查真实路径,不是改用弱校验算法。

根据结果决定下一步

结果 下一步
匹配 继续压缩包检查与隔离恢复;把下载后的这份副本纳入备份记录。
不匹配 保留两端文件和记录,确认源文件已停止变化,再用新的目标文件重新下载;不立即覆盖仅存的好副本。
部分文件未找到 检查校验文件中的相对路径、下载时是否改名或漏传;补齐后重新核验。
校验文件来源也不可信 从可信管理通道重新取得源端校验结果;相同来源同时被篡改时,简单比较没有真实性保障。

截图或工单只展示必要的文件名、大小、时间和校验结果,隐藏包含个人信息的完整路径。哈希结果一致是一项证据,真正的备份合格仍要以能恢复出需要的数据为准。