Xen和KVM的guest主机热添加硬盘

Xen或者KVM线上主机的磁盘空间不足,需要增大硬盘,并且不能重启,这时候就需要热添加以扩充磁盘空间


说明:Xen和KVM主机都为CentOS 6.4  guest磁盘为lvm格式

先来说Xen吧,操作都一样的,虚拟机上测试

Xen的guest主机扩充根分区

# xm list                     #test2主机增大磁盘空间
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1024     4     r-----     80.8
test2                                        1   768     4     -b----     25.8
 
# qemu-img info test2.qcow2   #现在为10G的磁盘
image: test2.qcow2
file format: raw
virtual size: 10G (10739318784 bytes)  
disk size: 1.5G
 
# qemu-img create -f qcow2 -o size=5G,preallocation=metadata /data/testadd.qcow2  #新建一块5G的磁盘
Formatting '/data/testadd.qcow2', fmt=qcow2 size=5368709120 encryption=off 
cluster_size=65536 preallocation='metadata'
#防止出错,把preallocation=metadata去掉,或者qemu-img create -f raw /data/testadd.img 5G
 
# qemu-img info testadd.qcow2 #查看新建的磁盘
image: testadd.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 912K
cluster_size: 65536
 
# virsh attach-disk test2 /data/testadd.qcow2 xvdb --cache=writeback --subdriver=qcow2   #对test2主机进行添加,xvdb
Disk attached successfully
 
# vim test2          #修改guest的配置文件,添加xvdb
name = "test2"
memory = "768"
disk = [ "file:/data/test2.qcow2,xvda,w","file:/data/testadd.qcow2,xvdb,w" ]
vif = [ "bridge=br0" ]
vcpus = 4
on_reboot = "restart"
on_crash = "destroy"

接下来就是进入guest内的操作,先对其分区

# fdisk -l       #查看有没有刚添加的xvdb
Disk /dev/xvdb: 5369 MB, 5369757696 bytes
 
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
  
# fdisk /dev/xvdb             #进行分区,lvm格式
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
 
Partition number (1-4): 1
First cylinder (1-652, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652): 
Using default value 652
 
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
 
Command (m for help): p
 
Disk /dev/xvdb: 5369 MB, 5369757696 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb1ef0943
 
    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1               1         652     5237158+  8e  Linux LVM
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
Syncing disks.

lvm磁盘分区

[root@localhost ~]# partx -a /dev/xvdb
BLKPG: Device or resource busy
error adding partition 1
[root@localhost ~]# kpartx /dev/xvdb
xvdb1 : 0 10474317 /dev/xvdb 63
[root@localhost ~]# partx -a /dev/xvdb1 /dev/xvdb
[root@localhost ~]# pvcreate /dev/xvdb1 
  Physical volume "/dev/xvdb1" successfully created
  
[root@localhost ~]# vgs             #现在为10G的磁盘
  VG       #PV #LV #SN Attr   VSize VFree
  VolGroup   1   2   0 wz--n- 9.51g    0 
  
[root@localhost ~]# vgextend VolGroup /dev/xvdb1 
  Volume group "VolGroup" successfully extended
  
[root@localhost ~]# vgs              #增大了5G的空间       
  VG       #PV #LV #SN Attr   VSize  VFree
  VolGroup   2   2   0 wz--n- 14.50g 4.99g
  
[root@localhost ~]# lvs
  LV      VG       Attr      LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root VolGroup -wi-ao---   8.54g                                             
  lv_swap VolGroup -wi-ao--- 992.00m                                             
  
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      8.5G  695M  7.3G   9% /
tmpfs                 371M     0  371M   0% /dev/shm
/dev/xvda1            485M   32M  429M   7% /boot
 
[root@localhost ~]# lvextend -l +100%FREE /dev/VolGroup/lv_root 
  Extending logical volume lv_root to 13.53 GiB
  Logical volume lv_root successfully resized
 
[root@localhost ~]# resize2fs /dev/VolGroup/lv_root 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/VolGroup/lv_root to 3547136 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 3547136 blocks long.
 
[root@localhost ~]# df -h            #磁盘增加好了
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       14G  698M   12G   6% /
tmpfs                 371M     0  371M   0% /dev/shm
/dev/xvda1            485M   32M  429M   7% /boot


KVM的guest热扩充磁盘空间

[root@localhost ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     bbotte                         running
 
# qemu-img info bbotte.qcow2 
image: bbotte.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
 
# qemu-img create -f qcow2 -o size=5G,preallocation=metadata /var/kvm/bbotteadd.qcow2
Formatting '/var/kvm/bbotteadd.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 preallocation='metadata' 
#防止出错,把preallocation=metadata去掉,或者qemu-img create -f raw /var/kvm/bbotteadd.img 5G 
 
# virsh attach-disk bbotte /var/kvm/bbotteadd.qcow2 vdb --cache=writeback --subdriver=qcow2
Disk attached successfully
 
# virsh edit bbotte
<devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='writeback'/>
      <source file='/var/kvm/bbotte.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
##下面为添加的磁盘文件
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='writeback'/>
      <source file='/var/kvm/bbotteadd.qcow2'/>     #指定路径
      <target dev='vdb' bus='virtio'/>              #指定磁盘名称vdb
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> 
 #slot和其他的设备序列不要相同,如果相同,保存的时候会有提示
   </disk>

 

到guest主机里面,会看到如下提示

# pci 0000:00:07.0: BAR 1: assigned [mem 0x30000000-0x30000fff]
pci 0000:00:07.0: BAR 1: set to [mem 0x30000000-0x30000fff] (PCI address [0x30000000-0x30000fff]
pci 0000:00:07.0: BAR 0: assigned [io  0x1000-0x103f]
pci 0000:00:07.0: BAR 0: set to [io  0x1000-0x103f] (PCI address [0x1000-0x103f]
pci 0000:00:00.0: no hotplug settings from platform
pci 0000:00:00.0: using default PCI settings
pci 0000:00:01.0: no hotplug settings from platform
pci 0000:00:01.0: using default PCI settings
ata_piix 0000:00:01.1: no hotplug settings from platform
ata_piix 0000:00:01.1: using default PCI settings
piix4_smbus 0000:00:01.3: no hotplug settings from platform
piix4_smbus 0000:00:01.3: using default PCI settings
virtio-pci 0000:00:03.0: no hotplug settings from platform
virtio-pci 0000:00:03.0: using default PCI settings
uhci_hcd 0000:00:04.0: no hotplug settings from platform
uhci_hcd 0000:00:04.0: using default PCI settings
uhci_hcd 0000:00:04.1: no hotplug settings from platform
uhci_hcd 0000:00:04.1: using default PCI settings
uhci_hcd 0000:00:04.2: no hotplug settings from platform
uhci_hcd 0000:00:04.2: using default PCI settings
ehci_hcd 0000:00:04.7: no hotplug settings from platform
ehci_hcd 0000:00:04.7: using default PCI settings
virtio-pci 0000:00:05.0: no hotplug settings from platform
virtio-pci 0000:00:05.0: using default PCI settings
virtio-pci 0000:00:06.0: no hotplug settings from platform
virtio-pci 0000:00:06.0: using default PCI settings
pci 0000:00:07.0: no hotplug settings from platform
pci 0000:00:07.0: using default PCI settings
virtio-pci 0000:00:07.0: enabling device (0000 -> 0003)
virtio-pci 0000:00:07.0: PCI INT A -> Link[LNKC] -> GSI 11 (level, high) -> IRQ 11
 vdb: unknown partition table

进行磁盘扩充

# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  8.4G  918M  7.1G  12% /
tmpfs                         372M     0  372M   0% /dev/shm
/dev/vda1                     485M   32M  428M   7% /boot
 
# fdisk -l
Disk /dev/vdb: 5368 MB, 5368709120 bytes
16 heads, 63 sectors/track, 10402 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: 0x00000000
  
[root@localhost ~]# lvs
  LV      VG       Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root VolGroup -wi-ao---- 8.51g                                             
  lv_swap VolGroup -wi-ao---- 1.00g                                             
  
[root@localhost ~]# vgextend VolGroup /dev/vdb
  No physical volume label read from /dev/vdb
  Physical volume /dev/vdb not found
  Physical volume "/dev/vdb" successfully created
  Volume group "VolGroup" successfully extended
 
[root@localhost ~]# lvextend -l +100%FREE /dev/mapper/VolGroup-lv_root
  Extending logical volume lv_root to 13.50 GiB
  Logical volume lv_root successfully resized
  
[root@localhost ~]# resize2fs /dev/mapper/VolGroup-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 3539968 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 3539968 blocks long.
  
[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   14G  920M   12G   8% /
tmpfs                         372M     0  372M   0% /dev/shm
/dev/vda1                     485M   32M  428M   7% /boot


扩充磁盘有危险,请结合自己的环境及设置调整,先在测试机操作



重启方式添加磁盘文件扩充磁盘空间:

# qemu-img create -f qcow2 -o size=100G,preallocation=metadata /var/xen/centos3.qcow2
 
# qemu-img info centos3.qcow2
image: centos3.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 49G
cluster_size: 65536
#已经是100G空间的guest主机,下面再增大100G空间
 
# qemu-img resize centos3.qcow2 +100G                 #增加100G空间
# qemu-img info centos3.qcow2
image: centos3.qcow2
file format: qcow2
virtual size: 200G (214748364800 bytes)
disk size: 49G
cluster_size: 65536
 
#img格式增大硬盘容量
dd if=/dev/zero bs=8k count=125000 >> /data/centos65.img
125000+0 records in
125000+0 records out
1024000000 bytes (1.0 GB) copied, 14.1461 s, 72.4 MB/s

然后进入guest主机,如上Xen主机扩充磁盘的方式进行添加。

也可以进入guest主机,把新添加的磁盘文件分区后新建文件夹,进行挂载

# fdisk -l
# fdisk /dev/xvdb
# partx -a /dev/xvdb
BLKPG: Device or resource busy
error adding partition 1
# kpartx /dev/xvdb
xvdb1 : 0 4294961622 /dev/xvdb 63
# partx -a /dev/xvdb1 /dev/xvdb
# mkfs.ext4 /dev/xvdb1
# mkdir /data
# vim /etc/fstab
/dev/xvdb1 /data ext4 defaults 0 0
# mount -a
# df -h


另:qcow2文件只能增大不能减小,lvm磁盘格式没有ext的速度快


增大磁盘容量方法是灵活的,谨慎操作


你可能感兴趣的:(kvm,xen,添加磁盘)