dd 命令可以复制文件并对原文件内容进行转换和格式处理。dd 命令经常被用来备份设备。
比如创建一个空文件:
dd if=/dev/zero of=test.txt bs=1M count=1
解释:
- if 输入文件,不指定从 stdin
- of 输出文件,不指定默认 stdout 作为默认输出
- bs 字节为单位的块大小
- count 表示被复制的块
几个设备:
/dev/null
向其输入任何内容都会被吞掉/dev/zero
输入设备,用来初始化文件,提供无穷的 0.
使用实例
注意: 运行 dd 命令需要非常小心,如下命令如果不清楚其含义请千万不要轻易尝试。
测试硬盘读写速度
可以使用如下的命令来测试磁盘的读写速度:
dd if=/dev/zero bs=1024 count=1 of=/tmp/test.file
dd if=/dev/zero bs=1G count=1 of=/tmp/1Gb.file
说明:
if
input fileof
output filebs
block size 表示同时读入/输出的块大小count
number of blocks ,拷贝的块个数oflag
synchronization I/O for data
最后读写的文件大小是 bs 乘以 count 数。
备份整块磁盘
将整块磁盘 /dev/sda 备份到 /dev/sdb,注意 sdb 上的数据将会被覆盖!!!
dd if=/dev/sda of=/dev/sdb bs=4M
创建空文件
创建一个 512M 大小的空文件
dd if=/dev/zero of=/path/to/file count=1024 bs=500000
销毁磁盘数据
利用随机数据填充磁盘,用以销毁数据
dd if=/dev/urandom of=/dev/sda1
全盘数据备份与恢复
备份
dd if=/dev/sda of=/root/sda.img
恢复镜像到指定盘
dd if=/root/sda.img of=/dev/sda
使用 gzip 压缩备份
dd if=/dev/sda | gzip > /root/image.gz
将压缩文件恢复
gzip -dc /root/image.gz | dd of=/dev/sda
对比
dd bs=64k count=4k if=/dev/zero of=test
dd bs=64k count=4k if=/dev/zero of=test; sync
dd bs=64k count=4k if=/dev/zero of=test conv=fdatasync
dd bs=64k count=4k if=/dev/zero of=test oflag=dsync
dd 命令的区别在于写缓存的处理方式。
- 第一条,不包括 sync,dd 命令完成之前并没有让系统把文件写入磁盘,只是把数据读入内存缓存中。dd 命令完成之后系统才会往磁盘写数据,所以这个速度不是真实速度
- 第二条,使用独立的 sync 命令,但是在 sync 命令执行之前 dd 就已经把速度打印出来了,所以也不是真正的速度
- 第三条命令使用
conv=fdatasync
执行之后,会执行一次同步操作 - 第四条命令
oflag=dsync
在执行每次都会进行同步写入操作,这是最慢的一种很是,基本没有用到写缓存