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

如何最快用0覆盖SD卡?现有dd实现优化疑问

SD卡写零速度优化建议

首先明确:SD卡的连续写入速度确实是核心瓶颈,但仍有一些小优化点可以尝试,避免不必要的性能损耗:

一、调整dd参数

  • 增大bs值测试:尝试将bs调到64M或128M(注意不要超过系统可用内存的1/4),虽然超过SD卡内部缓存后提升有限,但部分场景下能减少IO调度的开销。
  • 移除oflag=direct和conv=fdatasync:
    • oflag=direct会绕开系统页缓存,强制每次写入直接落盘,而系统缓存原本可以合并零散IO请求,减少SD卡的实际写入次数,移除后反而能利用缓存提升效率。
    • conv=fdatasync会在写入完成后强制同步磁盘缓存,增加额外的等待时间,如果不需要实时确保数据完全写入,可以去掉该参数(若需要最终同步,可在dd完成后单独调用sync命令)。
  • 添加iflag=fullblock:针对/dev/zero这类字符设备,确保dd每次读取完整的块大小,避免因部分读取导致的IO次数增加。

调整后的dd命令示例:

dd_process = subprocess.Popen(
    ['dd', 'if=/dev/zero', f'of={self.selected_device}', 'bs=64M', 'iflag=fullblock', 'status=progress'],
    stderr=subprocess.PIPE,
    universal_newlines=True
)

二、优化进度解析逻辑

当前代码每读取一行dd的stderr输出就更新进度,频繁的print和信号发射会带来微小的性能开销。可以优化为:

  • 减少进度更新频率,比如每累计写入1GB或进度变化5%时再更新。
  • 缓存当前进度值,避免重复发射相同的进度信号。

示例优化片段:

last_progress = -1
for line in dd_process.stderr:
    match = progress_pattern.search(line)
    if match:
        bytes_written = int(match.group(1))
        progress_value = min(int((bytes_written / device_size) * 100), 100)
        if progress_value != last_progress:
            print(f"[DEBUG] Zeroing progress: {progress_value}%")
            self.zero_progress_update.emit(progress_value)
            last_progress = progress_value

三、替代工具尝试

如果dd的性能仍不满意,可以尝试用更高效的工具替代,比如cat配合pv(若系统已安装):

# 示例:用cat + pv替代dd,进度通过pv获取
pv_process = subprocess.Popen(
    ['pv', '-s', str(device_size), '/dev/zero'],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    universal_newlines=True
)
dd_process = subprocess.Popen(
    ['dd', f'of={self.selected_device}', 'bs=64M'],
    stdin=pv_process.stdout,
    stderr=subprocess.PIPE,
    universal_newlines=True
)
# 解析pv的stderr获取进度
for line in pv_process.stderr:
    # pv的输出格式类似 "1.23GB 0:00:10 [123MB/s] [=====>               ] 30% ETA 0:00:23"
    progress_match = re.search(r'(\d+)%', line)
    if progress_match:
        progress_value = int(progress_match.group(1))
        self.zero_progress_update.emit(progress_value)

四、核心瓶颈说明

如果上述优化后速度仍无明显提升,那确实是SD卡本身的硬件限制:

  • SD卡的Class等级(如Class 10、UHS-I U3)决定了最低连续写入速度,实际速度还受卡的主控、闪存颗粒影响。
  • 老旧或劣质SD卡的连续写入速度可能远低于标称值,尤其是写入接近满容量时,速度会因垃圾回收机制进一步下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:09:59