当前位置: 首页 > news >正文

文件系统-5-相关工具-dd命令 - Hello

文件系统-5-相关工具-dd命令

基于A12+msm-5.4


一、简介

1. dd --help

Toybox 0.8.4-android 多调用二进制文件:https://landley.net/toybox(参见 toybox --help)

用法:

dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [iflag=FLAGS] [oflag=FLAGS][bs=N] [count=N] [seek=N] [skip=N] [conv=notrunc|noerror|sync|fsync] [status=noxfer|none]

作用: 复制/转换文件。

(1) 参数介绍:

if=FILE 从文件读取数据,而不是从标准输入读取数据
of=FILE 写入文件,而不是向标准输出写数据
bs=N 一次读取和写入 N 个字节
ibs=N 输入块大小
obs=N 输出块大小
count=N 仅复制 N 个输入块
skip=N 跳过 N 个输入块
seek=N 跳过 N 个输出块
iflag=FLAGS 设置输入标志
oflag=FLAGS 设置输出标志
conv=notrunc 不截断输出文件
conv=noerror 读取错误后继续执行
conv=sync 用填充块
conv=fsync 在完成之前将数据物理写出
status=noxfer 完成后,不显示传输速率. 更高版本还有一个 progress 参数,用于实时显示进度。
status=none 完成后,不显示传输速率或输入/输出记录

FLAGS 是一个以逗号分隔的列表,包含:
count_bytes (iflag) 将 count=N 解释为字节,而不是块
seek_bytes (oflag) 将 seek=N 解释为字节,而不是块
skip_bytes (iflag) 将 skip=N 解释为字节,而不是块。

数字可以以 c (*1)、w (*2)、b (*512)、kD (*1000)、k (*1024)、MD (*1000*1000)、M (*1024*1024)、GD (*1000*1000*1000) 或 G (*1024*1024*1024) 为后缀。

(2) 核心参数:

------------------------------------------------------------------------------------
参数    含义
------------------------------------------------------------------------------------
if=     输入文件/设备(input file)
of=     输出文件/设备(output file)
bs=     块大小,读写每次的字节数(如 4k、1M、512)
count=  复制的块数量
skip=   跳过输入开头的 N 个块
seek=   跳过输出开头的 N 个块
conv=   数据转换选项(见下)
status= 进度显示(none/noxfer)
iflag=  解释为字节(count_bytes/skip_bytes),更高版本还支持(direct/sync/nonblock)
oflag=  解释为字节(seek_bytes),更高版本还支持(direct/sync/dsync)
------------------------------------------------------------------------------------


2. 注意事项

(1) if 和 of 写反会直接损坏源设备,操作磁盘/分区前务必再三确认。

(2) bs 太小(如 512B)会拖慢速度,通常用 4M 或 64M 比较合适


二、使用示例

1. 磁盘镜像读写

dd if=/dev/sda of=/backup/disk.img bs=4M //
dd if=/backup/disk.img of=/dev/sdb bs=4M //


2. 磁盘擦除

dd if=/dev/zero of=/dev/sda bs=4M //清零磁盘
dd if=/dev/urandom of=/dev/sda bs=4M //用随机数据擦除


3. 读写指定位置

dd if=/dev/sda of=mbr.bin bs=512 count=1 //提取前 N 个字节
dd if=/dev/sda of=part.img bs=512 skip=2 count=10 //跳过前2个块,读取后续10个块

dd if=data.bin of=/dev/sda bs=512 seek=2048  //从2048扇区之后写


4. 测试磁盘读写速度

dd if=/dev/sda of=/dev/null bs=4M //
dd if=/dev/zero of=/tmp/test.img bs=1M count=1024 //


5. 大小写转换

//注:A12的此版本还不支持
dd if=input.txt of=output.txt conv=ucase //转大写
dd if=input.txt of=output.txt conv=lcase //转小写


6. 写入后验证

//验证写入后是否和源文件一致
md5sum boot.img
dd if=/dev/block/bootdevice/by-name/boot bs=4M | md5sum


7. 常用测试

dd if=/dev/block/zram0 of=/dev/null bs=1M count=1024 //测试读
dd if=/dev/zero of=/tmp/dd_test.img bs=1M count=1024 //测试写