1. 概述
最初为磁盘设备涉及的工具,也可在其他类型文件操作。
2. 参数说明
格式:dd if=输入文件 of=输出文件 [options]
我常用的命令:
sudo dd if=<firmware> of=/dev/sdx bs=1k seek=4 conv=fsync
其中:
if: 指定输入文件
of: 指定输出目标文件。
bs: 同时设置每次出入输出的块大小。
上面几个比较常用。
还有几个:
seek-blocks: 从输出头文件跳过blocks个块后开始复制。
skip=blocks:从输入头文件跳过blocks个块后开始复制。
我有几个疑问:bs可以随便指定吗?
3. 常用参数解析
3.1 bs
bs决定了读取和写入的性能,影响完成dd命令的时间。经实验。如果bs指定为1,同样为4K字节的数据,传输时间比指定bs为1K时满了三倍。
选择合适的bs值通常需要在IO效率、内存占用和CPU使用之间进行权衡。
因为硬盘驱动器的扇区大小是512字节或4KB。如果你指定的 bs 大小与设备的扇区大小不匹配,dd 可能不会以最佳效率运行,因为它可能需要读取和写入额外的数据来适应扇区大小。
所以一般选择1K、4K、1M等作为bs的值。
3.2 count
count=100 : 实现将源文件的前100个块复制到目标文件。其中,块的大小是bs指定的。这个参数一般没用过,除非你先要复制的文件太大,或者只复制文件的前半部分的数据。
4. dd命令高级应用
dd可用于磁盘修复,数据销毁等操作,详见大佬博客。
5. dd命令与cp命令的区别
- 复制方式差别:cp需要依赖文件系统,它按照文件系统的结构和规则工作。而dd是内存块级别的擦除与写入操作,不关心死否有文件系统。
- 适用场景:cp依赖于文件系统,所以不能复制特殊类型的文件或设备,比如/dev/sda 但是dd命令可以复制特殊类型的文件或设备。(这我不经常用嘛)
- 数据恢复:(没用过)
因此,可以通过dd来进行磁盘备份或者数据恢复,举例如下:
dd if=/dev/sda of=/path/to/backup.img bs=1M // 备份磁盘内容到img文件
dd if=/path/to/backup.img of=/dev/sda bs=1M // 恢复磁盘
6. 有哪些常用的设备文件?
/dev/zero:
/dev/urandom:
/dev/null:
/dev/random:
/dev/sd[a-z]:
/dev/mem: