KVM 虚拟机常用管理命令
基于内核的虚拟机 Kernel-based Virtual Machine(KVM)是一种内建于 Linux® 中的开源虚拟化技术。具体而言,KVM 可帮助您将 Linux 转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。
KVM 是 Linux 的一部分。Linux 2.6.20 或更新版本包括 KVM。KVM 于 2006 年首次公布,并在一年后合并到主流 Linux 内核版本中。由于 KVM 属于现有的 Linux 代码,因此它能立即享受每一项新的 Linux 功能、修复和发展,无需进行额外工程。
1. 准备
安装 KVM 请参看:https://xie.infoq.cn/article/af423568b655968a605ed7fac
2. 常用管理命令
2.1 创建/还原
~$ virt-install --name ubuntu-vm-01 --memory 8192 --vcpus=4 --os-type linux --os-variant ubuntu20.04 --graphics vnc,password=000000,listen=::,port=5911 --network bridge=br0 --disk path=/home/ubuntu/kvm/images/ubuntu-vm-01.qcow2,size=50 --cdrom /home/ubuntu/kvm/iso/ubuntu-20.04.2-live-server-amd64.iso --debug
以上方式启动后,需要使用 VNC 客户端(如:VNC Viewer)连接到服务器的 5911 端口安装系统。下面是 console 模式安装。
参数说明:
通过已存在qcow2
镜像文件创建:
$ virt-install --name vm-ubuntu-06 --memory 8192 --vcpus=4 --os-type linux --graphics vnc,password=000000,listen=::,port=5912 --network bridge=br0 --disk path=/home/ubuntu/kvm/images/vm-ubuntu-06.qcow2,size=50 --force --import --autostart --debug
通过xml
配置文件创建,此方法不包含 qcow2 镜像文件,你需要拷贝一份镜像文件。
$cp k8s-node1.qcow2 k8s-node2.qcow2
$ virsh define vm-ubuntu.xml
记得需要先修改 xml 配置相应的参数
通过已有虚拟机克隆,克隆虚拟机时需要确保被克隆的虚拟机处于关闭或者挂起状态。
$ newname=new-vm
$ virt-clone --original=k8s-master --name=${newname} --file=/home/ubuntu/kvm/images/${newname}.qcow2
克隆参数:
克隆脚本clone.sh
:
2.2 备份
使用virsh dumpxml
导出配置文件,并复制相应的.qcow2 镜像文件。
$ virsh dumpxml vm-ubuntu-01 > ../images/vm-ubuntu-01.xml
使用virsh snapshot-create-as
创建快照:
$ virsh snapshot-create-as --domain vm-ubuntu-01 --name snap-vm-ubuntu-01 --description "vm-ubuntu-01"
快照存放路径在用户目录下:$USER/.config/libvirt/qemu/snapshot/
$ cd ~/.config/libvirt/qemu/snapshot
2.3 基本管理
使用virsh list
查看当前运行的虚拟机
~$ virsh list
Id Name State
---------------------------
3 ubuntu-vm running
查看所有的虚拟机
~$ virsh list --all
开启和关闭虚拟机
~$ virsh start ubuntu-vm #ubuntu-vm 是虚拟机名字
~$ virsh shutdown ubuntu-vm
启动所有虚拟机脚本
查看 VNC 自动端口
~$ virsh vncdisplay ubuntu-vm
进入查看虚拟机
~$ virt-viewer ubuntu-vm #ubuntu-vm 是虚拟机名字
libvirtd 启动时自动启动虚拟机
~$ virsh autostart ubuntu-vm #ubuntu-vm 是虚拟机名字
挂起/恢复虚拟机
~$ virsh suspend ubuntu-vm # 挂起虚拟机
~$ virsh resume ubuntu-vm # 恢复挂起的虚拟机
销毁虚拟机
~$ virsh undefine ubuntu-vm # 销毁拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
查看虚拟机信息
~$ virsh dominfo ubuntu-vm
软重启虚拟机
~$ virsh reboot ubuntu-vm
硬重启虚拟机
~$ virsh reset ubuntu-vm
设置虚拟机随着宿主主机开机自动启动
~$ virsh autostart ubuntu-vm
#开机自动启动的虚拟机配置文件会自动在目录/etc/libvirt/qemu/autostart/目录
禁止虚拟机开机启动
~$ virsh autostart --disable ubuntu-vm
编辑虚拟机配置文件
~$ virsh edit ubuntu-vm
#系统会提示选用哪个编辑器
2.4 快照
创建快照
$ virsh snapshot-create-as --domain vm-ubuntu --name snap-vm-ubuntu --description "vm-ubuntu snapshot" #不写 name 自动按时间生成
查看快照
$ virsh snapshot-list vm-ubuntu
回滚快照
$ virsh snapshot-revert --domain vm-ubuntu snap-vm-ubuntu #回滚名称位 snap-vm-ubuntu 的快照
$ virsh snapshot-revert --domain vm-ubuntu --current #回滚最新版快照
删除快照
$ virsh snapshot-delete --domain vm-ubuntu --snapshotname snap-vm-ubuntu
$ virsh snapshot-delete vm-ubuntu snap-vm-ubuntu
2.5 磁盘管理
2.5.1 给虚拟机添加硬盘
首先给虚拟机创建一块硬盘
$ qemu-img create -f qcow2 vm-win-04-d.qcow2 100G #创建一块 100G 的硬盘
其次关闭要添加的虚拟机
$ virsh shutdown vm-win-04
最后编辑虚拟机磁盘信息,找到 disk 节点把刚才磁盘添加进去。
$ virsh edit vm-win-04
2.5.2 给虚拟机添加光驱
编辑虚拟机磁盘信息,找到 disk 节点把光驱 ISO 文件添加进去。
$ virsh edit vm-win-04
2.5.3 给虚拟机扩容
这里以 Ubuntu 20.04 为例。
安装扩展工具
$ sudo apt install -y libguestfs-tools
进入虚拟机查看系统容量
$ df -hT
这里根目录LV
(如上:/dev/mapper/ubuntu--vg-ubuntu--lv
)容量是 24G,已经使用了 13G 了。
在物理机上查看虚拟机镜像所在位置
$ virsh edit vm-ubuntu-01
xml
配置文件如下,在/home/ubuntu/kvm/images/vm-ubuntu-01.qcow2
位置:
查看虚拟机磁盘信息
$ sudo virt-filesystems --partitions --long -a ~/kvm/images/vm-ubuntu-01.qcow2
为虚拟机创建一块新磁盘
$ qemu-img create -f qcow2 ~/kvm/images/new.qcow2 100G
将旧磁盘合并到新磁盘
$ sudo virt-resize --expand /dev/sda3 ~/kvm/images/vm-ubuntu-01.qcow2 ~/kvm/images/new.qcow2
删除旧磁盘,用合并后的磁盘替换掉原来的磁盘
$ mv -f ~/kvm/images/new.qcow2 ~/kvm/images/vm-ubuntu-01.qcow2
重启虚拟机
$ virsh start vm-ubuntu-01
进入虚拟机查看磁盘信息
$ lsblk -e 7,11
这里我们要将根目录挂载点扩容ubuntu--vg-ubuntu--lv
,VG 名称为:ubuntu-vg
,LV 名称为:ubuntu-lv
,所以查看详情命令如下:
$ sudo lvdisplay ubuntu-vg/ubuntu-lv
继续查看 VG 信息
$ sudo vgdisplay ubuntu-vg
通过 pvs 可以查看 pv 与 vg 的组成关系:
$ sudo pvs
查看 PV 信息
sudo pvdisplay /dev/vda3
扩展逻辑卷,这里的100G
为扩展到100G
,而不是在原有基础上加100G
。
$ sudo lvextend -L 100G /dev/ubuntu-vg/ubuntu-lv
如果出现磁盘不足,可使用以下命令扩展所有空余空间。
$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
扩展文件系统
$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
2.5.4 压缩磁盘空间
进入虚拟机对磁盘剩余空间写零操作到一个大文件。磁盘越大时间越长!
$ sudo dd if=/dev/zero of=/zero.dat
然后删除它
$ sudo rm /zero.dat
然后在物理机上操作关闭虚拟机
$ virsh shutdown k8s-master
在将压缩后的文件写到一个新的 qcow2 镜像文件。
$ qemu-img convert -c -O qcow2 k8s-master.qcow2 k8s-master-new.qcow2
删除旧的磁盘用新镜像替换,或者直接使用mv -f
命令。
$ rm k8s-master.new.qcow2
$ mv k8s-master-new.qcow2 k8s-master.qcow2
3. 其他管理工具
安装其他管理工具
$ sudo apt install libguestfs-tools libguestfs-xfs virt-top
virt-top
查看资源占用情况
virt-df
查看磁盘信息
virt-cat
cat 查看虚拟机中某个文件
virt-edit
编辑虚拟机中某个文件
guestmount
为虚拟机挂在磁盘
virt-ls
ls 虚拟机中的目录列表
virt-resize
磁盘扩容或缩小
版权声明: 本文为 InfoQ 作者【玏佾】的原创文章。
原文链接:【http://xie.infoq.cn/article/04ab4edccb3285c480a083cfd】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论