大家都知道在windows下是可以给虚拟机添加磁盘的,而且很方便点击几下鼠标就搞定了。在kvm虚拟化系统中也是支持给虚拟机添加磁盘的,并且也可以对现有的磁盘进行扩容,本文主要介绍虚拟磁盘的扩容。
增加磁盘
创建磁盘: qemu-img create -f raw /data/kvm/test03_2.img 5G
关闭虚拟机: virsh destroy test03
编辑配置文件: virsh edit test03 增加如下:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/data/kvm/test03_2.img'/>
<target dev='vdb' bus='virtio'/>
</disk>
开启虚拟机: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
p_w_picpath: /data/kvm/test03.img
file format: raw
virtual size: 9.0G (9663676416 bytes)
disk size: 1.1G
qemu-img resize /data/kvm/test03.img +2G //调整size
qemu-img info /data/kvm/test03.img //现在增加了2G
p_w_picpath: /data/kvm/test03.img
file format: raw
virtual size: 11G (11811160064 bytes)
disk size: 1.1G
virsh destroy test03 //关闭test03虚拟机
virsh start test03 //开启test03虚拟机
virsh console test03 //进入虚拟机
fdisk -l 查看磁盘分区已经增加
[root@localhost ~]# fdisk -l
Disk /dev/vda: 11.8 GB, 11811160064 bytes
16 heads, 63 sectors/track, 22885 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000099f3
但是磁盘挂载的空间并没有增加
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 579M 5.6G 10% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/vda1 477M 26M 427M 6% /boot
因为新增加的空间还没有划分使用。所以要继续分区:
[root@localhost ~]# fdisk /dev/vda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/vda: 11.8 GB, 11811160064 bytes
16 heads, 63 sectors/track, 22885 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000099f3
Device Boot Start End Blocks Id System
/dev/vda1 * 3 1018 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2 1018 16645 7875584 8e Linux LVM
Partition 2 does not end on cylinder boundary.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3 //已经有了vda1和vda2,这里输入3或者4
First cylinder (1-22885, default 1): 16646 //3-16645已被占用,我们从16646开始
Last cylinder, +cylinders or +size{K,M,G} (16646-22885, default 22885): 22885
// 默认22885,我们把空间全部分掉
Command (m for help): p
Disk /dev/vda: 11.8 GB, 11811160064 bytes
16 heads, 63 sectors/track, 22885 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000099f3
Device Boot Start End Blocks Id System
/dev/vda1 * 3 1018 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2 1018 16645 7875584 8e Linux LVM
Partition 2 does not end on cylinder boundary.
/dev/vda3 16646 22885 3144960 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
然后再把这个/dev/vda3 加入到lvm里面去:
ls /dev/vda3 //如果没有这个分区,需要重启一下。
[root@localhost ~]# pvcreate /dev/vda3 //创建物理卷
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 VolGroup lvm2 a-- 7.51g 0
/dev/vda3 lvm2 --- 3.00g 3.00g //在这里可以看到vda3不属于任何卷组
[root@localhost ~]# vgextend VolGroup /dev/vda3 //将sda3加入到VolGroup这个卷组
Volume group "VolGroup" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup 2 2 0 wz--n- 10.50g 3.00g //该卷组里有2个pv,2个lv
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 6.71g
lv_swap VolGroup -wi-ao---- 816.00m
[root@localhost ~]# lvextend -l +100%FREE /dev/VolGroup/lv_root //将vg中所有剩余全部加到lv-root这个逻辑卷中
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
6.5G 618M 5.6G 10% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/vda1 477M 26M 427M 6% /boot
[root@localhost ~]# resize2fs /dev/VolGroup/lv_root //调整文件系统使与lv size一致
[root@localhost ~]# df -h //再次查看挂载size已经增加
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
9.5G 618M 8.4G 7% /
tmpfs 250M 0 250M 0% /dev/shm
/dev/vda1 477M 26M 427M 6% /boot