Linux dd
Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
我们可以利用 dd 命令的复制功能,测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确。
- 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),可以理解为linux中的黑洞文件.
- 在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL),可以无限读取。
一个典型用法是用它提供的字符流来覆盖信息, 另一个常见用法是产生一个特定大小的空白文件。
测试写入速率
time
有计时作用.dd
用于复制,- 从
if
读出,写到of
。 if=/dev/zero
不产生IO,因此可以用来测试纯写速度.bs
是每次读或写的大小,即一个块的大小,count
是读写块的数量。offlag=direc
参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache .
time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct
可以看到,该分区磁盘写入速率为 884M/s
,其中:
- /dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
- if 参数用来指定 dd 命令读取的文件。
- of 参数用来指定 dd 命令写入的文件。
- bs 参数代表每次写入的块的大小。
- count 参数用来指定写入的块的个数。
- offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。
测试读性能
刚刚上面测试写的时候写了一个test.file
的空白文件,正好拿来测试读性能
time dd if=test.file of=/dev/null bs=1M iflag=direct
dd复制文件
备份的硬盘demo
这个命令将 sda 盘备份到指定文件 /root/sda.img 中去
dd if=/dev/sda of=/root/sda.img
上面备份完/dev/sda磁盘后恢复demo
dd if=/root/sda.img of=/dev/sdb
备份的时候使用gzip
进行压缩
dd if=/dev/sda | gzip > /root/sda.img.gz
gzip
进行解压恢复备份
gzip -dc /root/sda.img.gz | dd of=/dev/sdc
备份bzip2 进行压缩
dd if=/dev/sda | bzip2 > disk.img.bz2
bzip2 恢复备份
bzip2 -dc /root/sda.img.gz | dd of=/dev/sdc