KVM 指令及操作
KVM常用指令
# 查看所有虚拟机
virsh list --all
# 关闭虚拟机
virsh shutdown name
# 查看虚拟机配置
virsh dominfo kvm-1
# 开机自启
virsh autostart VM-NAME (虚拟机名)
# 取消开机自启
virsh autostart --disable VM-NAME(虚拟机名)
# 通过xml 生成虚拟机列表(需要docw2),迁移后进行恢复
virsh define name.xml
# 重启
virsh reboot snale2
# 登录
virsh console name
virsh start kvm_name //开机
virsh shutdown kvm_name //关机
virsh destroy kvm_name //强制(断电)
virsh autostart kvm_name //开机自动开机
virsh undefine kvm_name //删除虚拟机
virsh suspend kvm_name //暂停,挂起虚拟机
virsh resume kvm_name //暂停状态还原
virsh domblklist kvm_name//查看配置的磁盘文件
qemu-img info vm.qcow2 //查看vm.qcow2磁盘信
Kvm虚拟机操作
备份配置文件
# KVM 虚拟机默认的配置文件在 /etc/libvirt/qemu 目录下
ls /etc/libvirt/qemu/
# KVM 虚拟机配置文件的修改
virsh edit centos65_6244
# 备份KVM 虚拟机配置文件
mkdir /data/kvmback
virsh dumpxml snale >/data/kvmback/snale_back.xml
克隆kvm虚拟机
# 克隆一个虚拟机,克隆前需要将原虚拟机关机
virt-clone -o kvm_name1 -n kvm_name2 -f /var/lib/libvirt/images/kvm_name.img
-o old虚拟机
-n new虚拟机
-f 指定虚拟机镜像存储路劲
# 创建一个磁盘空间设置大小50G
qemu-img create -f qcow2 centos7.1_8129_129.qcow2 50G
qemu-img create -f qcow2 -o preallocation=metadata centos7.1_8129_129.qcow2 50G
修改kvm虚拟机名称
cd /etc/libvirt/qemu
mv old.xml new.xml
# 修改配置(名字) //修改磁盘名 source file也要修改,使重命名后的虚拟机和磁盘名一致
<domain type='kvm'>
<name>jcjg-db</name> //修改此处名字
……
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/jcjg-db.qcow2'/> //修改此处名字
# 删除原有虚拟机
virsh undefine oldname
# 使用现有文件创建虚拟机
cd /etc/libvirt/qemu
virsh define new.xml
#启动
virsh start newname
修改kvm虚拟机内存CPU
# 查看虚拟机配置
virsh dominfo kvm-1
# 增加虚拟机最大内存
virsh shutdown kvm-1
virsh edit kvm-1 //修改men最大内存值(kb)
# 启动虚拟机
virsh start kvm-1
# 动态修改虚拟机内存
virsh setmem kvm-1 2048M
# 动态修改虚拟机cpu
virsh setvcps kvm-1 2
kvm虚拟机静态迁移
静态迁移就是在虚拟机关机状态下,拷贝虚拟机磁盘文件与配置文件到目标主机中
# 确定虚拟机关闭状态(不关闭也可以使他挂起)
$ virsh list --all
$ virsh suspend test //挂起
# 准备迁移虚拟机,查看该虚拟机配置的磁盘文件
$ virsh domblklist fkh_v5_dev
Target Source
------------------------------------------------
vda /mnt/data/libvirt/fkh_dev.qcow2
hda -
# 导入虚拟机配置文件
$ virsh dumpxml test >new.xml
tar zcvfS fkh_v5_public.tar.gz fkh_v5_public.qcow2
tar zxvf fkh_v5_public.tar.gz
# 拷贝虚拟机配置文件和磁盘文件到目标主机上
$ scp new.xml IP:PORT
$ scp fkh_dev.qcow2 IP:PORT
# 传输方法1:
tar zcvfS fkh_v5_public.tar.gz fkh_v5_public.qcow2
scp fkh_v5_public.qcow2 IP:PORT
# 传输方法2:
scp fkh_dev.qcow2 IP:PORT
# 传输qcow2 文件过大需要压缩
# 压缩(正常方法)
qemu-img convert -c -O qcow2 fkh_v5_public_1.qcow2 fkh_v5_public.qcow2
# 定义注册虚拟机 //源和目标磁盘文件路径一样时,若不一样需修改xml
$ virsh define new.xml
# 启动虚拟机
$ virsh start new_kvm
$ virsh list --all
# 报错CPU类型不一致
# error: Failed to start domain fkh-mkbx
# error: the CPU is incompatible with host CPU: Host CPU does not provide required features: md-clear, spec-ctrl, ssbd
# 解决方法:
$ virsh capabilities
<capabilities>
<host>
<uuid>4c4c4544-0033-5910-8032-c8c04f4c4632</uuid>
<cpu>
<arch>x86_64</arch>
<model>Broadwell</model> //当前主机CPU类型
<vendor>Intel</vendor>
<microcode version='184549399'/>
# 修改xml文件的CPU类型
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>【Skylake-Server-IBRS】</model> //修改为目标主机CPU类型,注意以下三行需要删除
<feature policy='require' name='md-clear'/>
<feature policy='require' name='spec-ctrl'/>
<feature policy='require' name='ssbd'/>
</cpu>
# 重新注册并启动
$ cp xml /home //先进行备份,会删除默认路径下的xml文件
$ virsh undefine kvm
$ virsh define kvm
$ virsh start kvm
kvm虚拟机新家磁盘
# 创建新的磁盘
$ qemu-img create -f qcow2 /var/lib/libvirt/images/new.qcow2 100G
# 编辑配置xml
$ vim /etc/libvirt/qemu/test.xml
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/data/libvirt/fkh_dev.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
//复制以上6行配置,注意修改dev='vdb',新磁盘名字,卡槽名称的变动,符合16进制即可
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/data/libvirt/new.qcow2'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> //不确定卡槽名称可不写
</disk>
# 重新加载配置文件,重启虚拟机
$ virsh define test.xml
$ virsh start test
kvm虚拟机磁盘无损扩容-qcow2格式
# 关闭kvm虚拟机
virsh shutdown fkh-db
# 查看qcow2
virsh domblklist fkh-db
目标 源
------------------------------------------------
vda /var/lib/libvirt/images/fkh-db.qcow2
hda -
# 新增磁盘容量
qemu-img resize fkh-db.qcow2 +500G
# 查看磁盘变化
qemu-img info fkh-db.qcow2
# 开启虚拟机进行分区
fdisk /dev/vda
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extendedSelect (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (41943040-83886079,默认为 41943040):
将使用默认值 41943040
Last 扇区, +扇区 or +size{K,M,G} (41943040-83886079,默认为 83886079):
将使用默认值 83886079
分区 3 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
最终要的地方就是 分配新的区需要修改分区的system id,将分区类型改为LVM(Hex代码为8e)
# 刷新分区表
partprobe /dev/vda
# 创建物理卷pv
[root@localhost ~]# pvcreate /dev/vda3
Physical volume "/dev/vda3" successfully created.
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name centos
PV Size <49.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 12543
Free PE 0
Allocated PE 12543
PV UUID 2qM0yj-5veI-3mtp-csc9-qdCi-HfXI-iRebMC
"/dev/vda3" is a new physical volume of "500.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vda3
VG Name
PV Size 500.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID UMW1QC-ryDK-k2hh-Cm52-EoDh-A6DK-C3VVTD
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vda2 centos lvm2 a-- <49.00g 0
/dev/vda3 lvm2 --- 500.00g 500.00g
# 查看vg卷组名
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 0
# 扩展vg卷组
[root@localhost ~]# vgextend centos /dev/vda3
Volume group "centos" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 2 2 0 wz--n- 548.99g <500.00g
# 扩展逻辑卷
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
Size of logical volume centos/root changed from <44.00 GiB (11263 extents) to 543.99 GiB (139262 extents).
Logical volume centos/root successfully resized.
# 扩展根目录文件系统
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2883328 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=11533312, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=5631, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 11533312 to 142604288