在不支持 SN/防伪码的情况下,如何快速判断 SD 卡的真实性 | 伪斜杠青年
存储高溢价时代,一张低容量 SD 卡难求,低价不放心,但偶尔能在百亿补贴的品牌旗舰店看到一些基础价格的卡,我也搞了一张 Lexar 64G , 包装没有 SN 也没有防伪码,全英文,金额小所以也不支持开票。
市面上所谓的假卡,无非就是旧卡再利用以及空间扩容,包装和金手指都很新,以及在官方专卖店买的,官方公众号人工客服看了激光码等都判断正常。
于是主要可测试的部分就在于容量真实性,根据资料查询得知,主要 Windows 流行的方式为 H2testw,我在 Windows 的虚拟机下跑了 11 个G,慢,发热大。
对于 Linux 或者 MacOS 来说有原理相似的解决办法:
- 检查可用空间大小,64 G 可用为 58.9 G。
- 执行生成乱七八糟的文件按一个文件 1G填充 并计算 hash。
- 检测生成文件是否出错,生成完成后校验每个文件的 hash 是否正确。
我这里是直接在 树莓派上执行的,64 G 卡,在 df -h / 结果显示已经占用了 15G (4G Swap)的情况下:
➜ ~ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p2 54G 15G 37G 28% /
给 Linux 留点空间,选择了生成 33个 G:
➜ mkdir -p ~/sd_test && cd ~/sd_test
➜ for i in {1..33}; do
echo "正在生成第 $i/33 GB 测试文件..."
openssl rand -out testfile_$i.bin 1073741824
sha256sum testfile_$i.bin > testfile_$i.sha256
done
花费了大概 33 分钟。执行下 Linux 的内存同步以及缓存清空:
➜ sudo sync
➜ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
如果是 MacOS 则:
➜ sudo sync
➜ sudo purge
最后检查 hash 是否正常:
➜ sd_test sha256sum -c *.sha256
testfile_1.bin: OK
...
testfile_33.bin: OK
填满至 92% 占用,文件 hash 校验正常,系统运行正常,重启后树莓派各服务也无异常,有惊无险。
最后记得清除测试文件:rm -rf ~/sd_test。
至于和 H2testw 的区别,AI 给出了答案,下次直接用 M4 处理哪怕 128G 可能也就只需要30分钟,毕竟树莓派慢得多。所以能快速得出结果,何必费时废卡。
.h2w 文件,校验字节位计算开销高(树莓派 CPU 实时计算 SHA256 稍占资源)极低(专为大文件读写优化的轻量算法)系统盘安全高(支持手动控制写入总量,留足系统运行空间)低(默认榨干所有剩余空间,若在系统盘运行易致崩溃)坏道定位按 1GB 文件块定位(如“第 15G 文件校验失败”)精确到具体字节/扇区级(如“在 31.2GB 处丢失数据”)便捷程度树莓派 SSH 远程直接测,无需拔卡必须拆下 SD 卡插到 Windows 电脑读卡器测试以上。