`
yhz61010
  • 浏览: 563315 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12281
社区版块
存档分类
最新评论

[原创] dd 命令进行磁盘测试及 conv 和 oflag 参数的说明

阅读更多
使用 dd 命令进行磁盘读写测试,相认大家可能都做过,尤其是在测试 VPS 磁盘性能时。

关于该命令的及其参数的详细说明,请查看手册(执行如下命令):
info coreutils 'dd invocation'
如果你在进行磁盘性能测试时,使用的是下面的命令:
dd if=/dev/zero of=test bs=64k count=4k
那么,请你继续看本文。因为这么测试得到的结果是不准确的。

现在我们再来回顾下如下两个常用命令:

模拟数据库插入操作(少量数据频繁写入测试)
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
大数据连续写入测试
dd if=/dev/zero of=test bs=8k count=256k conv=fdatasync
先介绍下 conv 参数 CONVS 的含义:
‘fdatasync’
  Synchronize output data just before finishing.  This forces a
  physical write of output data.

‘fsync’
  Synchronize output data and metadata just before finishing.
  This forces a physical write of output data and metadata.

这两个参数的区别就在于是否写入元数据。

再介绍下 oflag 参数 FLAGS 的含义:
‘dsync’
  Use synchronized I/O for data.  For the output file, this
  forces a physical write of output data on each write.  For the
  input file, this flag can matter when reading from a remote
  file that has been written to synchronously by some other
  process.  Metadata (e.g., last-access and last-modified time)
  is not necessarily synchronized.

‘sync’
  Use synchronized I/O for both data and metadata.

这两个参数的区别也在于是否写入元数据。

看完了参数说明,我们再来说说上面的两行命令,这两行命令,都是测试磁盘写入性能的,只不过执行第一个命令时,需要很长的时间(以下测试数据来源于我在 AWS 上的免费 EC2 服务器。OS: RHEL7.3 64位):
$ dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
记录了4096+0 的读入
记录了4096+0 的写出
268435456字节(268 MB)已复制,48.6814 秒,5.5 MB/秒
$ dd if=/dev/zero of=test bs=8k count=256k conv=fdatasync
记录了262144+0 的读入
记录了262144+0 的写出
2147483648字节(2.1 GB)已复制,41.277 秒,52.0 MB/秒
我们会发现第一行命令执行完,仅生成了 268 MB 的数据,用时却长达 48+ 秒。
而第二行命令执行完,虽然生成了 2.1GB 的数据,比第一行命令生成的数据大的多,但是用时却只有 41+ 秒,反而用时少。
为什么呢?

请注意下 oflag=dsync 参数,这个参数表明每当需要写数据时都会真正到写到磁盘上,等写到磁盘上之后,才会继续开始下一次数据写入。第一行命令要求反复写 4k 次数据,也就是说,会真正写磁盘 4k 次,用时长是理所当然的。

而第二行命令,虽然总共要写 2.1 GB 的数据,但是由于使用的是 conv=fdatasync 参数,也就是说,当 dd 命令结束前,一次性把所有的数据写到磁盘上,因此写入速度非常快。

我们再做一个测试,还是使用上面两个命令,参数相同,不同的仅是 count 参数设置为 1,bs 设置为 256 MB。那么根据之前的说明,我们可以推测,两次测试的结果应该是相近的。
$ dd if=/dev/zero of=test bs=256MB count=1 oflag=dsync
记录了1+0 的读入
记录了1+0 的写出
256000000字节(256 MB)已复制,3.85186 秒,66.5 MB/秒
$ dd if=/dev/zero of=test bs=256MB count=1 conv=fdatasync
记录了1+0 的读入
记录了1+0 的写出
256000000字节(256 MB)已复制,4.23802 秒,60.4 MB/秒

引用地址:
http://www.hostloc.com/thread-256990-1-1.html
http://blog.csdn.net/menogen/article/details/38059671
0
0
分享到:
评论

相关推荐

    linux的dd命令克隆磁盘方法.docx

    在Linux环境中,dd命令是一种非常强大的工具,常用于复制文件或者进行低级别的磁盘操作。本文将详细介绍如何使用dd命令来克隆磁盘,包括操作前的准备工作、注意事项以及具体的步骤。 #### 基本概念 - **源盘**:指...

    linux dd命令 源代码

    Linux中的`dd`命令是一个非常强大的工具,用于数据复制、转换和备份。它的工作原理是读取输入(源)文件或设备,然后按照指定的块大小写入到输出(目标)位置。这个命令在系统维护、磁盘克隆、创建映像文件等方面...

    dd命令详解和使用方法

    -dd 命令是 Linux 系统中的一种数据复制命令,可以将数据从一个文件或设备复制到另一个文件或设备,同时可以进行数据转换和处理。dd 命令的格式为:`dd [参数]` -dd 命令的参数可以分为以下几类: 1. 输入和输出...

    windows下的dd和grep命令工具

    `dd`(Data Description)是一个用于数据转换和复制的命令,它在Linux中非常常见,常用于磁盘克隆、备份、格式转换等任务。在Windows中,`dd.exe`提供了相同的功能。以下是一些基本的`dd`命令用法: 1. **磁盘克隆*...

    Linux中DD命令详解

    `dd`(data definition)命令的核心作用是按照指定的方式对数据进行读取、写入以及转换操作。它在Linux系统中的主要用途包括: 1. **磁盘备份与恢复**:通过`dd`命令可以完整地将一个磁盘的内容复制到另一个磁盘...

    dd命令详解

    ### dd命令详解 在Linux系统中,`dd`命令是一个非常...通过上述介绍,我们不仅了解了`dd`的基本用法,还学习了如何利用它进行磁盘备份、恢复及格式化等高级操作。希望本文能帮助读者更好地理解和运用这一强大的工具。

    dd命令烧写linux系统到sd卡

    ### dd命令烧写Linux系统到SD卡的知识点详解 #### 一、理解U-Boot如何到达SD卡的原理概述 1. **S3c2416架构下的启动过程** - **BL0 (Boot Loader Stage 0):** - **定义与功能:** BL0指的是S3c2416处理器内部ROM...

    linux dd命令实用技巧总结

    Linux中的`dd`命令是一个非常强大的工具,常用于数据转换和复制。它的功能包括但不限于创建映像文件、格式化磁盘、数据迁移等。本文将深入探讨`dd`命令的基本用法及其各种实用技巧。 首先,`dd`命令的基本语法是: ...

    unix命令dd说明

    【Unix命令dd说明】 Unix系统中的dd命令是一个强大的工具,用于数据转换和文件复制。它不仅可以复制文件,还可以在复制过程中进行各种转换操作,如格式转换、数据备份和恢复等。下面详细介绍dd命令的主要选项和一些...

    Linux dd命令全面解析.docx

    Linux dd 命令是 Linux 系统中一个非常强大的命令,主要用来复制和转换文件,下面将对其进行详细的解析。 一、dd 命令的基本概念 dd 命令是 Linux 系统中的一条命令,主要用于复制和转换文件。它可以将文件从一个...

    Linux dd命令的简单介绍.docx

    * 在使用 dd 命令拷贝软盘时,需要将软盘插入驱动器中,并且需要将暂时文件删除以免占用磁盘空间。 * 在使用 dd 命令拷贝文件时,需要指定输入文件和输出文件的路径和名称。 * 在使用 dd 命令进行格式转换时,需要...

    linux下测试磁盘io性能工具

    通过特定的参数,如`dd if=/dev/zero of=test bs=1M count=1024 conv=fdatasync`,可以用来测试磁盘的连续读写速度。 4. **fio (Flexible I/O Tester)**:这是一款强大的I/O性能测试工具,支持多种工作负载模型,...

    使用dd命令烧写linux系统到sd卡

    《使用dd命令烧写Linux系统到SD卡》 在嵌入式系统开发中,烧录Linux系统到SD卡是一项常见的任务。本文将详细介绍这一过程,包括理解U-Boot的加载原理,以及如何使用dd命令来烧写Linux系统到SD卡。 一、U-Boot加载...

    专题资料(2021-2022年)Linux中dd命令详解.docx

    Linux中的dd命令是一个非常强大的工具,用于数据复制和转换。它可以从一个文件复制到另一个文件,同时进行各种转换操作。dd命令的灵活性在于其丰富的参数选项,这些选项允许用户精确控制数据的处理方式。 首先,dd...

    linux下的dd和cpio命令.pdf

    Linux操作系统中,`dd`和`cpio`是两个非常重要的命令行工具,它们主要用于文件和数据的复制、备份及恢复。这两个命令虽然用途不同,但都是系统管理员和开发者日常工作中不可或缺的工具。 首先,`dd`命令是Data ...

Global site tag (gtag.js) - Google Analytics