dd命令

作者: 祁小彬 | 来源:发表于2022-04-22 14:19 被阅读0次

    一、dd命令的解释
    dd命令主要是用来块拷贝一个指定大小的文件,并在拷贝的同时进行指定的转换。

    注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2

    参数注释:

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

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

    dd用于复制,从if读出,写到of。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

    1. ibs=bytes:一次读入的bytes个字节,即指定一个块大小为bytes个字节。

      obs=bytes:一次写入的bytes个字节,即指定一个块大小为bytes个字节。

      bs=bytes:同时设置读入/输出的块大小为bytes个字节。

    2. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

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

    4. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

    注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

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

    2. conv=conversion:用指定的参数转换文件。

    fdatasync 完成dd命令前,写文件数据到磁盘
    fsync 除文件数据外,同时也写元数据

    1. iflag, oflag 的关键symbol:

    dsync 用同步I/O操作数据

    sync 除文件数据外,同时也写元数据

    如果要规避掉文件系统cache,直接读写,不使用buffer cache,需做这样的设置
    iflag=direct,nonblock
    oflag=direct,nonblock

    dd 命令三种经典使用方法:

    dd if=/dev/zero of=test bs=64k count=16k 是不准确的,可能有数据存在内核缓存中,没有同步到磁盘上。对于关键数据应该加上fsync标识,防止关键数据丢失;

    dd if=/dev/zero of=test bs=64k count=16k conv=fsync 较为稳妥,但是时间用时较长,他在dd结束前会写数据和文件元数据到磁盘;

    dd if=/dev/zero of=test bs=64k count=4k oflag=dsync or sync 每写一次就写一次磁盘,在实际操作中,可以听到磁盘响声,用时较长;

    二、测试磁盘写吞吐量
    使用dd命令对磁盘进行标准写测试。使用一下命令行读取和写入文件,记住添加oflag参数以绕过磁盘页面缓存。

    dd if=/dev/zero of=here bs=1G count=1 oflag=direct

    记录了1+0 的读入

    记录了1+0 的写出

    1073741824字节(1.1 GB)已复制,13.6518 秒,78.7 MB/秒
    三、结合nc命令测试网络
    Server1使用nc监听17480端口的网络I/O请求:

    [root@server1 ~]# nc -v -l -n 17480 > /dev/null

    Ncat: Version 6.40 ( http://nmap.org/ncat )

    Ncat: Listening on :::17480

    Ncat: Listening on 0.0.0.0:17480

    Ncat: Connection from 192.168.0.97.

    Ncat: Connection from 192.168.0.97:39156.
    在Server2节点上发起网络I/O请求:

    [root@server2 ~]# time dd if=/dev/zero | nc -v -n 192.168.0.99 17480

    Ncat: Version 6.40 ( http://nmap.org/ncat )

    Ncat: Connected to 192.168.0.99:17480.

    ^C记录了34434250+0 的读入

    记录了34434249+0 的写出

    17630335488字节(18 GB)已复制,112.903 秒,156 MB/秒

    real 1m52.906s

    user 1m23.308s

    sys 2m22.487s
    总结:
    当然,测试磁盘I/O使用fio工具更好,因为fio支持多种ioengine(rdma/libaio/librbd/libhdfs等)和指定多线程/进程并发数等,另外,测试结果显示的性能更全面(磁盘延迟clat/磁盘利用率util等)。参考:linux 磁盘IO测试工具:FIO (简要介绍iostat工具)
    ————————————————
    版权声明:本文为CSDN博主「Yannick_J」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/don_chiang709/article/details/91411301

    相关文章

      网友评论

          本文标题:dd命令

          本文链接:https://www.haomeiwen.com/subject/kwzcertx.html