Linux下dd命令生成一個指定大小的虛擬塊設備文件

原文地址:http://blog.licess.org/linux-dd/

   虛擬塊設備文件更通用的名稱是硬盤鏡像文件(Hard Disk Image),但不是所有的硬盤鏡像文件都是虛擬塊設備文件,例如,目前Ghost的GHO格式的鏡像文件就不能成爲虛擬機中的硬盤。

Linux的dd命令,可以用於生成虛擬塊設備文件。既可以用於創建空鏡像文件,也可以用於創建物理硬盤的鏡像。

# dd if=/dev/hda of=/mnt/nebula/hda_dd.image4757130+0 records in4757130+0 records out
上面這個命令將IDE設備/dev/hda的內容複製到/mnt/nebula/hda_dd.image文件。參數if告訴dd從哪個文件讀取數據,參數 of告訴dd讀出的數據寫入哪個文件中。注意,對於dd來說,輸入和輸出都是文件,dd做的只是文件拷貝工作,這得益於Unix/Linux下面將設備也抽象爲特殊的文件。

一般來說設備文件有兩種,一種是塊設備,一種是字符設備。塊設備的特點是可以隨機讀寫(Random Access),比如內存、硬盤等。字符設備的特點是順序讀寫(Sequential Access),比如鼠標,鍵盤,麥克風等。

前面說了如何生成物理硬盤的鏡像,如果想生成空鏡像文件(本文的主要目的),還需要一個特殊的設備。/dev/zero是Linux提供的一個特殊的字符設備,它的特點是可以永遠讀該文件,每次讀取的結果都是二進制0。下面的命令可以生成一個100M的空鏡像文件:

dd if=/dev/zero of=100M.img bs=1M count=100

除了前面已經解釋的of和if參數,這次又出現了bs和count參數。bs=1M表示每一次讀寫1M數據,count=100表示讀寫 100次,這樣就指定了生成文件的大小爲100M。bs參數還可以進一步細分爲ibs和obs兩種,爲讀操作與寫操作分別指定不同的Buffer大小。

這樣就生成100M的空鏡像文件,問題是,如果要生成1G的虛擬塊設備文件,就得佔用1G的硬盤空間,而這個鏡像文件完全是空的,是不是有一點浪費?好在Linux支持Sparse(稀疏)文件。請看下面的例子

# dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0

# ls -l 1G.img
-rw-r-r- 1 root  root  1048576000 Mar 25 15:32 1G.img
# du -m 1G.img

這裏用了一個新的命令seek,表示略過1000個Block不寫(這裏Block按照bs的定義是1M),count=0表示寫入0個Block。用ls命令看新生成的文件,大小可以看出是1000M。但是再用du一看,實際佔用硬盤大小隻有1M。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章