前言
記錄一下在 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
後記
記錄一下