当前位置: 首页 > OpenStack, 网络功能虚拟化 > 正文

Ubuntu 14.04下libvirt管理kvm

Ubuntu 14.04下libvirt管理kvm

kvm是linux最流行的虚拟化解决方案,kvm有自己的命令行管理工具(redhat:qemu-kvm,ubuntu:kvm),但是这些命令都太底层。libvirt是更高层的虚拟化管理工具,这两类管理工具类似于 rpm 和 yum(dpkg 和 apt-get)。使用 libvirt 更简单一点,而且还支持其它的虚拟化方案,非常多的开源项目都采用了 libvirt (如:openstack)。

这里整理的内容很长,但是大部分能用到的功能都在这里了。

1.安装kvm和libvirt

使用如下命令安装 kvm 和 libvirt 软件包:

# apt-get update && apt-get dist-upgrade
# apt-get install qemu-kvm libvirt-bin virt-manager virt-viewer

验证 KVM 和 libvirt 是否安装成功:

root@mininet-vm:~/images# virsh -c qemu:///system list
 Id    Name                           State
----------------------------------------------------

root@mininet-vm:~/images# 

查看网络接口情况:

root@mininet-vm:~# ifconfig virbr0
virbr0    Link encap:Ethernet  HWaddr fe:54:00:67:50:de  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40 errors:0 dropped:6 overruns:0 frame:0
          TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2879 (2.8 KB)  TX bytes:3191 (3.1 KB)

会发现多了个一个 “virbr0” 接口,这是做为虚拟化网络桥接用的,充当虚拟机的默认网关。

2. 下载实验用的 cirrors 镜像

http://download.cirros-cloud.net/下载实验用的 cirrors 映像。

root@mininet-vm:~/images# pwd
/root/images
root@mininet-vm:~/images# ls
cirros-0.3.4-i386-disk.img  cirros-0.3.4-x86_64-disk.img
root@mininet-vm:~/images# 

3. 从下载的映像文件导入创建虚拟机

3.1 不带网络的虚拟机

# virt-install --connect=qemu:///system --name=cirros --ram=128 --vcpus=1 --disk /root/cirros-0.3.0-i386-disk.img,format=qcow2 --import --nonetworks

(由于是本机操作,可以省略掉: –connect qemu:///system)

如果安装了 virt-viewer 的话会自动打开 virt-viewer 窗口,显示虚拟机的运行窗口。可以关闭 virt-viewer ,使用 vncviewer 查看你虚拟机运行窗口,命令如下:

# vncviewer :5900

(第一个 vnc 默认监听5900端口,后面的虚拟机一次累加。也可以在virt-install 创建虚拟机时设置其他的vnc端口)

幕后操作:

每次使用 virt-install 创建虚拟机时,其实都是创建或修改 “/etc/libvirt/” 下面特定的 xml 文件。

上面的命令会自动打开虚拟机控制台,很多情况下不需要打开,使用在 virt-install 命令中添加选项 “–noautoconsole”即可。

3.2 带默认网络的虚拟机

从映像文件导入虚拟机,支持默认的网络,设置vnc端口号(监听127.0.0.1:5911),使用如下命令:

# virt-install --name cirros --ram 64 --vcpus 1 --disk path=/root/cirros-0.3.4-x86_64-disk.img,format=qcow2 --network network:default --accelerate --vnc --vncport=5911 --import

使用 vncviewer 查看虚拟机运行情况:

# vncview :5911

登录后,使用ifconfig查看虚拟机内的网络,会发现 eth0 网络接口,并且自动获取到了IP地址(和“1.安装kvm和libvirt”中的“virbr0”在一个网段),这是自动给虚拟机分配的IP地址。如果物理机已经连上了Internet,则在虚拟机内部也可以连上Internet。

此时查看物理机的IP地址,会发现多了一个 “vnet0” 网络接口

root@mininet-vm:~# ifconfig vnet0
vnet0     Link encap:Ethernet  HWaddr fe:54:00:67:50:de  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40 errors:0 dropped:0 overruns:0 frame:0
          TX packets:602 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:3439 (3.4 KB)  TX bytes:32519 (32.5 KB)

root@mininet-vm:~# brctl show
bridge name bridge id       STP enabled interfaces
virbr0      8000.fe54006750de   yes     vnet0

如果再用相同的方法启动另一个带网络的虚拟机:

root@mininet-vm:~# brctl show
bridge name bridge id       STP enabled interfaces
virbr0      8000.fe54006750de   yes     vnet0
                                        vnet1

从上面可以看出,vnet0 和 vnet1 分别对应于各个虚拟机内部的 eth0 网卡。

3.3 通过命令行安装guest虚拟机

# 创建磁盘映像
# qemu-img create -f qcow2 /images/centos6.3-x86_64.img 10G
# chown qemu:qemu /images/centos6.3-x86_64.img
# virt-install --name centos6.3 --ram=1024 --arch=x86_64 --vcpus=1 --check-cpu --os-type=linux --os-variant='rhel6' -c /tmp/CentOS-6.3-x86_64-minimal.iso --disk path=/images/centos6.3-x86_64.img,device=disk,bus=virtio,size=10,format=qcow2 --bridge=br100 --noautoconsole --vnc --vncport=5902 --vnclisten=0.0.0.0

在看一个例子:

# virt-install --name ubuntutest --hvm --ram 1024 --vcpus 1 --disk path=/images/test/disk.img,size=10  --network network:default --accelerate  --vnc --vncport=5911 --cdrom /images/iso/ubuntu-14.04-server-amd64.iso -d

[参数说明]

--name   虚拟机名称
--hvm     使用全虚拟化(与para-irtualization向对),不支持xen hypervisor
--ram      虚拟机内存大小
--vcpus   虚拟机虚拟CPU个数
--disk      虚拟机使用的磁盘(文件)的路径,本例中文件放置在/images/test目录下
--network 网络设置,使用默认设置即可
--vnc     设置连接桌面环境的vnc端口,本例是5911
--cdrom   设置光驱获取虚拟光驱文件的路径 -d 指示从光驱启动( -c 指示从硬盘启动)我们这里是/images/iso

4. virsh管理命令

Libvirt有两种控制方式,命令行和图形界面(vrit-manager)

libvirt中最终重要的命令是 virsh 。

4.1 virsh常用命令一览表:

命令           说明 
help          显示该命令的说明
quit          结束 virsh ,回到 Shell
connect       连接到指定的虚拟机服务器
create        创建一个新的虚拟机
destroy       删除一个虚拟机
start         开启(已定义的)非启动的虚拟机
define        从 XML 定义一个虚拟机
undefine      取消定义的虚拟机
dumpxml       转储虚拟机的设置值
list          列出虚拟机
reboot        重新启动虚拟机
save          存储虚拟机的状态
restore       回复虚拟机的状态
suspend       暂停虚拟机的执行
resume        继续执行该虚拟机
dump          将虚拟机的内核转储到指定的文件,以便进行分析与排错
shutdown      关闭虚拟机
setmem        修改内存的大小
setmaxmem     设置内存的最大值
setvcpus      修改虚拟处理器的数量
vncdisplay    显示指定虚拟机ID的vnc端口
console       #进入虚拟机cirros的控制台终端

4.2 virsh常用命令举例:

  • virsh list #显示本地活动虚拟机
  • virsh list –all #显示本地所有的虚拟机(活动的+不活动的)
  • virsh define ubuntu.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
  • virsh start ubuntu #启动名字为ubuntu的非活动虚拟机
  • virsh create ubuntu.xml #创建虚拟机(创建后,虚拟机立即执行,成为活动主机)
  • virsh suspend ubuntu #暂停虚拟机
  • virsh resume ubuntu #启动暂停的虚拟机
  • virsh shutdown ubuntu #正常关闭虚拟机
  • virsh destroy ubuntu #强制关闭虚拟机
  • virsh dominfo ubuntu #显示虚拟机的基本信息
  • virsh domname 2 #显示id号为2的虚拟机名
  • virsh domid ubuntu #显示虚拟机id号
  • virsh domuuid ubuntu #显示虚拟机的uuid
  • virsh domstate ubuntu #显示虚拟机的当前状态
  • virsh dumpxml ubuntu #显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等)
  • virsh setmem ubuntu 512000 #给不活动虚拟机设置内存大小
  • virsh setvcpus ubuntu 4 #给不活动虚拟机设置cpu个数
  • virsh edit ubuntu #编辑虚拟机的xml配置文件(一般是在刚定义完虚拟机之后)
  • virsh vncdisplay 11 #显示ID为11的虚拟机的vnc端口
  • virsh console cirros #进入虚拟机cirros的控制台终端 ctrl+]退出

4.3 virsh管理远程的虚拟机

直接输入 virsh 回车即可进入 virsh 的shell环境,在这个virsh里面可以执行上面的命令(去掉前面的virsh)与本地libvirt交互,还可以通过命令connect命令连接远程libvirt,与之交互,例如:

connect xen+ssh://root@10.4.122.11

另外可以只执行一条远程libvirt命令:

virsh –c xen+ssh://root@10.4.122.11 list --all

4.4 虚拟机的xml配置文件

ubuntu.xml配置文件举例:

<domain type='xen'>  //域类型
    <name>ubuntu</name>  //虚拟机的名字
    <memory>1048576</memory> //虚拟机的最大内存
    <currentMemory>524288</currentMemory> //虚拟机当前的内存
    <vcpu>2</vcpu> //该虚拟机的cpu数
    <os>
        <type>hvm</type>  //hvm表示全虚拟化
        <loader>/usr/lib/xen/boot/hvmloader</loader>  //全虚拟化的守护进程所在的位置
        <boot dev='hd'/> //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/lib64/xen/bin/qemu-dm</emulator>  //二进制模拟器设备的完整路径。
        <disk type='file' device='disk'>  //disk是用来描述磁盘的主要容器
            <driver name='file'/>
            <source file='/opt/awcloud/ubuntu/ubuntu.img'/>  //指定磁盘上文件的绝对路径
            <target dev='hda' bus='ide'/>
        </disk>
        <disk type='file' device='disk'>
            <driver name='file'/>
            <source file='/opt/awcloud/ubuntu/sdb.img'/>
            <target dev='hdb' bus='ide'/>
        </disk>
        <disk type='file' device='cdrom'>
            <driver name='file'/>
            <source file='/opt/awcloud/forest/ubuntu-10.04.3-desktop-i386.iso'/>
            <target dev='hdc' bus='ide'/>
            <readonly/>
        </disk>
        <serial type='pty'>   //定义串口
            <target port='0'/>
        </serial>
        <console type='pty'>  //console用来代表交互性的控制台
            <target port='0'/>
        </console>
        <interface type='bridge'>    //桥接设备
            <mac address='00:16:36:1e:1d:04'/> //MAC地址
            <source bridge='virbr0'/>
        </interface>
        <graphics type='vnc' autoport='yes' keymap='en-us'/>  //图形类型
        </devices>
</domain>

生成一个4G大小的空文件:dd if=/dev/zero of=./disk bs=1024 count=expr 4 \* 1024 \* 1024
修改虚拟机的启动设备:从硬盘启动;从CD启动

网络参数:

如ubuntu.xml配置文件,kvm虚拟机和xen虚拟机都只需要按照下面的模板进行配置,MAC地址是必须的,bridage的名字可能在不同的主机上是不一样,可能是virbr0,也可能是br0,但类型一定要是桥接模式就可以了


4.5 KVM虚拟机迁移

迁移命令:

virsh migrate –live<id or name> qemu+ssh://<dstip>/system tcp://<dstip>:49152

迁移完之后,本地机器可能仍是定义状态,要执行virsh undefine 清除。

4.6 存储池和存储卷的管理

4.6.1.创建 KVM主机存储池

1).创建基于文件夹(目录)的存储池

virsh pool-define-as vmware_pool --type dir --target /virhost/vmware#定义存储池vmware_pool或
virsh pool-create-as --name vmware_pool --type dir --target /virhost/vmware

创建存储池vmware_pool,类型为文件目录,/virhost/vmware,与pool-define-as结果一样

2).创建基于文件系统的存储池

virsh pool-define-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware

virsh pool-create-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware

3).查看存储池信息

virsh pool-info vmware_pool #查看存储域(池)

4).启动存储池

virsh pool-start vmware_pool #启动存储池
virsh pool-list

5)销毁存储域,取消存储池

virsh pool-destroy vmware_pool #销毁存储池
virsh pool-list --all
virsh pool-undefine vmware_pool #取消存储池的定义
virsh pool-list --all

4.6.2.创建了存储池后,就可以创建一个卷,这个卷是用来做虚拟机的硬盘

virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2#创建卷 node6.img,所在存储池为vmware_pool,容量10G,初始分配1G,文件格式类型qcow2
virsh vol-info /virhost/vmware/node6.img #查看卷信息名称: node6.img类型:文件容量: 10.00 GB分配: 136.00 KB

4.6.3.在存储卷上安装虚拟主机

virt-install --connect qemu:///system \-n node7 \-r 512 \-f /virhost/vmware/node7.img \--vnc \--os-type=linux \--os-variant=rhel6 \--vcpus=1 \--network bridge=br0 \-c /mnt/rhel-server-6.0-x86_64-dvd.iso

5. virt-install 更加复杂的例子

virt-install 参数说明:

  • –name指定虚拟机名称
  • –ram分配内存大小。
  • –vcpus分配CPU核心数,最大与实体机CPU核心数相同
  • –disk指定虚拟机镜像,size指定分配大小单位为G。
  • –network网络类型,此处用的是默认,一般用的应该是bridge桥接。可以指定两次也就是两块网卡
  • –accelerate加速
  • –cdrom指定安装镜像iso
  • –location 从ftp,http,nfs启动
  • –vnc启用VNC远程管理
  • –vncport指定VNC监控端口,默认端口为5900,端口不能重复。
  • –vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
  • –os-type=linux,windows
  • –extra-args指定额外的安装参数
  • –os-variant= [win7 vista winxp win2k8 rhel6 rhel5]
  • –force 如果有yes或者no的交互式,自动yes

5.1 建立磁盘文件

如果使用的是raw格式就不需要了,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持快照镜像,zlib磁盘压缩,AES加密等。这里使用qcow2格式

 # mkdir /opt/vms  
 # qemu-img create -f qcow2 /opt/vms/centos63-webtest.img 40G

5.2 建立虚拟机, 下面展示多种方式建立虚拟机

5.2.1 使用使用iso来安装

  # virt-install \ 
  --name=centos5 \ 
  --os-variant=RHEL5 \ 
  --ram=512 \ 
  --vcpus=1 \ 
  --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \ 
  --accelerate \ 
  --cdrom /data/iso/CentOS5.iso \ 
  --vnc --vncport=5910 \ 
  --vnclisten=0.0.0.0 \ 
  --network bridge=br0,model=virtio \ 
  --noautoconsole 

5.2.2 从http中启动,使用ks安装

 # virt-install \ 
 --name=centos63-webtest \ 
 --os-variant=RHEL6 \ 
 --ram=4096 \ 
 --vcpus=4 \ 
 --virt-type kvm  \ 
 --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \ 
 --accelerate  \ 
 --location http://192.168.130.4/centos63 \ 
 --extra-args "linux ip=192.168.73.22 netmask=255.255.255.224 gateway=192.168.73.1 ks=http://192.168.130.4/ks/xen63.ks"\ 
 --vnc --vncport=5910 \ 
 --vnclisten=0.0.0.0 \ 
 --network bridge=br0,model=virtio \ 
 --force \ 
 --noautoconsole 

5.2.3 从http安装,使用ks, 双网卡, 启用console

 # virt-install \ 
 --name=centos63-webtest \ 
 --os-variant=RHEL6 \ 
 --ram=4096 \ 
 --vcpus=4 \ 
 --virt-type kvm  \ 
 --disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \ 
 --accelerate  \ 
 --location http://111.205.130.4/centos63 \ 
 --extra-args "linux ip=59.151.73.22 netmask=255.255.255.224 gateway=59.151.73.1 ks=http://111.205.130.4/ks/xen63.ks console=ttyS0  serial" 
 --vnc --vncport=5910 --vnclisten=0.0.0.0 \ 
 --network bridge=br0,model=virtio \ 
 --network bridge=br1,model=virtio \ 
 --force \ 
 --noautoconsole 

6. 其它常用命令

6.1 virsh常见命令解释

  1. virsh进入交互模式,在该交互模式下有命令不全补全,详细帮助
    virsh # lis[tab补全]
    virsh # help list 详细帮助
  2. virsh list –all 查看虚拟机状态
  3. virsh start instanceName 虚拟机开机
  4. virsh shutdown instanceName 虚拟机关机
    需要Linux母体机电源管理
    service acpid start
  5. virsh destroy instanceName 强制关机
  6. virsh create /etc/libvirt/qemu/wintest01.xml 通过以前的配置文件创建虚拟机
  7. virsh autostart instanceName 配置自启动
  8. virsh dumpxml wintest01 > /etc/libvirt/qemu/wintest02.xml 导出配置文件
  9. virsh undefine wintest01 删除虚拟机配置文件,不会真的删除虚拟机
  10. mv /etc/libvirt/qemu/wintest02.xml /etc/libvirt/qemu/wintest01.xml
    virsh define /etc/libvirt/qemu/wintest01.xml
    重新定义虚拟机
  11. virsh edit wintest01 编辑虚拟机配置文件
  12. virsh suspend wintest01 挂起虚拟机
  13. virsh resume wintest01 恢复挂起虚拟机

6.2 虚拟机克隆

1).使用virt-manager来克隆,这个太简单了,就不演示了,需要注意的是,如果启用了VNC, 记得更改VNC的端口,否则启动会失败的,见命令方式修改VNC修改

2).使用命令克隆虚拟机

# virt-clone -o centos63_webtest -n centos63_webtest2 -f /opt/vms/centos_webtest2.img

参数说明:
-o –-original 原来实例name
-n –-name 新实例名称
-f –-file 新实例磁盘存放位置

3).如果你启用了vnc, 修改配置文件中的vnc端口,否则启动失败,配置文件为 /etc/libvirt/qemu对应实例名字的xml文件。

 # cd /etc/libvirt/qemu 
 # ls 
 # virsh edit centos63_webtest 

 <graphics type='vnc' port='5915'   ............

4).启动克隆机器 (有的Linux版本可能生成的网卡有问题,请修改 /etc/udev/rules.d/70-persistent-cd.rules, 重启虚拟机)

# virsh start centos63_webtest1

6.3 快照

快照相信大家都知道是什么意思,如果不知道,亲去补补课吧,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等。 要使用镜像功能,磁盘格式必须为qcow2。下面开始kvm虚拟机快照的过程。

1). 查看磁盘格式

# qemu-img info /opt/vms/centos63-119.22.img  
image: /opt/vms/centos63-119.22.img 
file format: qcow2 
virtual size: 40G (42949672960 bytes) 
disk size: 136K 
cluster_size: 65536

2). 如果不是qcow2需要关机转换磁盘格式,如果是请跳过

# cp centos63-119.22.img centos63-119.22.raw 
# qemu-img convert -f raw -O qcow2 centos63-119.22.raw  centos63-119.22.img 

3). 启动vm, 建立快照,以后可以恢复
# virsh start centos63-119.22
# virsh snapshot-create centos63-119.22

4). 快照位置

快照配置文件在/var/lib/libvirt/qemu/snapshot/虚拟机实例名称/下

5). 恢复快照,可以建立一些测试文件,准备恢复

先将虚拟机关闭,查看快照名称,然后恢复快照

# ls /var/lib/libvirt/qemu/snapshot/centos63-119.22 
1410341560.xml 
# virsh snapshot-revert centos63-119.22 1410341560

6). 删除快照

# qemu-img info   centos63-119.22 
    1         1410341560             228M 2014-04-08 10:26:40   00:21:38.053 
# virsh snapshot-delete centos63-119.2 1410341560

6.4 让已安装的虚拟机GuestOS支持 virsh console

virsh console vmname 可以进入到vm的console模式,但是有时只显示链接到vm,回车没有反应,这是因为guestos不支持console,下面来启用guestos的console:

Connected to domain centos63-119.22 
Escape character is ^]

1). 修改grub.conf,给内核传递参数 console=ttyS0

# vim /etc/grub.conf  
kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=25756cd7-3597-4e45-8dd 
db-79d091c6d17f rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MM 
D SYSFONT=latarcyrheb-sun16 console=ttyS0 rd_NO_LVM crashkernel=auto rhgb quiet   
rd_NO_DM

2). 在/etc/inittab中添加agetty

# echo "S0:12345:respawn:/sbin/agetty ttyS0 115200" >> /etc/inittab

3). 添加到/etc/securetty
# echo “ttyS0″ >> /etc/securetty
4). 重启GuestOS

6.5 添加网卡

线上服务器是双网卡,一个走内网,一个走外网,我们也需要虚拟机这么来工作,但是初始安装虚拟机的时候没有指定两个网卡,这样需要我们来添加一个网卡了,比如说我们已经将br1桥接到em2了,如果不会见刚开始br0桥接em1

1).通过virt-manager来添加

选中虚拟机 — Open — Details – AddHardware 选择网卡模式,mac不要重复,确定即可

2).通过命令来添加

Ⅰ使用virsh attach-interface命令为虚拟机添加网卡

# virsh attach-interface centos63-119.23 --type bridge --source br1 --model virtio

Ⅱ. 导入配置文件并覆盖原来的, 因为attach-interface添加后,只是在虚拟机中生效了,配置文件并没有改变

 # cd /etc/libvirt/qemu 
 # virsh dumpxml centos63-119.23 > centos63-119.23.xml

Ⅲ. 修改GuestOS中网卡配置文件,为另一个网卡配置IP
# cd /etc/sysconfig/network-scripts

Ⅳ. 重启网卡

6.6 硬盘扩容

原来的/opt目录随着使用,空间渐渐满了,这时候我们就需要给/opt的挂载分区扩容了,有两种情况 1. 该分区是lvm格式 2. 不是lvm格式,且不是扩展分区

1). 分区是lvm格式 这种很简单,添加一块磁盘,lvm扩容

virt-manager添加方式和添加网卡一样,不再赘述,下面是使用命令来添加

Ⅰ. 建立磁盘,并附加到虚拟机中

# virt-img create -f qcow2 10G.img 10G 
# virsh attach-disk centos63-119.23 /opt/kvm/10G.img vdb

说明:
centos63-119.23 虚拟机的名称
/opt/kvm/10G.img 附加的磁盘
vdb 添加为哪个磁盘, 也就是在guestos中的名字

Ⅱ. 导出并覆盖原来的配置文件,和网卡一样,attach后只是在虚拟机中生效

# virsh dumpxml centos63-119.23 > centos63-119.23.xml

Ⅲ. 使用lvm在线扩容,详见 http://www.cnblogs.com/cmsd/p/3964118.html

2). 分区不是lvm格式,该分区不是扩展分区, 需要关机离线扩展

Ⅰ. 新建一个磁盘,大于原来的容量,比如原来是40G,你想对某个分区扩容20G那么

 # qemu-img create -f qcow2 60G.img 60G

Ⅱ. 备份原来的磁盘,以防三长两短

# cp centos63-119.27.img centos63-119.27.img.bak

Ⅲ. 查看原来的磁盘决定扩容哪一个分区

# virt-filesystems --partitions --long -a centos63-119.27.img 
# virt-df centos63-119.27.img 

Ⅳ. 扩容GuestOS的sda2

# virt-resize --expand /dev/sda2 centos63-119.27.img 60G.img 

说明:

/dev/sda2                   扩容guestos的/dev/sda2 
centos63-119.27.img         原来的磁盘文件    
60G                         第一步建立的更大的磁盘文件

Ⅴ. 使用新磁盘启动

# mv 60G.img centos63-119.27.img 
# virsh start centos63-119.27

virt-resize其实就是将原来磁盘中的文件复制到新的文件中,讲想要扩大的分区扩大了

6.7 动态迁移

用过vSphere 或者 xenserver的都知道动态迁移,最大程度上减少宕机时间 , 比如将正在运行在A上的虚拟机不关机迁移到B上,会将原来虚拟机的内存,CPU状态等迁移到新的主机上,动态迁移需要一些条件:

  1. 该虚拟机使用共享存储,在两台主机上的位置一样 比如 A,B都讲C的 /opt/vms 挂载到了自己的/opt/vms中,A,B对nfs可读可写,虚拟机在共享存储中
  2. 目标主机最好与源主机型号一样,或者CPU支持的指令集更多
  3. 目标主机CPU,内存充足
  4. 能通过root用户ssh连接到目的主机上
  5. hostname和ip解析一致, 迁移是通过hostname的,修改/etc/hosts,可以ping通对方的Hostname

下面来迁移试试,假设上述条件都满足, nfs已经挂载,如果nfs不会请google如何建立nfs

1). 使用virt-manager来迁移
简单来说 File – Add Connect — 填写对方的ip,用户名,密码, 然后右击虚拟机,Migrate

注. 由于原来的22没有建在共享存储上,新建了一个29的虚拟机来完成迁移的,切记 hostname要和ip对应, 虚拟机存储是共享存储

2). 通过命令来动态迁移

# virsh migrate centos63-119.27 --live qemu+ssh://192.168.119.11:9741/system –unsafe 

说明:

 centos63-119.27   迁移的实例名称
 --live            动态迁移
 qemu+ssh          ssh的方式
 --unsafe          强制迁移,即使可能出现问题         

本文固定链接: http://sdnhub.cn/index.php/ubuntu-14-04-libvirt-kvm/ | 软件定义网络SDN

该日志由 sdnhub 于2015年05月23日发表在 OpenStack, 网络功能虚拟化 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: Ubuntu 14.04下libvirt管理kvm | 软件定义网络SDN
关键字: ,

Ubuntu 14.04下libvirt管理kvm:等您坐沙发呢!

发表评论

*

快捷键:Ctrl+Enter