kvm镜像制作Linux篇
HOST准备
-
宿主机centos 7安装:
-
物理机安装:BIOS开启虚拟化支持,详情查询机器的CPU和主板BIOS操作方式。然后在物理机安装centOS7。
-
也可以使用嵌套虚拟化(nested virtualization):在虚拟机中安装centOS 7作为宿主机。此时需要使用的第一层虚拟化软件支持虚拟化嵌套,本文后续测试是在mac OS X 安装VMware Fusion Pro进行的,要在VMware Fusion Pro中的虚拟机中使用kvm,需要在虚拟机配置中的cpu内存配置中开启虚拟化支持。
-
可以选择将图形界面一起安装,方便后面用GUI管理虚拟机。
-
后续操作,命令行均以root身份进行;图形操作普通用户登录进行。
-
-
确认虚拟化支持:
cat /proc/cpuinfo | egrep 'vmx|svm'
,有返回说明已经支持虚拟化。 -
关闭selinux:在
/etc/sysconfig/selinux
中设置SELinux=disabled
-
关闭防火墙:
systemctl stop firewalld.service
禁止防火墙自启动:systemctl disable firewalld.service
宿主机安装KVM
-
确认宿主机正常连接外网,yum可以正常使用
-
安装核心组件
yum -y install qemu-kvm libvirt virt-install reboot
-
验证安装情况
lsmod | grep kvm # 应看到类似下面的结果,说明已经加载了kvm相关模块 #kvm_intel 162153 0 #kvm 525259 1 kvm_intel
-
启动并设置开启自启
systemctl start libvirtd systemctl enable libvirtd systemctl status libvirtd
网络配置
NAT方式
-
默认kvm在宿主机上已经自动配置了NAT网络,guest可以比较轻松地启用NAT获取IP、DNS、网关等,正常访问外网。
-
在宿主机上列出网络
virsh net-list
,确认default网络已经正常启动 -
在虚拟机中编辑
/etc/sysconfig/network-scripts/ifcfg-eth0
,将onboot修改为yes,重启后虚拟机即可正常使用NAT访问网络。 -
NAT网络中外部无法直接访问虚拟机,如果虚拟机作为服务器端使用,则应该使用下面的桥接方式联网。
桥接方式
-
配置桥接有两种方式:使用brctl命令或直接编辑interface文件,本文将直接编辑interface文件。
-
由于有冲突,需要关闭并彻底禁用network manager:
systemctl stop NetworkManager
禁用自启动systemctl disable NetworkManager
-
新建桥接网络接口
/etc/sysconfig/network-scripts/ifcfg-br0
,默认使用dhcp自动获取ip,宿主机如果需要静态ip,将第7行注释,后面取消注释即可。# 注意Bridge首字母必须大写 TYPE=Bridge NAME=br0 DEVICE=br0 ONBOOT=yes # 使用dhcp自动获取ip BOOTPROTO=dhcp # 或者设置静态ip #BOOTPROTO=static #IPADDR=172.16.189.11 #静态IP #GATEWAY=172.16.189.2 #默认网关 #NETMASK=255.255.255.0 #子网掩码 #DNS1=172.16.189.2 #DNS 配置
-
修改默认网络接口
/etc/sysconfig/network-scripts/ens33
(ens33命名根据硬件不同可能改变),增加将其桥接到br0的配置。# 以下是安装完centos后默认的网络配置 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=8b0d0674-d09f-4070-a9b2-6be2e4676d7a DEVICE=ens33 ONBOOT=yes IPV6_PRIVACY=no # 上面无需修改,增加下面这行即可 BRIDGE=br0
-
重启网络服务
service network restart
或者直接重启机器reboot
,然后用ifconfig
验证br0成功获取正确的ip地址,且网络访问正常
KVM虚拟机新建&安装操作系统
-
参考其他文档建议修改语言设置为英文,避免安装过程报错:修改
/etc/locale.conf
为LANG="en_US.UTF-8"
-
准备镜像文件和虚拟磁盘目录
- guest同样安装centos7,将iso镜像放到
/home/CentOS-7-x86_64-DVD-1908.iso
,设置权限644和归属qemu:qemu - 创建
/home/vms
目录用于存放虚拟机的虚拟磁盘
- guest同样安装centos7,将iso镜像放到
-
命令行下开始安装
# location即为iso文件的路径,disk的path即为虚拟机磁盘的路径 virt-install \ --name=centos1 \ --vcpus=2 \ --memory=1024 \ --location=/home/vms/CentOS-7-x86_64-DVD-2003.iso \ --disk path=/home/vms/centos1.qcow2,size=8,format=qcow2 \ --graphics none \ --extra-args='console=ttyS0' \ --force # 注意:常见错误为iso文件、磁盘文件的权限问题,如有相关报错,调整目录位置或放宽权限即可解决。
-
安装配置
像正常安装操作系统一样,接下来会进入如下界面,需要对安装细节进行手工配置,根据提示配置即可。感叹号标记的需要手工配置的。
Installation 1) [x] Language settings 2) [!] Timezone settings (English (United States)) (Timezone is not set.) 3) [!] Installation source 4) [!] Software selection (Processing...) (Processing...) 5) [!] Installation Destination 6) [x] Kdump (No disks selected) (Kdump is enabled) 7) [ ] Network configuration 8) [!] Root password (Not connected) (Password is not set.) 9) [!] User creation (No user will be created) Please make your choice from above ['q' to quit | 'b' to begin installation | 'r' to refresh]:
-
完成安装,会启动并进入guest操作系统,下面是熟悉的centos登陆界面。
-
在宿主机
virsh list
列出刚安装的虚拟机 -
可以在宿主机使用virsh命令对虚拟机进行各种管理操作,比如以下命令
virsh list --all # 查看所有运行和没有运行的虚拟机 virsh list # 查看在运行的虚拟机 virsh dumpxml vm-name # 查看kvm虚拟机配置文件 virsh start vm-name # 启动kvm虚拟机 virsh shutdown vm-name # 正常关机 virsh destroy vm-name # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源) virsh undefine vm-name # 删除vm的配置文件 ls /etc/libvirt/qemu # 查看删除结果,Centos-6.6的配置文件被删除,但磁盘文件不会被删除 virsh define file-name.xml # 根据配置文件定义虚拟机 virsh suspend vm-name # 挂起,终止 virsh resumed vm-name # 恢复被挂起的虚拟机 virsh autostart vm-name # 开机自启动vm virsh console <虚拟机名称> # 连接虚拟机
导出磁盘镜像
-
如果磁盘使用较少,操作历史不多,可以直接使用该命令压缩导出磁盘
# 使用该方法可以压缩磁盘体积 qemu-img convert -c -O qcow2 old.qcow2 new.qcow2
-
如果磁盘使用时间较长,操作历史较多,可以先用下面的方法对磁盘延迟置零的部分手工置零。然后再用上面的命令导出,可减小导出的体积
#创建一个全0的大文件,占满所有的剩余磁盘空间,需要很久时间 dd if=/dev/zero of=/null.dat #删除这个文件 rm -f /null.dat
导入外部虚拟机
实验逻辑:基于已有的centos1虚拟机,复制其qcow2磁盘和虚拟机配置文件,对虚拟机配置稍作修改后模拟为新的虚拟机centos2导入。
-
准备磁盘文件和虚拟机配置文件
cp centos1.qcow2 centos2.qcow2 # 将centos1的虚拟机配置导出为xml文件作为模板 virsh dumpxml centos1 > 2.xml
-
修改2.xml避免和centos1重复,主要修改名称,UUID,磁盘路径和网卡MAC地址。其中 UUID 在 Linux 下可以使用
uuidgen
命令生成。名称及uuid:
磁盘路径:
网卡MAC地址
-
导入虚拟机
virsh define 2.xml
-
查看&启动
图形化管理
-
安装组件
yum install -y virt-manager
-
启动组件:在桌面端登陆后可以看到虚拟系统管理器,启动即可进行各种可视化操作。或者在终端运行
virt-manager
亦可。 -
图形化管理方式和常用的vmware等桌面端软件类似,除基本的启动停止,虚拟机配置外,也支持克隆、导入、快照等功能。
参考
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。