dd命令与性能测试
1.简介
Linux dd命令用于读取、转换并输出数据。dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
简单来说,dd命令可以用于:
- 磁盘数据备份与恢复
- 拷贝内存资料到硬盘
- 从光盘拷贝iso镜像
- 格式化磁盘数据
- 测试硬盘读写速度
- 生成一个大文件(用于测试或者模拟磁盘满的异常情况)
2. 参数详解
输入: dd --help
if=文件名:输入文件名,默认为标准输入。即指定源文件。 of=文件名:输出文件名,默认为标准输出。即指定目的文件。 ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。 obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。 bs=bytes:同时设置读入/输出的块大小为bytes个字节。 cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。 skip=blocks:从输入文件开头跳过blocks个块后再开始复制。 seek=blocks:从输出文件开头跳过blocks个块后再开始复制。 count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。 conv=<关键字>,关键字可以有以下11种: conversion:用指定的参数转换文件。 ascii:转换ebcdic为ascii ebcdic:转换ascii为ebcdic ibm:转换ascii为alternate ebcdic block:把每一行转换为长度为cbs,不足部分用空格填充 unblock:使每一行的长度都为cbs,不足部分用空格填充 lcase:把大写字符转换为小写字符 ucase:把小写字符转换为大写字符 swab:交换输入的每对字节 noerror:出错时不停止 notrunc:不截短输出文件 sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 --help:显示帮助信息 --version:显示版本信息
3. 实战应用
3.1 数据备份恢复与擦除
1)备份一个磁盘数据到另外一个磁盘
#这里将/dev/hdb的数据恢复到/dev/hdd,有点像cp命令 dd if=/dev/hdb of=/dev/hdd
2) 恢复文件到某个磁盘
#这里将/root/image文件至/dev/hdb,即用/root/image填充/dev/hdb dd if=/root/image of=/dev/hdb
3)拷贝光盘数据到本地
#这里是从光盘(linux盘符为/dev/cdrom)拷贝到本地文件/root/cd.iso中 dd if=/dev/cdrom of=/root/cd.iso
4)内存数据导出到硬盘
#这里把内存数据(/dev/mem对应内存)导出到本地文件/root/mem.bin,指定块(bs)大小为1M dd if=/dev/mem of=/root/mem.bin bs=1024
5)格式化磁盘数据
#使用随机化数据(/dev/urandom提供随机字符)填充/dev/hda这块磁盘 dd if=/dev/urandom of=/dev/hda
3.2 测试常用技巧
1)生成一个指定大小的大文件
#生成一个10G的文件 dd if=/dev/zero of=/root/file4test bs=1024 count=1048576
2)用于测试磁盘满时候,应用的异常处理
#比如当前应用的数据挂载在/dev/sdc盘,此盘大小为20G,要测试磁盘满的时候,应用写不进去数据这种情况下的表现(异常场景) dd if=/dev/zero of=/root/file4test bs=1024 count=2097152
3)磁盘性能测试(用于测试不同块大小情况下的读写性能)
#bs=4k下:写测试 dd if=/dev/zero of=test_write_file_4k bs=4k count=262144 #bs=4k下:读测试 dd if=test_write_file_4k of=/dev/null bs=4k #bs=1m下:写测试 dd if=/dev/zero of=test_write_file_1m bs=1m count=10240 #bs=1m下:读测试 dd if=test_write_file_1m of=/dev/null bs=1m #bs=1m下:读写测试 。1.先生成文件test_read_file_1m dd if=/dev/zero of=test_read_file_1m bs=1m #2.测试读写性能 dd if=test_read_file_1m of=test_write_file_1m bs=1m
说明:
- dd命令执行过程是顺序IO,而不是随机IO,只能粗略模拟磁盘读写场景
- if=/dev/zero不产生IO,因此可以用来测试纯写速度
- of=/dev/null不产生IO,可以用来测试纯读速度
博主:测试生财(一个不为996而996的测开码农)
座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。
内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。
csdn:https://blog.csdn.net/ccgshigao
博客园:https://www.cnblogs.com/qa-freeroad/
51cto:https://blog.51cto.com/14900374
微信公众号:测试生财(定期分享独家内容和资源)