本文共 11312 字,大约阅读时间需要 37 分钟。
HOST作为KVM的宿主计算机,管理所有GUEST虚拟机。我们通过给HOST增加物理硬盘,然后分给GUEST,从而实现给虚拟机硬盘扩容的效果。
如何给计算机增加物理硬盘并分区,请参考: 文章
查看HOST机的硬盘
~ sudo fdisk -lDisk /dev/sda: 299.4 GB, 299439751168 bytes255 heads, 63 sectors/track, 36404 cylinders, total 584843264 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000efd7c Device Boot Start End Blocks Id System/dev/sda1 2048 97656831 48827392 82 Linux swap / Solaris/dev/sda2 97656832 136718335 19530752 83 Linux/dev/sda3 136718336 214843335 39062500 83 Linux/dev/sda4 * 214843392 215037951 97280 83 LinuxDisk /dev/sdb: 1999.3 GB, 1999307276288 bytes255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xf919a976 Device Boot Start End Blocks Id System/dev/sdb1 2048 1952448511 976223232 7 HPFS/NTFS/exFAT/dev/sdb2 1952448512 3904897023 976224256 5 Extended/dev/sdb5 1952450560 2267023360 157286400+ 83 Linux/dev/sdb6 2267025409 2581596160 157285376 83 Linux/dev/sdb7 2581598209 2896168960 157285376 83 Linux/dev/sdb8 2896171009 3210741760 157285376 83 Linux/dev/sdb9 3210743809 3525314560 157285376 83 Linux/dev/sdb10 3525316609 3904897023 189790207+ 83 Linux~ df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 37G 3.4G 32G 10% /udev 24G 4.0K 24G 1% /devtmpfs 9.5G 1.1M 9.5G 1% /runnone 5.0M 8.0K 5.0M 1% /run/locknone 24G 152K 24G 1% /run/shmnone 100M 28K 100M 1% /run/usercgroup 24G 0 24G 0% /sys/fs/cgroup/dev/sda2 19G 3.6G 14G 21% /home/dev/sda4 92M 34M 54M 39% /boot/dev/sdb1 931G 100G 832G 11% /disk/sdb1/dev/sdb6 148G 188M 140G 1% /disk/sdb6
下面将进行两个测试:
通过virsh给guest增加文件硬盘:通过文件硬盘的镜像/disk/sdb6/c1d6.img
通过virsh给guest增加分区硬盘:直接使用分区硬盘/dev/sdb5
创建文件硬盘的镜像
~ cd /disk/sdb6/~ sudo qemu-img create -f raw /disk/sdb6/c1d6.img 10GFormatting '/disk/sdb6/c1d6.img', fmt=raw size=10737418240~ ls -l-rw-r--r-- 1 root root 10737418240 Jul 8 16:37 c1d6.imgdrwx------ 2 root root 16384 Jul 8 09:03 lost+found/
通过virsh管理工具加载硬盘
~ sudo virshWelcome to virsh, the virtualization interactive terminal.Type: 'help' for help with commands 'quit' to quit#查看系统内的虚拟机virsh # listId Name State----------------------------------------------------5 server3 running6 server4 running7 d2 running8 r1 running9 server2 running12 c1 running#在这里我们要对c1进行硬盘扩容virsh # edit c1#找到硬盘配置(原来的系统硬盘)#增加文件硬盘,vdb #保存退出
重启c1虚拟机
#请使用destroy命令,reboot和shutdown不管用。~ virsh # destroy c1Domain c1 destroyed#list找不到c1 ~ virsh # list Id Name State---------------------------------------------------- 5 server3 running 6 server4 running 7 d2 running 8 r1 running 9 server2 running#启动虚拟机c1~ virsh # start c1Domain c1 started#进入虚拟机c1~ console c1
在c1中,进行硬盘查检并分区
~ sudo fdisk -lDisk /dev/vda: 42.9 GB, 42949672960 bytes16 heads, 63 sectors/track, 83220 cylinders, total 83886080 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000516aa Device Boot Start End Blocks Id System/dev/vda1 * 2048 499711 248832 83 Linux/dev/vda2 501758 83884031 41691137 5 Extended/dev/vda5 501760 83884031 41691136 8e Linux LVMDisk /dev/vdb: 10.7 GB, 10737418240 bytes16 heads, 63 sectors/track, 20805 cylinders, total 20971520 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/vdb doesn't contain a valid partition tableDisk /dev/mapper/u1210-root: 38.4 GB, 38394658816 bytes255 heads, 63 sectors/track, 4667 cylinders, total 74989568 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/mapper/u1210-root doesn't contain a valid partition tableDisk /dev/mapper/u1210-swap_1: 4294 MB, 4294967296 bytes255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/mapper/u1210-swap_1 doesn't contain a valid partition table
/dev/vdb已经被识别,接下来 分区,格式化,挂载,使用
硬盘分区
~ sudo fdisk /dev/vdbCommand (m for help): pDisk /dev/vdb: 161.1 GB, 161061274112 bytes16 heads, 63 sectors/track, 312076 cylinders, total 314572801 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x3b49c6a0 Device Boot Start End Blocks Id SystemCommand (m for help): nPartition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): pPartition number (1-4, default 1):Using default value 1First sector (2048-314572800, default 2048):Using default value 2048Last sector, +sectors or +size{K,M,G} (2048-314572800, default 314572800):Using default value 314572800Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.#分区生效~ sudo partprobe~ sudo fdisk -lDisk /dev/vdb: 10.7 GB, 10737418240 bytes2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xf0432cd6 Device Boot Start End Blocks Id System/dev/vdb1 2048 20971519 10484736 83 Linux
格式化
~ sudo mkfs -t ext4 /dev/vdb1mke2fs 1.42.5 (29-Jul-2012)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks9830400 inodes, 39321344 blocks1966067 blocks (5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=42949672961200 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872Allocating group tables: doneWriting inode tables: doneCreating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done
挂载
~ sudo mount /dev/vdb1 /home/cos/hadoopb~ df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/u1210-root 36G 1.1G 33G 4% /udev 2.0G 4.0K 2.0G 1% /devtmpfs 791M 232K 791M 1% /runnone 5.0M 0 5.0M 0% /run/locknone 2.0G 0 2.0G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/vda1 228M 29M 188M 14% /boot/dev/vdb1 9.9G 151M 9.2G 2% /home/cos/hadoopb
使用
/home/cos/hadoopb的目录,已经挂载到了/dev/vdb1上面,我可以在hadoopb下载做任何的操作。
直接使用HOST的分区硬盘/dev/sdb5,做个虚拟机c1的分区
virsh # edit c1#新增新硬盘vbcvirsh # destroy c1Domain c1 destroyedvirsh # start c1Domain c1 startedvirsh # console c1
登陆虚拟c1,查看硬盘信息
sudo fdisk -l[sudo] password for cos:Disk /dev/vda: 42.9 GB, 42949672960 bytes16 heads, 63 sectors/track, 83220 cylinders, total 83886080 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000516aa Device Boot Start End Blocks Id System/dev/vda1 * 2048 499711 248832 83 Linux/dev/vda2 501758 83884031 41691137 5 Extended/dev/vda5 501760 83884031 41691136 8e Linux LVMDisk /dev/vdb: 10.7 GB, 10737418240 bytes2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xf0432cd6 Device Boot Start End Blocks Id System/dev/vdb1 2048 20971519 10484736 83 LinuxDisk /dev/vdc: 161.1 GB, 161061274112 bytes4 heads, 4 sectors/track, 19660800 cylinders, total 314572801 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x3b49c6a0 Device Boot Start End Blocks Id System/dev/vdc1 2048 314572800 157285376+ 83 LinuxDisk /dev/mapper/u1210-root: 38.4 GB, 38394658816 bytes255 heads, 63 sectors/track, 4667 cylinders, total 74989568 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/mapper/u1210-root doesn't contain a valid partition tableDisk /dev/mapper/u1210-swap_1: 4294 MB, 4294967296 bytes255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/mapper/u1210-swap_1 doesn't contain a valid partition table
已经被正确识别
Disk /dev/vdc: 161.1 GB, 161061274112 bytes
接下来,可以参考上面类似的过程,分区,格式化,挂载,使用。
我们直接使用硬件分区,比分区的映射文件会更有效果。
kvm 虚拟机的磁盘大小可通过命令:
qemu-img resize filename size 来改,要注意的是resize只支持raw格式的磁盘文件,
如果想更改qcow2等格式的磁盘大小,需先用qemu-img convert 转换磁盘格式后才能更改大小;另外,用命令改完大小后需重启kvm虚拟机,系统才能识别新添加的磁盘容量。
1、用qemu-img resize更改磁盘大小
以xp为例,原来磁盘的大小为100M,更改为250M
[root@kvmserver ]# qemu-img info xp_4_test.disk01
image: xp_4_test.disk01
file format: raw
virtual size: 99M (100000000 bytes)
disk size: 54M
[root@kvmserver]# qemu-img resize xp_4_test.disk01 +150M //更改大小
Image resized.
[root@kvmserver]# qemu-img info xp_4_test.disk01
image: xp_4_test.disk01
file format: raw
virtual size: 250M (262144000 bytes) //可以看到大小已更改为250M
disk size: 54M
2、重启kvm虚拟机
[root@kvmserver ]# virsh shutdown xp_4_test
磁盘性能是虚拟技术中的一个瓶颈,虚拟机由于经过封装以后,磁盘有所下降,尤其要对磁盘性能进行优化。
优化要点:
1、在母机(host)上,设置磁盘调度器为 deadline,有两种方法
– 在启动的时候,加入参数(需要重新启动):
elevator=deadline– 或者实时调整参数(不需要重新启动,但是下次启动时丢失):
for f in /sys/block/sd*/queue/scheduler; do echo “deadline” > $f; done2、使用 virtio,一定注意,否则导致磁盘性能严重下降
3、在虚拟机(VM)上,设置磁盘调度器为 noop,有两种方法
– 在启动的时候,加入参数(需要重新启动):
elevator=noop– 或者实时调整参数(不需要重新启动,但是下次启动时丢失):
for f in /sys/block/sd*/queue/scheduler; do echo “noop” > $f; done4、尽量使用 LVM 作为虚拟机的磁盘,qcow2会带来额外的负担,从而导致IO性能下降
5、注意虚拟机内的 virtio驱动程序一定是最新的,特别是windows虚拟机
参考:
http://serverfault.com/questions/360718/kvm-low-io-performance
转载地址:http://klsab.baihongyu.com/