分類: 虛擬化 2013-03-26 12:45 256人閱讀 收藏 舉報 1、dd命令
dd的作用是用指定大小的塊拷貝一個文件,并在拷貝的同時進行指定的轉(zhuǎn)換。
dd的主要選項:
指定數(shù)字的地方若以下列字符結(jié)尾乘以相應的數(shù)字:
b=512, c=1, k=1024, w=2, xm=number m
if=file
輸入文件名,缺省為標準輸入。
of=file
輸出文件名,缺省為標準輸出。
ibs=bytes
一次讀入 bytes 個字節(jié)(即一個塊大小為 bytes 個字節(jié))。
obs=bytes
一次寫 bytes 個字節(jié)(即一個塊大小為 bytes 個字節(jié))。
bs=bytes
同時設置讀寫塊的大小為 bytes ,可代替 ibs 和 obs 。
cbs=bytes
一次轉(zhuǎn)換 bytes 個字節(jié),即轉(zhuǎn)換緩沖區(qū)大小。
skip=blocks
從輸入文件開頭跳過 blocks 個塊后再開始復制。
seek=blocks
從輸出文件開頭跳過 blocks 個塊后再開始復制。(通常只有當輸出文件是磁盤或磁帶時才有效)
count=blocks
僅拷貝 blocks 個塊,塊大小等于 ibs 指定的字節(jié)數(shù)。
conv=conversion[,conversion...]
用指定的參數(shù)轉(zhuǎn)換文件。
轉(zhuǎn)換參數(shù):
ascii 轉(zhuǎn)換 EBCDIC 為 ASCII。
ebcdic 轉(zhuǎn)換 ASCII 為 EBCDIC。
ibm 轉(zhuǎn)換 ASCII 為 alternate EBCDIC.
block 把每一行轉(zhuǎn)換為長度為 cbs 的記錄,不足部分用空格填充。
unblock 使每一行的長度都為 cbs ,不足部分用空格填充。
lcase 把大寫字符轉(zhuǎn)換為小寫字符。
ucase 把小寫字符轉(zhuǎn)換為大寫字符。
swab 交換輸入的每對字節(jié)。
noerror 出錯時不停止。
notrunc 不截短輸出文件。
sync 把每個輸入塊填充到ibs個字節(jié),不足部分用空(NUL)字符補齊。
由于dd命令允許二進制方式讀寫,所以特別適合在原始物理設備上進行輸入/輸出。例如可以用下面的命令為軟盤建立鏡像文件:
dd if=/dev/fd0 of=disk.img bs=1440k
這個鏡像文件能被 HD-Copy ,Winimage 等工具軟件讀出。再如把第一個硬盤的前 512 個字節(jié)存為一個文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1
幾種使用方式的區(qū)別:
1、dd bs=1M count=128 if=/dev/zero of=test
dd默認的方式不包括“同步(sync)”命令。也就是說,dd命令完成前并沒有讓系統(tǒng)真正把文件寫到磁盤上。所以以上命令只是單純地把這128MB的數(shù)據(jù)讀到內(nèi)存緩沖當中(寫緩存[write cache])。所以你得到的將是一個超級快的速度。
2、dd bs=1M count=128 if=/dev/zero of=test; sync
和前面1中的完全一樣。分號隔開的只是先后兩個獨立的命令。當sync命令準備開始往磁盤上真正寫入數(shù)據(jù)的時候,前面dd命令已經(jīng)把錯誤的“寫入速度”值顯示在屏幕上了。所以你還是得不到真正的寫入速度。
3、dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync
加入這個參數(shù)后,dd命令執(zhí)行到最后會真正執(zhí)行一次“同步(sync)”操作,所以這時候你得到的是讀取這128M數(shù)據(jù)到內(nèi)存并寫入到磁盤上所需的時間,這樣算出來的時間才是比較符合實際的
4、dd bs=1M count=128 if=/dev/zero of=test oflag=dsync
加入這個參數(shù)后,dd在執(zhí)行時每次都會進行同步寫入操作。也就是說,這條命令每次讀取1M后就要先把這1M寫入磁盤,然后再讀取下面這1M,一共重復128次。這可能是最慢的一種方式了,因為基本上沒有用到寫緩存(write cache)。
2、虛擬化鏡像格式
raw
the raw format is a plain binary image of the disc image, and is very portable. On filesystems that support sparse files, images in this format only use the space actually used by the data recorded in them. 裸設備,
1. 可以直接掛載到物理機
2. 轉(zhuǎn)換成其它格式的虛擬機鏡像(如果其它格式需要轉(zhuǎn)換,有時候還是需要它做為中間格式)
3. 對于空間,使用多少就是多少??梢栽谠P追加空間。命令:
dd if=/dev/zero of=zeros.raw bs=1024k count=4096(先創(chuàng)建4G的空間)
cat foresight.img zeros.raw > new-foresight.img(追加到原有的鏡像之后)
4. 不支持snapshot(可以使用版本管理軟件對raw格式的文件做版本管理從而達到snapshot的能力)
cow
曾經(jīng)qemu的寫時拷貝的鏡像格式,目前由于歷史遺留原因不支持窗口模式。后來被qcow格式所取代。
qcow
一代的qemu的cow格式,剛剛出現(xiàn)的時候有比較好的特性,但其性能和raw格式對比還是有很大的差距,目前已經(jīng)被新版本的qcow2取代
qcow2
QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller images on filesystems that don’t support sparse files, optional AES encryption, and optional zlib compression. 現(xiàn)在比較主流的一種虛擬化鏡像格式,經(jīng)過一代的優(yōu)化,目前qcow2的性能上接近raw裸格式的性能
1. 更小的存儲空間,即使是不支持holes的文件系統(tǒng)也可以
2. Copy-on-write support, where the image only represents changes made to an underlying disk image
3. 支持多個snapshot,對歷史snapshot進行管理
4. 支持zlib的磁盤壓縮和AES加密
qcow2-->raw轉(zhuǎn)換:qemu-img convert -O qcow2 image-raw.raw image-raw-converted.qcow
vmdk
VMware的格式,從性能和功能上來說,vmdk應該算最出色的,由于vmdk結(jié)合了VMware的很多能力,目前來看,KVM和XEN使用這種格式的情況不是太多
vdi
VirtualBox上的虛擬機磁盤格式
3、qemu-img
qemu-img
命?令?行?工?具?是? Xen 和? KVM 用?來?格?式?化?各?種?文?件?系?統(tǒng)?的?。?可?使?用? qemu-img
格?式?化?虛?擬?客?戶?端?映?像?、?附?加?存?儲?設?備?以?及?網(wǎng)?絡?存?儲?。?qemu-img
選?項?及?用?法?如?下?。
# qemu-img create [-6] [-e] [-b base_image] [-f format] filename [size]
If base_image is specified, then the image will record only the differences from base_image. No size needs to be specified in this case. base_image will never be modified unless you use the "commit" monitor command.使用-o ? 來查詢某種格式文件支持那些選項 。一些例子:
- [root@jay-linux kvm_demo]# qemu-img create -f qcow2 -o ? temp.qcow
- Supported options:
- size Virtual disk size
- compat Compatibility level (0.10 or 1.1)
- backing_file File name of a base image
- backing_fmt Image format of the base image
- encryption Encrypt the image
- cluster_size qcow2 cluster size
- preallocation Preallocation mode (allowed values: off, metadata)
- [root@jay-linux kvm_demo]# qemu-img create -f qcow2 -b rhel6u3.img rhel6u3.qcow2
- Formatting ‘rhel6u3.qcow2′, fmt=qcow2 size=8589934592 backing_file=’rhel6u3.img’ encryption=off cluster_size=65536
- [root@jay-linux kvm_demo]# qemu-img create -f qcow2 -o backing_file=rhel6u3.img rhel6u3-1.qcow2
- Formatting ‘rhel6u3-1.qcow2′, fmt=qcow2 size=8589934592 backing_file=’rhel6u3.img’ encryption=off cluster_size=65536
- [root@jay-linux kvm_demo]# qemu-img create -f qcow2 -o backing_file=rhel6u3.img,size=20G rhel6u3-2.qcow2
- Formatting ‘rhel6u3-2.qcow2′, fmt=qcow2 size=21474836480 backing_file=’rhel6u3.img’ encryption=off cluster_size=65536
- [root@jay-linux kvm_demo]# qemu-img create -f qcow2 ubuntu.qcow2 10G
- Formatting ‘ubuntu.qcow2′, fmt=qcow2 size=10737418240 encryption=off cluster_size=65536
commit [-f fmt] filename
提交filename文件中的更改到后端支持鏡像文件(創(chuàng)建時通過backing_file指定的)中去。
命?令?格?式?:
# qemu-img convert [-c] [-e] [-f format] filename [-O output_format] output_filename
convert the disk image filename to disk image output_filename using format output_format. it can be optionally encrypted ("-e" option) or compressed ("-c" option).默認會被轉(zhuǎn)換為與raw文件格式
only the format "qcow" supports encryption or compression. the compression is read-only. it means that if a compressed sector is rewritten, then it is rewritten as uncompressed data.
加?密?法?是?使?用?非?常?安?全?的? 128 位?密?鑰?的? AES 格?式?。?使?用?長?密?碼?(16 個?字?符?以?上?)獲?得?最?大?程?度?的?保?護?。?
當?使?用?可?增?大?的?映?像?格?式?,比?如? qcow
或? cow
時?,映?像?轉(zhuǎn)?換?可?幫?助?您?獲?得?較?小?的?映?像?。?在?目?的?映?像?中?可?檢?測?并?壓?縮?空?白?字?段?。?
使用“-o options”來指定各種選項,如:后端鏡像、文件大小、是否加密等等。使用backing_file選項來指定后端鏡像,讓生成的文件是copy-on-write的增量文件,這時必須讓轉(zhuǎn)換命令中指定的后端鏡像與輸入文件的后端鏡像的內(nèi)容是相同的,盡管它們各自后端鏡像的目錄、格式可能不同。
qemu-img convert -f qcow2 -O raw -s snap1 fed18.qcow2 snap1-fed18.img
提取鏡像fed18.qcow2的一個快照,將其格式轉(zhuǎn)換為raw
# qemu-img info [-f format] filename
給?出?磁?盤?映?像?文?件?名?信?息?。?使?用?它?可?獲?得?在?磁?盤?中?保?留?空?間?大?小?,它?可?能?與?顯?示?的?大?小?有?所?不?同?。?如?果?在?磁?盤?映?像?中?保?存?有? vm 快?照?,則?此?時?也?會?顯?示?。
- [root@jay-linux kvm_demo]# qemu-img info rhel6u3.img
- image: rhel6u3.img
- file format: raw
- virtual size: 8.0G (8589934592 bytes)
- disk size: 8.0G
- [root@jay-linux kvm_demo]# qemu-img info rhel6u3-a.img
- image: rhel6u3-a.img
- file format: qcow2
- virtual size: 8.0G (8589934592 bytes)
- disk size: 6.8G
- cluster_size: 65536
快照
snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename“-l” 選項是查詢并列出鏡像文件中的所有快照,“-a snapshot”是讓鏡像文件使用某個快照,“-c snapshot”是創(chuàng)建一個快照,“-d”是刪除一個快照。
改變后端鏡像
rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename改變鏡像文件的后端鏡像文件,只有qcow2和qed格式支持rebase命令。使用“-b backing_file”中指定的文件作為后端鏡像,后端鏡像也被轉(zhuǎn)化為“-F backing_fmt”中指定的后端鏡像格式。
它可以工作于兩種模式之下,一種是安全模式(Safe Mode)也是默認的模式,qemu-img會去比較原來的后端鏡像與現(xiàn)在的后端鏡像的不同進行合理的處理;另一種是非安全模式(Unsafe Mode),是通過“-u”參數(shù)來指定的,這種模式主要用于將后端鏡像進行了重命名或者移動了位置之后對前端鏡像文件的修復處理,由用戶去保證后端鏡像的一致性。 調(diào)整大小
resize filename [+ | -]size改變鏡像文件的大小,使其不同于創(chuàng)建之時的大小。“+”和“-”分別表示增加和減少鏡像文件的大小,而size也是支持K、M、G、T等單位的使用??s小鏡像的大小之前,需要在客戶機中保證里面的文件系統(tǒng)有空余空間,否則會數(shù)據(jù)丟失,另外,qcow2格式文件不支持縮小鏡像的操作。在增加了鏡像文件大小后,也需啟動客戶機到里面去應用“fdisk”、“parted”等分區(qū)工具進行相應的操作才能真正讓客戶機使用到增加后的鏡像空間。不過使用resize命令時需要小心(最好做好備份),如果失敗的話,可能會導致鏡像文件無法正常使用而造成數(shù)據(jù)丟失。
如下命令行演示了兩個鏡像的大小改變:將一個8GB的qcow2鏡像增加2GB的空間,也將一個8GB大小的raw鏡像減少1GB空間。
- [root@jay-linux kvm_demo]# qemu-img resize rhel6u3-a.img +2G
- Image resized.
- [root@jay-linux kvm_demo]# qemu-img info rhel6u3-a.img
- image: rhel6u3-a.img
- file format: qcow2
- virtual size: 10G (10737418240 bytes)
- disk size: 6.8G
- cluster_size: 65536
-
- [root@jay-linux kvm_demo]# qemu-img resize rhel6u3-b.img -1G
- Image resized.
- [root@jay-linux kvm_demo]# qemu-img info rhel6u3-b.img
- image: rhel6u3-b.img
- file format: raw
- virtual size: 7.0G (7516192768 bytes)
- disk size: 6.5G