Linux命令 - dd & 测试磁盘读写、构造大文件

2022年12月27日 2208点热度 0人点赞 0条评论

描述

dd命令用于复制文件,并根据操作数进行转换和格式化,且可以测试磁盘读写。

语法

dd [选项]
dd [读入文件] [输出文件] [指定大小] [输出次数]

常用参数

bs :每次同时读写 bytes 字节数 # 设置此值将覆盖 ibs 和 obs
ibs :每次读取 bytes 字节数(默认:512)
obs :每次写入 bytes 字节数(默认:512)
# 默认单位 bytes,后缀表示基数*bytes:c=1, w=2, b=512, kB=1000, K=1024, MB=1000*1000, M=1024*1024, xM=M GB=1000*1000*1000, G=1024*1024*1024
if :从文件中读,而不是标准输入
of :写到文件中,而不是标准输出
count:只拷贝输入文件的前 blocks 块,每块的大小为 ibs-byte 字节
skip :在输入开始时跳过 bytes ibs 大小的块
seek :在输出开始时跳过 bytes 对象大小的块
cbs :每次转换BYTES字节
conv :将文件按指定参数的方式转换(根据逗号分隔符号列表转换文件)
ascii :将EBCDIC转换成ascii。
ebcdic :将ascii转换成ebcdic。
ibm :将ascii转换成alternative ebcdic。
block :每一行输入,无论长短,输出都是 cbs 字节,并且其中的lq换行rq(NEWLINE,即c中的')用 空格替换。如有必要,行尾会填充空格。
unblock:用lq换行rq替换每个输入块( cbs 字节大小)末尾的空格。
lcase :将大写字母转换成小写。
ucase :将小写字母转换成大写。
swab :交换每对输入字节。如果读入的字节数是奇数,最后 一个字节只是简单的复制到输出(因为没有能跟它交换的 字节了)(POSIX 1003.26,PASC翻译1003.2 3号和4号)。
noerror:发生读错误时,继续进行。
notrunc:不截断输出文件。
sync :用0填充到每个输入块的末尾,使其大小为 ibs 字节。

常见用法

拷贝文件/磁盘

快速复制文件 # 将 file1 复制为 file2(如果file2存在,那么直接覆盖)

dd if=file1 of=file2
# if 表示读取文件
# of 表示写入文件

将磁盘 sda1 拷贝到 sda3

dd if=/dev/sda1 of=/dev/sda3 # 磁盘只能拷到磁盘

快速打包磁盘(sda1)

dd if=/dev/sda1 |gzip > sda1.gz

将 gz 包还原到磁盘 sda1

gzip -dc sda1.gz | dd of=/dev/sda1

指定拷贝数据大小(2048KB)

dd if=file1 of=file2 count=2 bs=1024K
# if 表示读取
# of 表示写入
# count 表示块次数
# bs 表示块大小
--默认单位 bytes,后缀表示基数*bytes:c=1, w=2, b=512, kB=1000, K=1024, MB=1000*1000, M=1024*1024, xM=M GB=1000*1000*1000, G=1024*1024*1024

测试磁盘

测试磁盘读,不走内存(块大小为8k,拷贝1048576块,共8GB)

dd iflag=direct,nonblock if=/dev/sda1 of=/dev/null bs=8K count=1048576

测试磁盘写,不走内存(块大小为8k,拷贝1048576块,共8GB)

dd oflag=direct,nonblock if=/dev/sda1 of=./test_w bs=8K count=1048576

测试磁盘同时读写,不走内存(块大小为8k,拷贝1048576块,共8GB)

dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda1 of=./test_rw bs=8K count=1048576

# direct :直接使用直接I/O数据
# nonblock:使用非阻塞I/O
# if :读出
# of :写入
# bs :块大小
# count :块次数

测试磁盘最佳块大小(注意:测试前后清理缓存 echo 3 > /proc/sys/vm/drop_caches)

dd if=/dev/zero bs=1024 count=4000000 of=./4Gb.file
dd if=/dev/zero bs=2048 count=2000000 of=./4Gb.file
dd if=/dev/zero bs=4096 count=1000000 of=./4Gb.file
dd if=/dev/zero bs=8192 count=500000 of=./4Gb.file
dd if=/dev/zero bs=16K count=250000 of=./4Gb.file

修复磁盘

dd if=/dev/sda1 of=/dev/sda1

销毁磁盘sda1

dd if=/dev/urandom of=/dev/sda1

构造大文件

利用 /dev/zero 伪文件生成 1GB 数据文件

dd if=/dev/zero of=file_1GB bs=1G count=1


若是想要生成100GB数据,那么:

dd if=/dev/zero of=file_100GB bs=1G count=100 注意:如果dd读入的值为磁盘,那么输出为二进制文件;如果读入的是普通文本,那么输出也就会是文件格式。

路灯

这个人很懒,什么都没留下

文章评论