# linux系统读写速度检测
前言
记录一下在 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
后记
记录一下