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命令获得)
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file=‘/data/p_w_picpaths/node1.img’/>              //因为只是改名,虚拟磁盘可不变
      .. ..
    </disk>
.. ..  

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>
.. ..

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  10G  -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                       关闭


#########################################################