如何保存原文件夹哈希至文件并后续验证备份介质的完整性
嗨,这事儿我熟,给你一套高效又靠谱的实操方案,分Windows和类Unix(Linux/macOS)两种环境来拆解,都是原生工具就能搞定的,不用额外装花里胡哨的软件:
核心原则是:哈希文件绝对不能放在待删除的原文件夹里,不然删完原文件就没发验证了,最好直接存到备份介质的根目录,或者单独存个安全的地方(比如云盘再备一份)。
Windows系统(PowerShell/CMD二选一)
优先用PowerShell(系统自带,无需额外下载):
假设原文件夹路径是D:\MyImportantFiles,想生成安全性更高的SHA256哈希,运行这条命令:Get-FileHash -Path "D:\MyImportantFiles\*" -Algorithm SHA256 | Out-File "D:\MyImportantFiles_Hashes.txt" -Encoding UTF8它会自动遍历文件夹里所有文件(包括子文件夹里的),把每个文件的路径、哈希值都写到
MyImportantFiles_Hashes.txt里。习惯用CMD的话,可以用微软官方的
fciv工具(需要先下载):fciv -add "D:\MyImportantFiles" -sha256 -out "D:\MyImportantFiles_Hashes.txt"
类Unix系统(Linux/macOS通用)
系统自带sha256sum(Linux)或shasum(macOS),直接用就行:
cd /path/to/MyImportantFiles find . -type f -exec sha256sum {} \; > ../MyImportantFiles_Hashes.txt
这条命令会遍历当前文件夹下所有文件,把哈希和路径输出到上级目录的哈希文件里(避免把哈希文件本身包含到待校验列表里)。macOS用户把sha256sum换成shasum -a 256就行。
把之前存好的哈希文件复制到备份文件夹的同级目录,然后对应系统执行命令:
Windows系统
PowerShell生成的哈希文件,运行:
Get-FileHash -Path "E:\Backup\MyImportantFiles\*" -Algorithm SHA256 | Compare-Object -ReferenceObject (Get-Content "E:\Backup\MyImportantFiles_Hashes.txt")如果输出为空,说明所有文件哈希完全匹配,备份没问题;要是有差异,会直接列出不匹配的文件。
fciv生成的哈希文件,运行:fciv -v -sha256 -file "E:\Backup\MyImportantFiles_Hashes.txt"工具会自动比对所有文件,直接输出验证结果。
类Unix系统
cd /path/to/Backup/MyImportantFiles sha256sum -c ../MyImportantFiles_Hashes.txt
每个文件会显示OK(匹配)或者FAILED(不匹配),一目了然。macOS用户替换成shasum -a 256 -c ../MyImportantFiles_Hashes.txt即可。
- 优先选SHA256或SHA512算法,比MD5更安全,几乎不会出现哈希碰撞的情况。
- 生成哈希时尽量避开系统高负载时段(比如正在大量下载/解压文件),虽然概率极低,但能避免意外计算错误。
- 如果备份介质是光盘这类只读介质,记得把哈希文件一起刻进去,不然后续找不到就麻烦了。
内容的提问来源于stack exchange,提问作者user10191234

