KVM 常用命令
有一天需要安装ceph集群来看看分布式系统的性能,想找几台机器来测测,一看发现至少需要3台,突然发现自己很穷,起个虚拟机吧。
有一天需要整点危险的事情,服务器只有一台怕搞坏被集体群殴,起个虚拟机吧。
有一天需要装个操作系统看看redhat好还是ubuntu好, 起个虚拟机吧。
那就起个虚拟机吧。 怎么起? 和在window一样装个VMware或者virtualbox,然后挂上ISO。以前都是这么搞的。坏处就是慢、久、坑。还是在linux上搞好一点。
咨询一下大佬,用KVM好!
具体是参考:地址 ,图文教程,感觉还是挺良心的。
如果还是懒,参考步骤
看看你的服务器到底支不支持。
sudo apt install cpu-checker
sudo kvm-ok
me@ubuntu:~/virtual_machine$ sudo kvm-ok
[sudo] password for me:
INFO: /dev/kvm exists
KVM acceleration can be used
安装qemu工具
sudo apt-get install qemu-kvm libvirt-bin bridge-utils virtinst
#如果需要图形化管理界面:
sudo apt-get install virt-manager
部署网络
主要是为了虚拟机起来之后可以直接联网,安装各种软件方便。 也可以先跳过这一步,先部署虚拟机
参考参考地址
我选择的是网桥模式,主要是修改好配置文件之后重启网络即可。
ubuntu18.04修改文件:/etc/netplan/01-netcfg.yaml
me@ubuntu:/etc/netplan$ cat 01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
enahisic2i0:
dhcp4: yes
enahisic2i1:
dhcp4: yes
enahisic2i2:
dhcp4: yes
enahisic2i3:
dhcp4: yes
bridges:
virbr0:
interfaces: [enahisic2i0]
dhcp4: yes
addresses: [192.168.1.201/24]
gateway4: 192.168.1.2
nameservers:
addresses: [127.0.0.53]
me@ubuntu:/etc/netplan$
本人主机上有4个网口,网卡enahisic2i0上有内网IP,安装好kvm工具后会自动生成网桥virbr0,使用`ip a`可以查到,这里是把enahisic2i0加到了网桥上,这样后面加入的虚拟机也会自己挂到这个网桥上,即可和外部网络接通,这里的网关,和nameservers保持和原来主机上的一致即可。
创建一台虚拟机
可以想到:需要指定虚拟机的CPU、内存、硬盘,ISO文件等。 命令写成一行装不下,写成多行,把下面的命令保存为文件,添加执行权限,执行即可。例如我保存为install_ubuntu.sh
#!/bin/bash
#install_ubuntu.sh
sudo virt-install \
--name ubuntu_1 \
--description "ubuntu vm setup for ceph" \
--os-type linux \
--os-variant "ubuntu18.04" \
--memory 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu_1.img,bus=virtio,size=50 \
--network bridge:virbr0 \
--accelerate \
--graphics vnc,listen=0.0.0.0,keymap=en-us \
--location /home/me/ubuntu-18.04-server-arm64.iso \
--extra-args console=ttyS0
--name ubuntu_1 是虚拟机的名字,待会儿查看有多少台虚拟机时会列出来的名字,并不是虚拟机的主机名。
--os-variant "ubuntu18.04" 必须是指定的版本,可以使用命令查询osinfo-query os 如果缺少相应软件包:sudo apt install libosinfo-bin
--memory 4096指定虚拟机的内存,以M为单位,这里是4个G。也就是4*1024
--vcpus 2 指定虚拟机的CPU数量
--disk path 指定虚拟机的硬盘文件,也就是虚拟机的硬盘,大小是50G。
--network bridge:virbr0 指定链接到的网桥,请用自己主机上对应的网桥,具体参考KVM网络配置
--graphics vnc,listen=0.0.0.0,keymap=en-us 据说可以用VNC看到图形界面, 我没有图形界面环境,没研究什么意思
--extra-args console=ttyS0 指定登陆虚拟机的串口,非常重要,进入虚拟机有三种方式:SSH、VNS、串口,这里是串口的配置。
#添加执行权限
sudo chmod+x install_ubuntu.sh
#开始安装
./install_ubuntu.sh
查看当前虚拟机
virsh list -all
通过串口登录虚拟机
virsh console ubuntu_1
启动VM
virsh start ubuntu_2
停止VM,
virsh shutdown ubuntu_2
删除VM
virsh destroy ubuntu_2
virsh undefine ubuntu_2
virsh undefine ubuntu_2 --nvram
克隆VM
有时候发现一台装系统太慢了,直接复制一下多好,这个时候就可以用克隆工具完成。克隆需要虚拟机暂停运行,可以使用前面的shutdown命令停止。 克隆完成之后最好查看一下各个虚拟机的mac地址是否相同,一般现在工具可以自动生成,这样可以避免MAC地址冲突,结果就是dhcp分配的一个ip地址在两台虚拟机上变来变去。
sudo virt-clone \
--original ubuntu_1 \
--name ubuntu_7 \
--auto-clone
强烈建议确认mac地址不一样之后,在每台虚拟机里面重启网络服务,等待DHCP分配地址。由于我装的是ubuntu18.04,我的命令是如下,其他系统请自行搜索。
sudo systemctl restart systemd-networkd.serivce
查看网络信息
virsh net-list
virsh net-info default
virsh net-dhcp-leases default
添加或者卸载硬盘
搞着搞着会发现50G的硬盘可能不够用,这个时候想给虚拟机再挂一个硬盘
#主机上创建硬盘文件100G,也有其他类型的硬盘例如RAW,请自行搜索
sudo qemu-img create -f qcow2 ubuntu_vm7_disk_100G 100G
#查看创建好的镜像信息
qemu-img info ubuntu_vm7_disk_100G
#添加到虚拟机上,vdb需要是虚拟机ubuntu_7上未使用的盘符,必须制定驱动,--subdriver=qcow2,否则虚拟机里面看不到
virsh attach-disk ubuntu_7 /var/lib/libvirt/images/ubuntu_vm7_disk_100G vdb --subdriver=qcow2
#卸载可以使用detach命令
virsh detach-disk ubuntu_7 /var/lib/libvirt/images/ubuntu_vm7_disk_100G
#这个时候进入虚拟机中
virsh console ubuntu_7
#执行下面的命令就可以观察到硬盘
fdisk -l
lsblk
#可以创建文件系统
sudo mke2fs -t ext4 /dev/vdb
#挂在硬盘
mount /dev/vdb /mnt/data_disk
#其他虚拟机操作类似
virsh attach-disk ubuntu_1 /var/lib/libvirt/images/ubuntu_vm1_disk_100G vdb --subdriver=qcow2
virsh attach-disk ubuntu_2 /var/lib/libvirt/images/ubuntu_vm2_disk_100G vdb --subdriver=qcow2
virsh attach-disk ubuntu_3 /var/lib/libvirt/images/ubuntu_vm3_disk_100G vdb --subdriver=qcow2
virsh attach-disk ubuntu_4 /var/lib/libvirt/images/ubuntu_vm4_disk_100G vdb --subdriver=qcow2
virsh attach-disk ubuntu_5 /var/lib/libvirt/images/ubuntu_vm5_disk_100G vdb --subdriver=qcow2
virsh attach-disk ubuntu_6 /var/lib/libvirt/images/ubuntu_vm6_disk_100G vdb --subdriver=qcow2