dd简单使用-存储视角

dd简介

简单粗暴 随叫随到的工具

dd 单纯的用 open + read + seek + write 这四个 api 在做文件操作,除了 iflag 可以多指定一些打开参数之外,没有任何魔法

https://github.com/coreutils/coreutils/blob/master/src/dd.c

常用说明

从存储/分布式存储角度,通过以下3点的配合,可以测试bufferIO、directIO进行文件的读写,同时可以控制offset非0,避免本地文件系统的预读。

1. 输入输出控制

if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

使用if=/dev/zero写一个文件: dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

读文件写入到空设备/dev/null:dd if=/root/1Gb.file bs=64k | dd of= /dev/null 不用管道也可以

2. 写入量控制

bs=bytes:同时设置读入/输出的块大小为bytes个字节。其他参数 ibs 读入、obs 输入

count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

3. offset控制

skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

控制读文件的offset非0,避免本地文件系统预读

备份到磁盘或磁带时才有效,很少用 seek=blocks

4. IO模型控制

默认是bufferIO,如果要规避掉文件系统cache,直接读写,不使用buffer cache,需做这样的设置

iflag=direct,nonblock

oflag=direct,nonblock

direct:读写数据采用直接IO方式;nonblock:读写数据采用非阻塞IO方式

/dev/zero 是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

/dev/null ——它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。/dev/null对命令行和脚本都非常的有用

你可能感兴趣的:(分布式存储)