如何验证SD卡dd镜像文件的分段MD5校验值?
嘿,这事儿不难,咱们用系统自带的工具就能搞定分段MD5校验,不用额外装软件。我分Linux/macOS和Windows两种情况给你说具体操作:
Linux/macOS 下的校验方法
打开终端,定位到镜像文件所在目录,然后针对每个分段执行对应的命令:
完整1GB分段的校验
每个完整1GB分段可以用dd截取对应部分后计算MD5,规律是:
- 起始字节为
N * 1073741824的分段,skip参数填N(表示跳过N个1GB块) count=1表示只取1个1GB块
举几个例子:
- 第一个分段(0 - 1073741824):
输出的前32位字符就是该分段的MD5,对比给定的dd if=your_image.dd bs=1073741824 count=1 skip=0 | md5sumba2b47b7daa8e17f06d654fd4b65ebe0即可。 - 第二个分段(1073741824 - 2147483648):
对应校验值dd if=your_image.dd bs=1073741824 count=1 skip=1 | md5sumcfa0a3db105c939db30506cd320f7e6c。 - 后续完整分段以此类推,比如起始字节为
10737418240的分段,skip=10即可。
最后一个不足1GB的分段
最后一段(15032385536 - 15931539456)长度为15931539456 - 15032385536 = 899153920字节,用以下命令截取并计算:
dd if=your_image.dd bs=1 skip=15032385536 count=899153920 | md5sum
计算结果对比给定的dbde266ea52d67cb3c125cf418161e29。
Windows 下的校验方法
推荐用PowerShell来实现,操作更灵活:
- 打开PowerShell,定位到镜像文件所在目录。
- 复制以下脚本,把
$imagePath改成你的镜像文件实际路径,然后运行:# 设置镜像文件路径 $imagePath = "C:\Users\YourName\Downloads\sd_image.dd" $blockSize = 1073741824 # 1GB对应的字节数 # 自定义函数:计算指定字节范围的MD5 function Get-SegmentMD5 { param( [string]$FilePath, [long]$StartOffset, [long]$SegmentLength ) $reader = [System.IO.File]::OpenRead($FilePath) $reader.Seek($StartOffset, [System.IO.SeekOrigin]::Begin) | Out-Null $buffer = New-Object byte[] $SegmentLength $reader.Read($buffer, 0, $SegmentLength) | Out-Null $hash = [System.Security.Cryptography.MD5]::Create().ComputeHash($buffer) $reader.Close() return [BitConverter]::ToString($hash).Replace("-", "").ToLower() } # 逐一校验所有分段 Write-Host "0 - 1073741824: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset 0 -SegmentLength $blockSize)" Write-Host "1073741824 - 2147483648: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset $blockSize -SegmentLength $blockSize)" Write-Host "2147483648 - 3221225472: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*2) -SegmentLength $blockSize)" Write-Host "3221225472 - 4294967296: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*3) -SegmentLength $blockSize)" Write-Host "4294967296 - 5368709120: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*4) -SegmentLength $blockSize)" Write-Host "5368709120 - 6442450944: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*5) -SegmentLength $blockSize)" Write-Host "6442450944 - 7516192768: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*6) -SegmentLength $blockSize)" Write-Host "7516192768 - 8589934592: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*7) -SegmentLength $blockSize)" Write-Host "8589934592 - 9663676416: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*8) -SegmentLength $blockSize)" Write-Host "9663676416 - 10737418240: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*9) -SegmentLength $blockSize)" Write-Host "10737418240 - 11811160064: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*10) -SegmentLength $blockSize)" Write-Host "11811160064 - 12884901888: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*11) -SegmentLength $blockSize)" Write-Host "12884901888 - 13958643712: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*12) -SegmentLength $blockSize)" Write-Host "13958643712 - 15032385536: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset ($blockSize*13) -SegmentLength $blockSize)" # 最后一个分段 $lastStart = 15032385536 $lastLength = 15931539456 - $lastStart Write-Host "$lastStart - 15931539456: $(Get-SegmentMD5 -FilePath $imagePath -StartOffset $lastStart -SegmentLength $lastLength)" - 运行后,把输出的每个哈希值和你收到的分段MD5逐一对比即可。
如果所有计算出的哈希都和给定值一致,说明镜像的每个分段都是完整无损的。
内容的提问来源于stack exchange,提问作者Program
相关产品推荐
相关产品推荐

