# linux系统读写速度检测

发布时间 2023-10-31 18:02:44作者: 水车

前言

记录一下在 Linux 下测试硬盘读写速度的命令和方法。测试的工具是linux系统自带的 dd 命令工具 + time 命令工具

正文

dd 命令介绍

dd命令是一个功能强大的Linux命令,用于复制文件、转换格式和计算文件和设备的吞吐量。它的基本语法如下:

dd [选线]

以下是dd命令中常用的选项:

  • if=<输入文件>:infile 缩写;指定输入文件的路径。可以是设备文件(如硬盘、光驱)或普通文件。
  • of=<输出文件>:outfile缩写;指定输出文件的路径。可以是设备文件或普通文件。
  • bs=<块大小>:指定每次读取和写入的块大小。默认为512字节。
  • count=<块数>:指定要复制的块数。
  • skip=<块数>:指定从输入文件开始跳过的块数。
  • seek=<块数>:指定在输出文件中开始写入的块数。
  • iflag=<输入标记>:指定输入文件的标记。例如,使用direct可以绕过文件系统缓存。
  • oflag=<输出标记>:指定输出文件的标记。
  • status=<显示选项>:指定要显示的进度信息类型。例如,使用progress可以显示进度条。

time 命令介绍

time命令用于测量执行命令的时间以及资源使用情况。它在Linux系统中非常有用,可以帮助你评估命令的性能和效率。time命令有两种形式:内部time和外部time。

1. 内部time

内部time是bash shell的内建命令,它可以记录命令的执行时间。当你在终端中直接输入命令并在前面加上time关键字时,实际上使用的是内部time。
内部time显示的统计信息包括:

  • 实际时间(real):命令从开始到结束所经过的实际时间。
  • 用户CPU时间(user):命令在用户模式下花费的CPU时间。
  • 系统CPU时间(sys):命令在内核模式下花费的CPU时间。
  • CPU占用比例(%CPU):命令使用的CPU资源百分比。

示例

# 命令将显示ls -l命令的执行时间和CPU使用情况。
time ls -l

2. 外部time

外部time是独立于bash shell的实用程序,可以更详细地报告命令的执行时间和系统资源使用情况。外部time显示的统计信息包括:

  • 实际时间(real):命令从开始到结束所经过的实际时间。
  • 用户CPU时间(user):命令在用户模式下花费的CPU时间。
  • 系统CPU时间(sys):命令在内核模式下花费的CPU时间。
  • 子进程用户CPU时间(user-child):由命令创建的子进程在用户模式下花费的CPU时间。
  • 子进程系统CPU时间(sys-child):由命令创建的子进程在内核模式下花费的CPU时间。

示例

# 命令将显示更详细的命令执行时间和资源使用信息
/usr/bin/time -v ls -l

延伸知识

/dev/null 目录

/dev/null 是一个特殊的设备文件,在 Linux 和类 Unix 系统中起着很重要的作用。它通常被称为“黑洞”,因为它会接收所有写入它的数据,但不会将这些数据存储在任何地方,相当于直接把这些数据扔掉,因此它被用来丢弃不需要的输出。

具体来说,当程序向 /dev/null 写入数据时,数据实际上被丢弃了,而不是写入磁盘或其他地方。这对于一些程序需要输出日志或其他信息,但又不想实际将这些信息存储在磁盘上非常有用。

除了写入数据,/dev/null 还可以读取和重定向。当尝试从 /dev/null 读取数据时,它会返回空数据,即没有数据可读取。同时,可以使用重定向符号“>”将输出重定向到 /dev/null 中,从而完全禁止某些程序的输出,使其运行更加安静。

/dev/zero 目录

/dev/zero 是一个特殊的设备文件,在 Linux 和类 Unix 系统中也发挥着重要的作用。它提供了一种快速生成大量二进制零的方法,因此经常用于测试、调试和初始化操作。与 /dev/null 不同,/dev/zero 会返回连续的零字节数据而不是什么都不返回。

当读取 /dev/zero 时,将返回连续的二进制零字节,直到请求的字节数被满足。这使得 /dev/zero 成为用于填充文件或缓冲区的理想源,或者作为计算机程序中内存初始化的来源。

测试硬盘【写】速度

测试硬盘的写速度,基本原理是使用 dd 命令从 /dev/zero 中读区数据,然后写入到某个文件中。

温馨提示: 控制写入数据大小,别把硬盘写爆了。

# 往当前目录写入一个文件,大小是 2G;(bs是每次写入的大小,count 是写入次数,bs * count = 总大小)
time dd if=/dev/zero of=./test.file bs=1K count=2048k conv=fsync

测试硬盘【读】速度

我们可以创建一个比较大的文件,10G以上,然后读取这个文件,测试读取速度。

# 创建10G文件
dd if=/dev/zero of=./read.file bs=100M count=100 conv=fsync

# 测试读取速度
time dd if=./read.file of=/dev/null bs=8k

后记

记录一下