1. 程式人生 > >Linux下常用的dd命令

Linux下常用的dd命令

今天在微博看到了關於伺服器硬碟負載的測試(原文見:使用 dd 命令進行硬碟 I/O 效能檢測),前一段時間在搭建Minecraft伺服器,我就經常懷疑IO爆表,但是記憶體可以用free,CPU和記憶體可以用top,可IO怎麼查,我怎麼知道這臺伺服器到底是哪裡爆表了。 文章裡提出用dd進行硬碟寫入操作,通過寫入情況分析現在負載到了一個什麼程度。

但是,我並不太敢認可這種做法,這種做法就像判斷瓶子滿沒滿,再向裡面注入寫就知道了。但我目前並沒有其他能看出磁碟當前效能的辦法,暫且認可。因為如果瓶子已經滿了,這些注入豈不是又增加負擔。 也許我的擔憂是在我無法負擔更好的VPS的基礎上的吧,就像好多朋友已經現在遊戲伺服器上玩的happy,我想看下伺服器IO當前效能,結果一個dd就把伺服器搞崩了,全線玩家集體掉線,也是挺無語。

繼續說dd命令,之前看過一篇關於介紹新手級命令的文章(原文見:對 Linux 新手有用的 20 個命令),因為已經接觸linux有一段時間了,幾乎對這些命令用了不知多少遍了,唯獨dd,之前就用過一次,就是幫同學寫映象,好像還寫砸了。 dd的作用事把指定的輸入檔案拷貝到指定的輸出檔案中,並且在拷貝的過程中可以進行格式轉換。現在就說下dd的常用用法。 先說下dd的語法和引數:

  • if =輸入檔案(或裝置名稱)。
  • of =輸出檔案(或裝置名稱)。
  • ibs = bytes 一次讀取bytes位元組,即讀入緩衝區的位元組數。
  • skip = blocks 跳過讀入緩衝區開頭的ibs*blocks塊。
  • obs = bytes 一次寫入bytes位元組,即寫 入緩衝區的位元組數。
  • bs = bytes 同時設定讀/寫緩衝區的位元組數(等於設定obs和obs)。
  • cbs = bytes 一次轉換bytes位元組。
  • count = blocks 只拷貝輸入的blocks塊。
  • conv = ASCII 把EBCDIC碼轉換為ASCII碼。
  • conv = ebcdic 把ASCII碼轉換為EBCDIC碼。
  • conv = ibm 把ASCII碼轉換為alternate EBCDIC碼。
  • conv = blick 把變動位轉換成固定字元。
  • conv = ublock 把固定們轉換成變動位
  • conv = ucase 把字母由小寫變為大寫。
  • conv = lcase 把字母由大寫變為小寫。
  • conv = notrunc 不截短輸出檔案。
  • conv = swab 交換每一對輸入位元組。
  • conv = noerror 出錯時不停止處理。
  • conv = sync 把每個輸入記錄的大小都調到ibs的大小(用ibs填充)。

1.對硬碟(西數黑盤)進行測試:

[email protected]:~$ dd if=/dev/zero of=test.img bs=512M count=4 oflag=dsync
記錄了4+0 的讀入
記錄了4+0 的寫出
2147483648位元組(2.1 GB)已複製,19.7395 秒,109 MB/秒
[email protected]:~$ dd if=/dev/zero of=test.img bs=1G count=1 oflag=dsync
記錄了1+0 的讀入
記錄了1+0 的寫出
1073741824位元組(1.1 GB)已複製,9.12763 秒,118 MB/秒

可以看到寫入延時和寫入速度。 其中/dev/zero事unix和linux下設計的白洞,可以源源不斷的提供null位元組,而也有一個unix和Linux的黑洞,那就是/dev/null。 2.寫iso映象:

sudo dd if=archlinux-2015.03.01-dual.iso of=/dev/sdd && sync
記錄了1218560+0 的讀入
記錄了1218560+0 的寫出
623902720位元組(624 MB)已複製,0.910181 秒,685 MB/秒

3.備份整個磁碟,比如:

dd if=/home of=home.img bs=4M

4.備份MBR 備份: 備份磁碟開始的512Byte大小的MBR資訊到指定檔案:

dd if=/dev/hdx of=/path/to/image count=1 bs=512

恢復: 將備份的MBR資訊寫到磁碟開始部分:

dd if=/path/to/image of=/dev/hdx

5.修復硬碟 當硬碟較長時間(比如一兩年年)放置不使用後,磁碟上會產生magnetic flux point。當磁頭讀到 這些區域時會遇到困難,並可能導致I/O錯誤。當這種情況影響到硬碟的第一個扇區時,可能導致 硬碟報廢。下面的命令有可能使這些資料起死回生。且這個過程是安全,高效的。

dd if=/dev/sda of=/dev/sda

6.銷燬磁碟資料 利用隨機的資料填充硬碟:

dd if=/dev/urandom of=/dev/hda1

在某些必要的場合可以用來銷燬資料。執行此操作以後,/dev/hda1將無法掛載,建立和拷貝操作無法執行。


歡迎到微信裡去當吃瓜群眾