You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下dd读取MMC设备与文件内容不一致问题咨询

问题解答:块设备读取与文件内容不一致的原因

你的怀疑完全正确,问题的核心就是**Linux的页缓存(page cache)**机制,下面结合你的操作步骤具体解释:

页缓存的基本作用

Linux系统会把磁盘上读取过的数据暂存在内存的页缓存中,后续再读取相同位置时直接从内存取,避免重复的磁盘IO操作,大幅提升读写性能。但这个机制在直接读取块设备(如/dev/mmcblk0p8)时,会因为缓存一致性的问题导致你看到的现象。

结合你的实验过程分析

  1. 第一次写入test文件并执行sync后,文件内容已经刷到物理磁盘,此时用xxd读取块设备,系统会把对应磁盘块加载到页缓存,所以能正确找到lmk743的位置。
  2. 修改test文件并再次sync后,文件系统已经把新内容kukuka097刷到了物理磁盘,但页缓存中之前加载的旧磁盘块(存着lmk743)并没有被更新——因为直接读取块设备时,系统不会主动感知文件系统对磁盘内容的修改,页缓存只会在你主动刷新或清空时才会重新加载磁盘数据。
  3. 当你不带direct标志用dd读取块设备时,系统直接返回页缓存里的旧数据,所以看到的还是lmk743;而添加iflag=direct后,dd会绕过页缓存直接读取物理磁盘,因此拿到的是最新的kukuka097。
  4. 至于通过/userdata/test文件读取能拿到最新内容,是因为文件系统本身会维护缓存与磁盘的一致性:当文件内容被修改并刷盘后,文件系统会标记对应页缓存为失效,下次读取文件时会重新从磁盘加载最新数据。

解决方法

如果需要直接读取块设备获取最新内容,有两种常用方式:

  • 读取前清空页缓存:执行echo 3 > /proc/sys/vm/drop_caches(需要root权限)
  • 读取时绕过页缓存:在dd命令中添加iflag=direct参数,就像你实验中做的那样

内容的提问来源于stack exchange,提问作者wwg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:07:11