You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 23.04下dd工具未完全覆盖存储设备,如何确保数据正确写入?

Ubuntu 23.04下dd工具未完全覆盖存储设备,如何确保数据正确写入?

我之前也碰到过类似的情况,dd命令看似执行完成,但实际物理介质上还残留旧数据,大概率是缓存机制或者写入参数的问题,给你几个实用的解决思路:

  • 强制同步缓存,确保数据落地到物理介质
    Linux系统会把磁盘写入数据暂存在内存缓存里,dd默认不会自动等待缓存刷到硬件。你可以给dd加conv=fsync参数,让它写完后强制同步缓存:
dd if=/dev/zero of=/dev/sdb bs=4M conv=fsync

或者写完dd后手动执行sync命令,等它执行完毕再去验证,这样能保证内存里的缓存数据都真正写到SD卡上。

  • 确认设备路径没写错
    很多时候会不小心把数据写到SD卡的分区(比如/dev/sdb1)而非整个SD卡设备(/dev/sdb),未覆盖的区域自然会残留旧数据。可以用lsblk命令确认SD卡的完整设备名,确保你指定的是整个设备而非单个分区。

  • 用哈希校验验证写入结果
    如果要确保你的镜像文件能正确写入,最可靠的方法是对比源文件和目标设备的哈希值:

    1. 先计算源镜像的哈希:
    sha256sum your_image.img
    
    1. 再计算SD卡对应镜像大小的内容哈希(避免读取镜像外的空白区域干扰结果):
    head -c $(stat -c %s your_image.img) /dev/sdb | sha256sum
    

    两个哈希值完全一致的话,就说明数据已经正确写入了。

  • 提前擦除SD卡旧数据(可选)
    部分SD卡有磨损均衡机制,旧数据可能存在备用块中。你可以先用blkdiscard命令擦除整个设备的旧数据,再用dd写入:

blkdiscard /dev/sdb

⚠️ 注意:这个命令会彻底清空SD卡所有数据,执行前务必确认设备路径正确!

你碰到的strings读出随机文本的问题,很大概率是因为没同步缓存,读到的是内存里残留的旧数据,同步后再读就不会有这种情况了。

备注:内容来源于stack exchange,提问作者jp_

火山引擎 最新活动