zoukankan      html  css  js  c++  java
  • 【转】dd命令详解及利用dd测试磁盘性能

    dd命令详解及利用dd测试磁盘性能

     
    linux下dd命令详解
    名称: dd
    使用权限: 所有使用者
    manpage 定义: convert and copy a file

    使用方式:
    dd [option]

    dd --help

    info dd

    dd --version

    输入或输出
    dd if=[STDIN] of=[STDOUT]

    强迫输入或输出的Size为多少Bytes
    bs: dd -ibs=[BYTE] -obs=[SIZE]

    语法:dd [选项]

    if =输入文件(或设备名称)。

    of =输出文件(或设备名称)。

    ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。

    skip = blocks 跳过读入缓冲区开头的ibs*blocks块。

    obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。

    bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。

    cbs = byte 一次转换bytes字节。

    count=blocks 只拷贝输入的blocks块。

    conv = ASCII 把EBCDIC码转换为ASCIl码。

    conv = ebcdic 把ASCIl码转换为EBCDIC码。

    conv = ibm 把ASCIl码转换为alternate EBCDIC码。

    conv = block 把变动位转换成固定字符。

    conv = ublock 把固定位转换成变动位。

    conv = ucase 把字母由小写转换为大写。

    conv = lcase 把字母由大写转换为小写。

    conv = notrunc 不截短输出文件。

    conv = swab 交换每一对输入字节。

    conv = noerror 出错时不停止处理。

    conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。

    noerror
    出错时不停止。

    notrunc
    不截短输出文件。

    sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

    ----------------------------------------------------------------

    认识下两个"伪文件"

    /dev/null

    位桶文件(bit bucket),就是我们常说的空文件。是一个输出设备。

       任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.

    /dev/zero

    是一个输入设备,你可你用它来初始化文件。

        该设备无穷尽地提供0(是ASCII 0 就是NULL),可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入NULL。
        像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.

    --------------------------------------------------------------

    使用dd来测试硬盘读写速度
    dd只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确。
     
    读性能测试
    # time dd  iflag=direct,nonblock  if=/dev/sda2 of=/dev/null bs=8k count=8388608

        因为/dev/sda2是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

    写测试
    # time dd oflag=direct,nonblock if=/dev/zero f=/opt/iotest bs=8k count=8388608 
        因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。 
    读写测试
    # time dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda2 f=/opt/iotest bs=8k count=8388608  
     
      注:bs是一次io读的规模,理论上bs越大,所测得性能越高
          count是读多少个"bs",也可以写成count=16G
         

    规避掉文件系统cache,直接读写,不使用buffer cache

    iflag=direct,nonblock

    oflag=direct,nonblock

    iflag=cio

    oflag=cio

    direct 模式就是把写入请求直接封装成io 指令发到磁盘

    direct 模式,就把数据写入系统缓存,然后就认为io 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘

     转自:http://blog.sina.com.cn/s/blog_61c006ea0100lbk1.html

  • 相关阅读:
    Java实现 LeetCode 69 x的平方根
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 68 文本左右对齐
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 67 二进制求和
    Java实现 LeetCode 66 加一
    Java实现 LeetCode 66 加一
    CxSkinButton按钮皮肤类
  • 原文地址:https://www.cnblogs.com/caogen1991/p/9881526.html
Copyright © 2011-2022 走看看