KVM虚拟化的命令行管理

LVM逻辑卷在虚拟机存储中的应用


一:virsh 命令工具的基本操作


virsh //直接进交互模式

virsh  nodeinfo   //查看KVM节点(服务器)信息

virsh  list   //列出正在运行的虚拟机

virsh  list  --all   //列出所有虚拟机(包括未启动的)

virsh  dominfo  虚拟机名称   //查看指定虚拟机的信息

virsh  start  虚拟机名称   //将指定的虚拟机开机

virsh  reboot  虚拟机名称   //将指定的虚拟机重启

virsh  shutdown  虚拟机名称   //将指定的虚拟机正常关机

virsh  destroy  虚拟机名称   //将指定的虚拟机强制关机(相当于拔电源)

virsh  autostart  虚拟机名称   //将指定的虚拟机设置随KVM自动开机

virsh  autostart  --disable  虚拟机名称   //将指定的虚拟机设置不随KVM自动开机



二:使用虚拟机的XML描述文件


1. 为已有的虚拟机改名


1)导出虚拟机 rh6_n1 的XML描述信息,保存为 new.xml 文件

[root@kvmsvr ~]# virsh  dumpxml  rh6_n1  >  new.xml


2)修改 new.xml

[root@kvmsvr ~]# vim  new.xml

<domain type='kvm' id='1'>

  <name>rhel6_node1</name>   //修改为新的虚拟机名称

  <uuid>c33a4aad-c555-48b3-a0a9-893ad0b4775e</uuid>   //修改UUID值(可执行uuidgen命令获得)

.. ..  


3)根据 new.xml 建立新的虚拟机

[root@kvmsvr ~]# virsh  define  new.xml 

定义域 rhel6_node1(从 new.xml)


[root@kvmsvr ~]# virsh  list  --all

 Id    名称                         状态

----------------------------------------------------

 1     rh6_n1                         启用

 -     rhel6_node1                    关闭



4)删除原虚拟机的 XML 描述

[root@kvmsvr ~]# virsh  destroy  rh6_n1   //强制关机

域 rh6_n1 被删除


[root@kvmsvr ~]# virsh  undefine  rh6_n1   //删除虚拟机定义

域 rh6_n1 已经被取消定义


[root@kvmsvr ~]# virsh  list  --all   //确认删除结果

 Id    名称                         状态

----------------------------------------------------

 -     rhel6_node1                    关闭



2. 复制虚拟机


1)导出虚拟机 rhel6_node1 的XML描述信息,保存为 rh6_n2.xml 文件

[root@kvmsvr ~]# virsh  dumpxml  rhel6_node1  >  rh6_n2.xml


2)修改 rh6_n2.xml

[root@kvmsvr ~]# vim  rh6_n2.xml

<domain type='kvm' id='1'>

  <name>rh6_n2</name>       //修改为新的虚拟机名称

  <uuid>c33a4aad-c555-48b3-a0a9-893ad0b4775e</uuid>   //修改UUID值(可执行uuidgen命令获得)

    <disk type='file' device='disk'>

      <driver name='qemu' type='raw' cache='none'/>

      <source file=‘/data/p_w_picpaths/node2.img’/>           //因为复制,应改用其他虚拟磁盘      .. ..

    </disk>

.. ..

    <interface type='network'>

      <mac address='52:54:00:56:77:88'/> //修改网卡的MAC地址

.. .. 


3)复制虚拟机 rhel6_node1 的磁盘文件

[root@kvmsvr ~]# cp  -p  /data/p_w_picpaths/node1.img  /data/p_w_picpaths/node2.img


4)根据 rh6_n2.xml 建立新的虚拟机

[root@kvmsvr ~]# virsh  define  rh6_n2.xml 

定义域 rh6_n2(从 rh6_n2.xml)



三:访问虚拟机窗口、虚拟机克隆


1. virt-viewer  虚拟机名称   //与 virt-manager 管理方式基本一样


2. virt-clone  -o  模板虚拟机  -n  新虚拟机名称  -f 克隆后的虚拟机磁盘路径




四:LVM快照的创建、使用、验证


1. 建立测试LV、格式化、挂载,写入数据

[root@kvmsvr ~]# lvcreate  -L  200MB  -n  lvsrc  vg_data

[root@kvmsvr ~]# mkfs.ext4  /dev/vg_data/lvsrc

[root@kvmsvr ~]# mount  /dev/vg_data/lvsrc  /mnt/lvsrc

[root@kvmsvr ~]# dd  if=/dev/zero  of=/mnt/lvsrc/file1  bs=1M  count=100


2. 建立快照LV、挂载及访问

[root@kvmsvr ~]# lvcreate  -L  50M  -n  lvsnap  -s  /dev/vg_data/lvsrc

[root@kvmsvr ~]# mount  /dev/vg_data/lvsnap  /mnt/lvsnap

[root@kvmsvr ~]# df  -hT  |  grep  lvs

/dev/mapper/vg_data-lvsrc   ext4     194M  106M   79M  58% /mnt/lvsrc

/dev/mapper/vg_data-lvsnap  ext4     194M  106M   79M  58% /mnt/lvsnap


3. 快照卷的崩溃验证(可用空间耗尽)、快速重建

[root@kvmsvr ~]# dd  if=/dev/zero  of=/mnt/lvsnap/file2  bs=1M  count=60

dd: 正在写入"/mnt/lvsnap/file2": 只读文件系统

.. ..

45703168字节(46 MB)已复制,0.164632 秒,278 MB/秒


Message from syslogd@localhost at Jun 23 18:12:52 ...

 kernel:journal commit I/O error   //快照卷已崩溃


[root@kvmsvr ~]# lvremove  /dev/vg_data/lvsnap     //删除崩溃的快照卷


[root@kvmsvr ~]# lvcreate   -L   200M  -n   lvsnap   -s   /dev/vg_data/lvsrc

    //重建快照卷



五:从命令行创建虚拟机(建模板机)


1. 为虚拟机准备磁盘(逻辑卷)

[root@kvmsvr ~]# lvcreate  -L  20G  -n  lv_node1  vg_data

.. ..


2. 创建新的虚拟机,并从命令行安装RHEL 6.5系统(PXE方式)

[root@kvmsvr ~]# virt-install \

--name node1  --vcpus=1  --ram=1024  \

--disk path=/dev/vg_data/lv_node1 \

--network  network=network1   --pxe


    !!!! 详细可参考 man  virt-install 手册页

    !!!! 对于非PXE安装,应改用 --location=安装源URL


3. 初始化模板虚拟机,关机备用(平时应闲置)

[root@localhost ~]# touch  /.unconfigured

.. ..   //下次开机后会要求重设键盘、时区、root口令、网络等信息


[root@localhost ~]# shutdown  -h  now





六:利用LVM快照技术快速建新虚拟机


1. 根据模板机的 LV 建立快照卷

[root@kvmsvr ~]# lvcreate  -s  -n  rh6_snap1 -L 10G /dev/vg_data/lv_node1

  Logical volume "rh6_snap1" created


2. 导出模板机的XML描述,并修改为新虚拟机的定义(新名称、新UUID、新磁盘设备)

[root@kvmsvr ~]# virsh  dumpxml  node1  >  rh6_snap1.xml

[root@kvmsvr ~]# vim rh6muban.xml

  <name>rh6_snap1</name>         //修改名称

  <uuid>a990f28e-4adc-14bc-9fcf-7353877d5c27</uuid>   //修改UUID

  <source dev=‘/dev/vg_data/rh6_snap1’/>           //修改磁盘路径

  <mac address='52:54:00:72:bb:cc'/>   //修改网卡MAC地址

  .. ..


3. 建立新的虚拟机

[root@kvmsvr ~]# virsh  define  rh6_snap1.xml   //导入

定义域 rh6_snap1(从 rh6_snap1.xml)

[root@kvmsvr ~]# virsh  list  --all   //确认结果

.. ..

-     rh6_snap1                       关闭