dd 工具使用: dd 也是我們經常使用到的磁碟測試工具,Linux伺服器裝好系統之後,想要知道硬碟的讀寫是否能滿足服務的需要,如果不滿足硬碟的IO就是服務的一個瓶頸。我們可以使用dd命令簡單進行測試,更為專業的測試可以使用上面描述的fio 工具: time有計時作用,dd用於複製,從if讀出,寫到 ...
dd 工具使用:
dd 也是我們經常使用到的磁碟測試工具,Linux伺服器裝好系統之後,想要知道硬碟的讀寫是否能滿足服務的需要,如果不滿足硬碟的IO就是服務的一個瓶頸。我們可以使用dd命令簡單進行測試,更為專業的測試可以使用上面描述的fio 工具:
time有計時作用,dd用於複製,從if讀出,寫到of。if=/dev/zero不產生IO,因此可以用來測試純寫速度。同理of=/dev/null不產生IO,可以用來測試純讀速度。bs是每次讀或寫的大小,即一個塊的大小,count是讀寫塊的數量。
dd測試純寫速度:
[root@docker sda]# time dd if=/dev/zero of=/mnt/sda/ddout bs=8k count=1000000
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB, 7.6 GiB) copied, 43.1081 s, 190 MB/s
real 0m43.110s
user 0m0.207s
sys 0m3.914s
dd測試純讀速度:
[root@docker sda]# time dd if=/mnt/sda/ddout of=/dev/null bs=8k count=1000000
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB, 7.6 GiB) copied, 1.30322 s, 6.3 GB/s
real 0m1.306s
user 0m0.199s
sys 0m1.102s
dd 測試讀寫速度,就是讀當前磁碟文件,再寫入當前磁碟之中。一定程度上,複製量越大,讀寫的時間越長,統計的結果越準。但是測試結果信息量較少,只能作為參考量,更多讀寫模式和測試信息:可以使用dd 命令參數來配置:
使用conv, iflag, oflag 三個變數可以配置dd 命令的複製模塊式,讀取模式和寫入模式;
conv 關鍵symbol:
fdatasync
physically write output file data before finishing
fsync likewise, but also write metadata
iflag, oflag 關鍵symbol:
dsync use synchronized I/O for data
sync likewise, but also for metadata
direct use direct I/O for data
dd 命令繞過系統cache:
如果要規避掉文件系統cache,直接讀寫,不使用buffer cache,需做這樣的設置
iflag=direct,nonblock
oflag=direct,nonblock
dd 命令三種經典使用方法:
dd if=/dev/zero of=test bs=64k count=16k 是不准確的,可能有數據存在內核緩存中,沒有同步到磁碟上。對於關鍵數據應該加上fsync標識,防止關鍵數據丟失;
dd if=/dev/zero of=test bs=64k count=16k conv=fsync 較為穩妥,但是時間用時較長,他在dd結束前會寫數據和文件元數據到磁碟;
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync or sync 每寫一次就寫一次磁碟,在實際操作中,可以聽到磁碟響聲,用時較長;
更多dd 命令詳細使用方法,可以參考man pages. dd 命令可以用來製作啟動盤,請參見博文 linux (fedora 28) 製作啟動U盤,啟動盤