大家都知道在windows下是可以给虚拟机添加磁盘的,而且很方便点击几下鼠标就搞定了。在kvm虚拟化系统中也是支持给虚拟机添加磁盘的,并且也可以对现有的磁盘进行扩容,本文主要介绍虚拟磁盘的扩容。


增加磁盘
创建磁盘: qemu-img create -f raw  /data/kvm/test03_2.img 5G
关闭虚拟机: virsh destroy test03
编辑配置文件: virsh edit test03  增加如下:

  1.      

  2.         

  3.         

  4.         

开启虚拟机:virsh start test03
进入虚拟机:virsh console test03
分区: fdisk /dev/vdb
格式化 (略)
挂载 (略)


raw格式的虚拟磁盘扩容

在讲这部分内容之前需要大家先了解一下lvm的基础知识(lvm介绍摘自网上一篇文章的一段)


*物理存储介质(PhysicalStorageMedia):指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。

*物理卷(Physical Volume,PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file),它是LVM的基本存储逻辑块。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。

*物理块(Physical Extent,PE):每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。

*卷组(Volume Group,VG):将一组物理卷收集为一个管理单元,类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。

*逻辑卷(Logical Volume,LV):虚拟分区,由物理区域(physical extents)组成,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。

*逻辑块(Logical Extent,LE):逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。


LVM抽象模型


好了lvm的介绍就讲这么多,大家如果想了解更多可以去搜搜这方面的文章。

下面介绍raw格式虚拟磁盘的扩容:


qemu-img info /data/kvm/test03.img   //本身只有9G

  1. p_w_picpath: /data/kvm/test03.img

  2. file format: raw

  3. virtual size: 9.0G (9663676416 bytes)

  4. disk size: 1.1G


qemu-img resize /data/kvm/test03.img +2G  //调整size


qemu-img info /data/kvm/test03.img //现在增加了2G

  1. p_w_picpath: /data/kvm/test03.img

  2. file format: raw

  3. virtual size: 11G (11811160064 bytes)

  4. disk size: 1.1G


virsh destroy test03  //关闭test03虚拟机
virsh start test03  //开启test03虚拟机
virsh console test03  //进入虚拟机

fdisk -l   查看磁盘分区已经增加
[root@localhost ~]# fdisk -l

  1. Disk /dev/vda: 11.8 GB, 11811160064 bytes

  2. 16 heads, 63 sectors/track, 22885 cylinders

  3. Units = cylinders of 1008 * 512 = 516096 bytes

  4. Sector size (logical/physical): 512 bytes / 512 bytes

  5. I/O size (minimum/optimal): 512 bytes / 512 bytes

  6. Disk identifier: 0x000099f3


但是磁盘挂载的空间并没有增加
[root@localhost ~]# df -h

  1. Filesystem            Size  Used Avail Use% Mounted on

  2. /dev/mapper/VolGroup-lv_root

  3.                       6.5G  579M  5.6G  10% /

  4. tmpfs                 250M     0  250M   0% /dev/shm

  5. /dev/vda1             477M   26M  427M   6% /boot


因为新增加的空间还没有划分使用。所以要继续分区:
[root@localhost ~]# fdisk /dev/vda

  1. WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

  2.          switch off the mode (command 'c') and change display units to

  3.          sectors (command 'u').


  4. Command (m for help): p


  5. Disk /dev/vda: 11.8 GB, 11811160064 bytes

  6. 16 heads, 63 sectors/track, 22885 cylinders

  7. Units = cylinders of 1008 * 512 = 516096 bytes

  8. Sector size (logical/physical): 512 bytes / 512 bytes

  9. I/O size (minimum/optimal): 512 bytes / 512 bytes

  10. Disk identifier: 0x000099f3


  11.    Device Boot      Start         End      Blocks   Id  System

  12. /dev/vda1   *           3        1018      512000   83  Linux

  13. Partition 1 does not end on cylinder boundary.

  14. /dev/vda2            1018       16645     7875584   8e  Linux LVM

  15. Partition 2 does not end on cylinder boundary.


  16. Command (m for help): n

  17. Command action

  18.    e   extended

  19.    p   primary partition (1-4)

  20. p

  21. Partition number (1-4): 3  //已经有了vda1和vda2,这里输入3或者4

  22. First cylinder (1-22885, default 1): 16646   //3-16645已被占用,我们从16646开始

  23. Last cylinder, +cylinders or +size{K,M,G} (16646-22885, default 22885): 22885

  24. // 默认22885,我们把空间全部分掉

  25. Command (m for help): p

  26. Disk /dev/vda: 11.8 GB, 11811160064 bytes

  27. 16 heads, 63 sectors/track, 22885 cylinders

  28. Units = cylinders of 1008 * 512 = 516096 bytes

  29. Sector size (logical/physical): 512 bytes / 512 bytes

  30. I/O size (minimum/optimal): 512 bytes / 512 bytes

  31. Disk identifier: 0x000099f3


  32.    Device Boot      Start         End      Blocks   Id  System

  33. /dev/vda1   *           3        1018      512000   83  Linux

  34. Partition 1 does not end on cylinder boundary.

  35. /dev/vda2            1018       16645     7875584   8e  Linux LVM

  36. Partition 2 does not end on cylinder boundary.

  37. /dev/vda3           16646       22885     3144960   83  Linux


  38. Command (m for help): w

  39. The partition table has been altered!


  40. Calling ioctl() to re-read partition table.


  41. WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

  42. The kernel still uses the old table. The new table will be used at

  43. the next reboot or after you run partprobe(8) or kpartx(8)

  44. Syncing disks.


然后再把这个/dev/vda3 加入到lvm里面去:
ls  /dev/vda3    //如果没有这个分区,需要重启一下。

[root@localhost ~]# pvcreate /dev/vda3    //创建物理卷
[root@localhost ~]# pvs  

  1.     PV         VG      Fmt   Attr    PSize    PFree

  2.  /dev/vda2  VolGroup   lvm2   a--    7.51g    0

  3.  /dev/vda3             lvm2   ---    3.00g    3.00g //在这里可以看到vda3不属于任何卷组


[root@localhost ~]# vgextend VolGroup /dev/vda3  //将sda3加入到VolGroup这个卷组

  1. Volume group "VolGroup" successfully extended


[root@localhost ~]# vgs

  1.  VG       #PV #LV #SN Attr   VSize  VFree

  2. VolGroup   2   2   0 wz--n- 10.50g  3.00g   //该卷组里有2个pv,2个lv


[root@localhost ~]# lvs

  1. LV      VG       Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  2.   lv_root VolGroup -wi-ao----   6.71g

  3.   lv_swap VolGroup -wi-ao---- 816.00m


[root@localhost ~]# lvextend -l +100%FREE  /dev/VolGroup/lv_root  //将vg中所有剩余全部加到lv-root这个逻辑卷中


[root@localhost ~]# df -h

  1. Filesystem            Size  Used Avail Use% Mounted on

  2. /dev/mapper/VolGroup-lv_root

  3.                       6.5G  618M  5.6G  10% /

  4. tmpfs                 250M     0  250M   0% /dev/shm

  5. /dev/vda1             477M   26M  427M   6% /boot


[root@localhost ~]# resize2fs  /dev/VolGroup/lv_root   //调整文件系统使与lv size一致

[root@localhost ~]# df -h   //再次查看挂载size已经增加

  1. Filesystem            Size  Used Avail Use% Mounted on

  2. /dev/mapper/VolGroup-lv_root

  3.                       9.5G   618M  8.4G   7% /

  4. tmpfs                 250M     0  250M   0% /dev/shm

  5. /dev/vda1             477M   26M  427M   6% /boot