1. host增加物理硬盘并分区
HOST作为KVM的宿主计算机,管理所有GUEST虚拟机。我们通过给HOST增加物理硬盘,然后分给GUEST,从而实现给虚拟机硬盘扩容的效果。
如何给计算机增加物理硬盘并分区,请参考:多硬盘分区管理fdisk 文章
查看HOST机的硬盘
~ : 299.4 GB, 299439751168 bytes 255 heads, 63 sectors/track, 36404 cylinders, total 584843264 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk 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 Linux : 1999.3 GB, 1999307276288 bytes 255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk 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 ~ Filesystem Size Used Avail Use% Mounted on /dev/sda3 37G 3.4G 32G 10% / udev 24G 4.0K 24G 1% /dev tmpfs 9.5G 1.1M 9.5G 1% /run none 5.0M 8.0K 5.0M 1% /run/lock none 24G 152K 24G 1% /run/shm none 100M 28K 100M 1% /run/user cgroup 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
2. 通过virsh给guest增加文件硬盘
创建文件硬盘的镜像
~ cd /disk/sdb6/ ~ Formatting '/disk/sdb6/c1d6.img', fmt=raw size=10737418240 ~ ls -l -rw-r--r-- 1 root root 10737418240 Jul 8 16:37 c1d6.img drwx------ 2 root root 16384 Jul 8 09:03 lost+found/
通过virsh管理工具加载硬盘
~ Welcome to virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit #查看系统内的虚拟机 Id Name State ---------------------------------------------------- 5 server3 running 6 server4 running 7 d2 running 8 r1 running 9 server2 running 12 c1 running #在这里我们要对c1进行硬盘扩容 #找到硬盘配置(原来的系统硬盘) <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/disk/sdb1/c1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> #增加文件硬盘,vdb <disk type='file' device='disk'> <driver name='qemu' type='raw' <target dev='' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot=' function='0x0'/> </disk> #保存退出
重启c1虚拟机
#,reboot和shutdown不管用。 ~ virsh # destroy c1 Domain 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 c1 Domain c1 started #进入虚拟机c1 ~
在c1中,进行硬盘查检并分区
~ : 42.9 GB, 42949672960 bytes 16 heads, 63 sectors/track, 83220 cylinders, total 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk 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 LVM : 10.7 GB, 10737418240 bytes 16 heads, 63 sectors/track, 20805 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/vdb doesn't contain a valid partition table Disk /dev/mapper/u1210-root: 38.4 GB, 38394658816 bytes 255 heads, 63 sectors/track, 4667 cylinders, total 74989568 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/u1210-root doesn't contain a valid partition table Disk /dev/mapper/u1210-swap_1: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/u1210-swap_1 doesn't contain a valid partition table
/dev/vdb已经被识别,接下来 分区,格式化,挂载,使用
硬盘分区
~ Command (m for help): p Disk /dev/vdb: 161.1 GB, 161061274112 bytes 16 heads, 63 sectors/track, 312076 cylinders, total 314572801 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3b49c6a0 Device Boot Start End Blocks Id System Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): Using default value 1 First sector (2048-314572800, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-314572800, default 314572800): Using default value 314572800 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. #分区生效 ~ ~ sudo fdisk -l Disk /dev/vdb: 10.7 GB, 10737418240 bytes 2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xf0432cd6 Device Boot Start End Blocks Id System /dev/vdb1 2048 20971519 10484736 83 Linux
格式化
~ mke2fs 1.42.5 (29-Jul-2012) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 9830400 inodes, 39321344 blocks 1966067 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 1200 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
挂载
~ ~ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/u1210-root 36G 1.1G 33G 4% / udev 2.0G 4.0K 2.0G 1% /dev tmpfs 791M 232K 791M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 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下载做任何的操作。
3. 通过virsh给guest增加分区硬盘
直接使用HOST的分区硬盘/dev/sdb5,做个虚拟机c1的分区
virsh # edit c1 #新增新硬盘vbc <disk type='block' device='disk'> <driver name='qemu' type='raw' <target dev bus='virtio'/> </disk> virsh # destroy c1 Domain c1 destroyed Domain c1 started virsh # console c1
登陆虚拟c1,查看硬盘信息
[sudo] password for cos: : 42.9 GB, 42949672960 bytes 16 heads, 63 sectors/track, 83220 cylinders, total 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk 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 LVM : 10.7 GB, 10737418240 bytes 2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xf0432cd6 Device Boot Start End Blocks Id System /dev/vdb1 2048 20971519 10484736 83 Linux : 161.1 GB, 161061274112 bytes 4 heads, 4 sectors/track, 19660800 cylinders, total 314572801 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3b49c6a0 Device Boot Start End Blocks Id System /dev/vdc1 2048 314572800 157285376+ 83 Linux Disk /dev/mapper/u1210-root: 38.4 GB, 38394658816 bytes 255 heads, 63 sectors/track, 4667 cylinders, total 74989568 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/mapper/u1210-root doesn't contain a valid partition table Disk /dev/mapper/u1210-swap_1: 4294 MB, 4294967296 bytes 255 heads, 63 sectors/track, 522 cylinders, total 8388608 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /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虚拟机,系统才能识别新添加的磁盘容量。
更改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
KVM磁盘性能优化
磁盘性能是虚拟技术中的一个瓶颈,虚拟机由于经过封装以后,磁盘有所下降,尤其要对磁盘性能进行优化。
优化要点:
1、在母机(host)上,设置磁盘调度器为 deadline,有两种方法
– 在启动的时候,加入参数(需要重新启动):
elevator=deadline
– 或者实时调整参数(不需要重新启动,但是下次启动时丢失):
for f in /sys/block/sd*/queue/scheduler; do echo “deadline” > $f; done
2、使用 virtio,一定注意,否则导致磁盘性能严重下降
3、在虚拟机(VM)上,设置磁盘调度器为 noop,有两种方法
– 在启动的时候,加入参数(需要重新启动):
elevator=noop
– 或者实时调整参数(不需要重新启动,但是下次启动时丢失):
for f in /sys/block/sd*/queue/scheduler; do echo “noop” > $f; done
4、尽量使用 LVM 作为虚拟机的磁盘,qcow2会带来额外的负担,从而导致IO性能下降
5、注意虚拟机内的 virtio驱动程序一定是最新的,特别是windows虚拟机
参考:
http://serverfault.com/questions/360718/kvm-low-io-performance