天天看點

linux dd指令執行個體講解

提到linux 系統中的dd指令,各位技術博友大多都很熟悉,用法也是好多,今天主要跟大家分享一下測試硬碟讀寫速度的幾種方式。

在我們手邊沒有合适的硬碟IO測試利器時,dd是我們的最佳選擇,好,仔細看線面四種方式。思考一個問題,差別在哪兒?

dd

bs=1M count=128 if=/dev/zero of=test

bs=1M count=128 if=/dev/zero of=test_01; sync

bs=1M count=128 if=/dev/zero of=test_02 conv=fdatasync

bs=1M count=128 if=/dev/zero of=test_03 oflag=dsync

想到了嗎?看這裡:差別在于記憶體中寫緩存的處理方式。

#----------------------圖文分析如下----------------------------#

第一種:

bs=4M count=1024 if=/dev/zero of=test 

linux dd指令執行個體講解

沒有加任何參數,dd預設的方式不包括“同步(sync)”指令。也就是說,dd指令完成前并沒有讓系統真正把檔案寫到磁盤上。是以以上指令隻是單純地把這128MB的資料讀到記憶體緩沖當中(寫緩存[write cache])。是以你得到的将是一個超級快的速度。因為其實dd給你的隻是讀取速度,直到dd完成後系統才開始真正往磁盤上寫資料,但這個速度你是看不到了。是以如果這個速度很快,先不要偷着樂。呵呵

第二種:

bs=4M count=1024 if=/dev/zero of=test_01

linux dd指令執行個體講解

和前面1中的完全一樣。分号隔開的隻是先後兩個獨立的指令。當sync指令準備開始往磁盤上真正寫入資料的時候,前面dd指令已經把錯誤的“寫入速度”值顯示在螢幕上了。是以你還是得不到真正的寫入速度。

第三種:

bs=4M count=1024 if=/dev/zero of=test_02 conv=fdatasync

linux dd指令執行個體講解

加入這個參數後,dd指令執行到最後會真正執行一次“同步(sync)”操作,是以這時候你得到的是讀取這128M資料到記憶體并寫入到磁盤上所需的時間,這樣算出來的時間才是比較符合實際的。

第四種:

bs=4M count=1024 if=/dev/zero of=test_03 oflag=dsync

linux dd指令執行個體講解

加入這個參數後,dd在執行時每次都會進行同步寫入操作。也就是說,這條指令每次讀取1M後就要先把這1M寫入磁盤,然後再讀取下面這1M,一共重複128次。這可能是最慢的一種方式了,因為基本上沒有用到寫緩存(write cache)。

至于哪一種最有參考價值,個人覺得是下面這種:

dd bs=4M count=1024 if=/dev/zero of=test_02  conv=fdatasync

因為這種方式最接近計算機實際操作,是以測出來的資料最有參考價值。

繼續閱讀