虚拟化存储的学习笔记

1、dd命令

dd的作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd的主要选项:

指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m
if=file
输入文件名,缺省为标准输入。
of=file
输出文件名,缺省为标准输出。
ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes
一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks
从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks
从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)
count=blocks
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
conv=conversion[,conversion...]
用指定的参数转换文件。
转换参数:
ascii 转换 EBCDIC 为 ASCII。
ebcdic 转换 ASCII 为 EBCDIC。
ibm 转换 ASCII 为 alternate EBCDIC.
block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。
unblock 使每一行的长度都为 cbs ,不足部分用空格填充。
lcase 把大写字符转换为小写字符。
ucase 把小写字符转换为大写字符。
swab 交换输入的每对字节。 
noerror 出错时不停止。
notrunc 不截短输出文件。
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

由于dd命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:
dd if=/dev/fd0 of=disk.img bs=1440k
这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:

dd if=/dev/hda of=disk.mbr bs=512 count=1


几种使用方式的区别:

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

dd默认的方式不包括“同步(sync)”命令。也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。所以以上命令只是单纯地把这128MB的数据读到内存缓冲当中(写缓存[write cache])。所以你得到的将是一个超级快的速度。

2、dd bs=1M count=128 if=/dev/zero of=test; sync

和前面1中的完全一样。分号隔开的只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。

3、dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync

加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,所以这时候你得到的是读取这128M数据到内存并写入到磁盘上所需的时间,这样算出来的时间才是比较符合实际的

4、dd bs=1M count=128 if=/dev/zero of=test oflag=dsync

加入这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取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. 转换成其它格式的虚拟机镜像(如果其它格式需要转换,有时候还是需要它做为中间格式
3. 对于空间,使用多少就是多少。可以在原盘追加空间。命令:
    
dd if=/dev/zero of=zeros.raw bs=1024k count=4096(先创建4G的空间)
    cat foresight.img zeros.raw > new-foresight.img(追加到原有的镜像之后)
4.  不支持snapshot(可以使用
版本管理软件对raw格式的文件做版本管理从而达到snapshot的能力

cow

曾经qemu的写时拷贝的镜像格式,目前由于历史遗留原因不支持窗口模式。后来被qcow格式所取代。

qcow

一代的qemu的cow格式,刚刚出现的时候有比较好的特性,但其性能和raw格式对比还是有很大的差距,目前已经被新版本的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. 现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能

1. 更小的存储空间,即使是不支持holes的文件系统也可以
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转换:
qemu-img convert -O qcow2 image-raw.raw image-raw-converted.qcow 

vmdk

VMware的格式,从性能和功能上来说,vmdk应该算最出色的,由于vmdk结合了VMware的很多能力,目前来看,KVM和XEN使用这种格式的情况不是太多

vdi

VirtualBox上的虚拟机磁盘格式

3、qemu-img

qemu-img 命​令​行​工​具​是​ Xen 和​ KVM 用​来​格​式​化​各​种​文​件​系​统​的​。​可​使​用​ qemu-img 格​式​化​虚​拟​客​户​端​映​像​、​附​加​存​储​设​备​以​及​网​络​存​储​。​qemu-img 选​项​及​用​法​如​下​。

创建​

创​建​新​磁​盘​映​像​文​件​名​为​ size,格​式​为​ format。​
# 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文件中的更改到后端支持镜像文件(创建时通过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).默认会被转换为与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 时​,映​像​转​换​可​帮​助​您​获​得​较​小​的​映​像​。​在​目​的​映​像​中​可​检​测​并​压​缩​空​白​字​段​。​

使用“-o options”来指定各种选项,如:后端镜像、文件大小、是否加密等等。使用backing_file选项来指定后端镜像,让生成的文件是copy-on-write的增量文件,这时必须让转换命令中指定的后端镜像与输入文件的后端镜像的内容是相同的,尽管它们各自后端镜像的目录、格式可能不同。

qemu-img convert -f qcow2 -O raw -s snap1 fed18.qcow2 snap1-fed18.img
提取镜像
fed18.qcow2的一个快照,将其格式转换为raw

映​像​信​息​

info 参​数​显​示​磁​盘​映​像​信​息​。​info 选​项​的​格​式​如​下​:
# 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 snapshotfilename

“-l” 选项是查询并列出镜像文件中的所有快照,“-a snapshot”是让镜像文件使用某个快照,“-c snapshot”是创建一个快照,“-d”是删除一个快照。

改变后端镜像

rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmtfilename

改变镜像文件的后端镜像文件,只有qcow2和qed格式支持rebase命令。使用“-b backing_file”中指定的文件作为后端镜像,后端镜像也被转化为“-F backing_fmt”中指定的后端镜像格式。

它可以工作于两种模式之下,一种是安全模式(Safe Mode)也是默认的模式,qemu-img会去比较原来的后端镜像与现在的后端镜像的不同进行合理的处理;另一种是非安全模式(Unsafe Mode),是通过“-u”参数来指定的,这种模式主要用于将后端镜像进行了重命名或者移动了位置之后对前端镜像文件的修复处理,由用户去保证后端镜像的一致性。  

调整大小

resize filename [+ | -]size

改变镜像文件的大小,使其不同于创建之时的大小。“+”和“-”分别表示增加和减少镜像文件的大小,而size也是支持K、M、G、T等单位的使用。缩小镜像的大小之前,需要在客户机中保证里面的文件系统有空余空间,否则会数据丢失,另外,qcow2格式文件不支持缩小镜像的操作。在增加了镜像文件大小后,也需启动客户机到里面去应用“fdisk”、“parted”等分区工具进行相应的操作才能真正让客户机使用到增加后的镜像空间。不过使用resize命令时需要小心(最好做好备份),如果失败的话,可能会导致镜像文件无法正常使用而造成数据丢失。

如下命令行演示了两个镜像的大小改变:将一个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 

你可能感兴趣的:(虚拟化存储的学习笔记)