实验
1.Kvm添加Lvm存储池
2.使用Lv安装操作系统
3.使用Lv快照创建操作系统
4.扩展虚拟机LVM之lv root分区空间
5.根据上一个实例,现有另一个问题,如果data分区是分布在两个物理卷PV,如何扩充此分区呢?
6.虚拟机快照及PV数据迁移
7.LVM虚拟机克隆
实验1.略
实验2.使用Lv安装操作系统
[实验环境:宿主机使用的是lvm存储,guest使用lvm分区]
此一句话带过吧,太简单了,用lvcreate �CL 20G �Cn web01-lvm vg_lvm,便可创建一个逻辑卷.
这时我们便可以用此卷安装操作系统了.
virt-install--connect qemu:///system--name web01_lvm--ram 1024--vcpus=1 --disk=/dev/vg_lvm/web01-lvm --network bridge:br0 --accelerate--cdrom /iso/CentOS-6.3-x86_64-bin-DVD1.iso --vnc --vncport=5902 --vnclisten=0.0.0.0 这样我们就可以通过mRemote工具到这台guest上安装虚拟机了. 如果你使用的是kickstart安装,还可以借助下面的命令来自动化安装 virt-install --name cache1 --vcpus=8 --ram 6144 --pxe --network bridge=br0 --network bridge=br1 --disk=/dev/vg_lvs2/vm-cache1 --vnc --vncport 5902 --vnclisten=0.0.0.0 --noautoconsole 仅供参考! |
实验3. 使用Lv快照创建操作系统
[实验环境:宿主机使用的是lvm存储,guest使用lvm分区]
在实验2处,我们已经通过宿主机的一个逻辑卷安装了guest,在此,我想通过LVM的快照技术,生成一个快照卷,用此卷来生成一个全新的系统,因其创建快,用与培训机构供学生作为练习机,还是很不错的。往下走。
先看一下这个虚拟机是多大的,到时候我们可以根据此大小增长15%-20%,此部分用来存放原主机被修改的部分.
执行如下命令:
[root@lvm ~]# lvs LVVGAttrLSizePool Origin Data%Move Log Copy%Convert os_imgvg_lvm -wi-ao-- 147.66g web01-lvmvg_lvm -wi-a---20.00g web01_lvm_disk1 vg_lvm -wi-a---10.00g web01_lvm_disk2 vg_lvm -wi-a---10.00g web01_lvm_disk3 vg_lvm -wi-a---30.00g [root@lvm ~]# lvcreate -s -L 4G -n web01-lvm-snap /dev/vg_lvm/web01-lvm Logical volume "web01-lvm-snap" created |
此时,我们便可以用web01-lvm-snap作为启动虚拟机的镜像文件了。切记,我们能使用的空间只有4G,我们创建了一个可以存储4G文件大小的空间.在这我就不深入了。
以上,是通过virt-manager工具创建的快照虚拟机,下面在命令行上再创建一次; [root@lvm ~]# lvcreate -s -L 4G -n web01-lvm-snap /dev/vg_lvm/web01-lvm Logical volume "web01-lvm-snap" created 导出web01_lvm虚拟机的配置信息,并修改4处信息 virsh dumpxml web01-lvm >/etc/libvirt/qemu/web01_lvm_snap.xml [root@lvm ~]# uuidgen 678fda12-51ca-4b97-aab7-f0bcdf560b33 MAC生成: [root@lvm qemu]# python -c "from virtinst.util import randomMAC;print randomMAC(type='qemu')" 52:54:00:8d:be:fc [root@lvm ~]# more /etc/libvirt/qemu/web01_lvm_snap.xml <domain type='kvm'> <name>web01-lvm-snap</name> <uuid>678fda12-51ca-4b97-aab7-f0bcdf560b33</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='rhel6.3.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/vg_lvm/web01-lvm-snap'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:8d:be:fc'/> <source bridge='br0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5902' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memballoon> </devices> </domain> 生成快照虚拟机 Domain web01_lvm_snap defined from /etc/libvirt/qemu/web01_lvm_snap.xml 启动快照虚拟机 [root@lvm ~]# virsh start web01_lvm_snap Domain web01_lvm_snap started |
虚拟机创建了,这时我们就可以将此虚拟机交付与他人了,即使破坏了,我们也不用担心,再创建一个快照便可了.
实验4.扩容虚拟机LVM之lv 全root分区空间
[实验环境:宿主机使用的是lvm存储,guest使用lvm分区]
好了, 现在让我们看看怎么使用virt-resize来调整大小.
首先让我们看下虚拟机卷组的相关信息:
guest# vgs VG#PV #LV #SN AttrVSize VFree vg_lvm130 wz--n- 9.90g 0 |
逻辑卷相关信息:
guest# lvs LVVGAttrLSize Pool Origin Data%Move Log Copy%Convert data vg_lvm -wi-ao-- 2.04g root vg_lvm -wi-ao-- 5.86g swap vg_lvm -wi-ao-- 2.00g |
现在关闭虚拟机
host# virsh shutdown web01-lvm |
在使用resize命令前,先看下此虚拟机镜像文件的大小和类型.
host# qemu-img info /dev/vg_lvm/web01-lvm image: /dev/vg_lvm/web01-lvm file format: raw virtual size: 10G (10737418240 bytes) disk size: 0 |
我们将要重命令/dev/vg_lvm/web01-lvm逻辑卷并且最后创建一个新的大小的卷。现在这个虚拟镜像是10G,现在我们要将其扩充到20G。现在让我们用lvrename命令来改名,并且用lvcreate创建一个20G的镜像磁盘。
host# lvrename vg_lvm web01-lvm web01-lvm-OLD Renamed "web01-lvm" to "web01-lvm-OLD" in volume group "vg_lvm" [root@lvm ~]# lvs LVVGAttrLSizePool Origin Data%Move Log Copy%Convert os_imgvg_lvm -wi-ao-- 147.66g web01-lvm-OLDvg_lvm -wi-a---10.00g web01_lvm_disk1 vg_lvm -wi-ao--10.00g web01_lvm_disk2 vg_lvm -wi-ao--10.00g 再创建一个20G的web01-lvm Logical volume "web01-lvm" created host# lvs LVVGAttrLSizePool Origin Data%Move Log Copy%Convert os_imgvg_lvm -wi-ao-- 147.66g web01-lvmvg_lvm -wi-a---20.00g web01-lvm-OLDvg_lvm -wi-a---10.00g web01_lvm_disk1 vg_lvm -wi-ao--10.00g web01_lvm_disk2 vg_lvm -wi-ao--10.00g |
现在我们可以执行下面的命令来扩充root分区的空间了
host# virt-resize /dev/vg_lvm/web01-lvm-OLD/dev/vg_lvm/web01-lvm --expand /dev/vda2 --LV-expand /dev/vg_lvm/root Examining /dev/vg_lvm/web01-lvm-OLD ... ********** Summary of changes: /dev/sda1: This partition will be left alone. /dev/sda2: This partition will be resized from 9.9G to 19.9G.The LVM PV on /dev/sda2 will be expanded using the 'pvresize' method. /dev/vg_lvm/root: This logical volume will be expanded to maximum size. The filesystem ext4 on /dev/vg_lvm/root will be expanded using the 'resize2fs' method. ********** Setting up initial partition table on /dev/vg_lvm/web01-lvm ... Copying /dev/sda1 ... Copying /dev/sda2 ... 省略进度…. Expanding /dev/sda2 using the 'pvresize' method ... Expanding /dev/vg_lvm/root using the 'resize2fs' method ... Resize operation completed with no errors.Before deleting the old disk, carefully check that the resized disk boots and works correctly. *注意上面标红的那句.在删除老文件前,请确认虚拟机可以正常启动和工作。* |
注意/dev/vda2是vg_lvm的物理卷,也就是你需要扩容的虚拟机root分区所在的物理卷.如图:
这个命令执行完后,将会使vg_lvm卷增大20G,root分区也会增加近10G.以下是检查部分,启动虚拟机.
guest# vgs VG#PV #LV #SN AttrVSizeVFree vg_lvm130 wz--n- 19.90g0 guest# lvs LVVGAttrLSizePool Origin Data%Move Log Copy%Convert data vg_lvm -wi-ao--2.04g root vg_lvm -wi-ao-- 15.86g swap vg_lvm -wi-ao--2.00g |
我们再来看看这台虚拟机磁盘镜像是多大吧.
host# qemu-img info /dev/vg_lvm/web01-lvm image: /dev/vg_lvm/web01-lvm file format: raw virtual size: 20G (21474836480 bytes) disk size: 0 |
OK,此部分实验目标达成,已经成功为虚拟机root分区追加10G的空间.
现在我们可以使用lvremove删除掉原来老的镜像了.
host# lvremove /dev/vg_lvm/web01-lvm-OLD Do you really want to remove active logical volume web01-lvm-OLD? [y/n]: y Logical volume "web01-lvm-OLD" successfully removed host# lvs LVVGAttrLSizePool Origin Data%Move Log Copy%Convert os_imgvg_lvm -wi-ao-- 147.66g web01-lvmvg_lvm -wi-ao--20.00g web01_lvm_disk1 vg_lvm -wi-ao--10.00g web01_lvm_disk2 vg_lvm -wi-ao--10.00g |
现在我们想一下,如果我要扩充的分区,占据了两个物理卷,那么这个―expand如何指定?继续下面的实验.
案验5,lvm分区中data分区占据两个pv,如何扩充此分区
[实验环境:宿主机使用的是lvm存储,guest使用lvm分区]
data分区应该分布在vda和vdb之间,一开始按照实验4操作,发现此路不通,与是乎突然想到guest不是用lvm吗?那我何不扩充vg的空间,再将vg的省余空间填充给我们要扩充的逻辑分区呢?根据我的实验环境,简单讲下操作流程:
(1)如果宿主没有空间,我们添加一块物理磁盘,转换在pv,命令fdisk,pvcreate
(2)在宿主主机上添加一块10G逻辑卷lv,命令lvcreate
(3)将此逻辑卷挂载到guest主机上,再pv
添加磁盘 注意此命令可以支持在线添加/删除(如果没有persistent参数,后期关机,再开机还会再有) 可以通过domblklist 查看guest主机的块设备 [root@lvm ~]# virsh domblklist web02-lvm TargetSource ------------------------------------------------ vda/dev/vg_lvm/web01_lvm_disk1 vdb/dev/vg_lvm/web01_lvm_disk2 |
(4)将pv的物理卷添加到卷组(如果你想将某一物理卷从卷组中移除,你可以考略使用pvmove命令将数据移走,此物理卷便可移除了,这是pv迁移技术,请看实验6),命令vgextend
(5)这时我们的vg的size就增大了,这时我们再用lvresize扩充data分区喽,命令lvresize
(6)再通过resize2fs命令,便可以增加data分区了。
呵呵,如果guest使用的不是lvm技术,那么我们只能使用virt-resize来扩充分区空间了,这个我也会再写篇实验来说明.
最终结果(与上图比较,我的data分区增加了10G):
guest# df -h FilesystemSizeUsed Avail Use% Mounted on /dev/mapper/vg_lvm-root 4.9G1.8G2.9G38% / tmpfs499M0499M0% /dev/shm /dev/vda197M28M65M30% /boot /dev/mapper/vg_lvm-data 23G 164M22G1% /data |
其实,我们实验4也可以采用实验5的技术来做的,发现了没?
实验6.虚拟机快照及PV数据迁移
[实验环境:宿主机使用的是lvm存储,guest使用lvm分区]
今天我们要做的实验是虚拟机快照,这里的虚拟机快照采用的是LVM的快照技术.
闲话不多说,开始实验:
先看下主机逻辑卷信息(我们的guest使用的就是主机的逻辑卷)
host# lvs LVVGAttrLSizePool Origin Data%Move Log Copy%Convert os_imgvg_lvm -wi-ao-- 147.66g web01-lvmvg_lvm -wi-ao--20.00g web01_lvm_disk1 vg_lvm -wi-a---10.00g web01_lvm_disk2 vg_lvm -wi-a---10.00g web01_lvm_disk3 vg_lvm -wi-a---30.00g |
标红的卷就是guest web01-lvm的镜像文件,我们现在要对此逻辑卷做一个卷快照,后期我们将对web01-lvm做安装一个telnet软件的操作,后期将用此快照做恢复操作.
host# virsh shutdown web01-lvm Domain web01-lvm is being shutdown
Logical volume "web01-lvm-snap" created ……… --- Logical volume --- LV Path/dev/vg_lvm/web01-lvm LV Nameweb01-lvm VG Namevg_lvm LV UUIDMVF7pH-SLBs-4dGH-ftAt-XWr3-JK5R-GCyB6t LV Write Accessread/write LV Creation host, time lvm.tx.com, 2011-11-14 22:11:40 +0800 LV snapshot statussource of web01-lvm-snap [active] LV Statusavailable # open1 LV Size20.00 GiB Current LE5120 Segments1 Allocationinherit Read ahead sectorsauto - currently set to256 Block device253:4 --- Logical volume --- LV Path/dev/vg_lvm/web01-lvm-snap LV Nameweb01-lvm-snap VG Namevg_lvm LV UUIDnO8s7l-utBH-gdS2-zBOe-MTpS-SoHP-fRILYu LV Write Accessread/write LV Creation host, time lvm.tx.com, 2011-11-16 00:49:09 +0800 LV snapshot statusactive destination for web01-lvm LV Statusavailable # open0 LV Size20.00 GiB Current LE5120 COW-table size4.00 GiB COW-table LE1024 Allocated to snapshot0.00% Snapshot chunk size4.00 KiB Segments1 Allocationinherit Read ahead sectorsauto - currently set to256 Block device253:1 |
我们到guest上装个telnet软件
host# virsh start web01-lvm Domain web01-lvm started
guest# telnet www.baidu.com 80 Trying 115.239.210.26... Connected to www.baidu.com. Escape character is '^]'. |
关闭虚拟机/恢复测试
host# virsh shutdown web01-lvm Domain web01-lvm is being shutdown host# lvconvert --merge /dev/vg_lvm/web01-lvm-snap Merging of volume web01-lvm-snap started. web01-lvm: Merged: 1.1% web01-lvm: Merged: 0.0% Merge of snapshot into logical volume web01-lvm has finished. Logical volume "web01-lvm-snap" successfully removed |
从以上可以看出恢复成功且逻辑卷快照web01-lvm-snap成功删除了
开启虚拟机检查
host# virsh start web01-lvm Domain web01-lvm started guest# telnet -bash: telnet: command not found |
注意:创建快照不需要关闭guest,快照恢复需要关闭guest.切记,切记…