安装条件: 对于Intel的cpu,要有vmx 对于amd的cpu,要有svm
执行cat /proc/cpuinfo | grep vmx查看 (1)搭建好软件仓库之后,执行 dnf group install “Virtualization Client” “Virtualization Hypervisor” “Virtualization Tools” -y (2)virt-manager查看虚拟机 (3)systemctl enable --now libvirtd启动虚拟化服务 (4)设定虚拟化服务 选择镜像文件 输入8.0的版本 语言为英语 时区为上海 分区如下 所有设置完成进入安装界面,等待安装完成。
例:创建虚拟机中的快照node1 虚拟机中快照所在目录/var/lib/libvirt/images/test.qcow2 cd /var/lib/libvirt/images/test.qcow2然后执行ls查看 创建快照qemu-img create -f qcow2 -b test.qcow2 node1.qcow2 执行ls可以看到快照node1 快照创建完成。 例:使用快照node1 选择镜像
virt-manager #查看虚拟机 virsh list #查看运行的虚拟机 virsh list --all #列出正在运行和没有运行的虚拟机 virsh start node1 #开启虚拟机node1 virsh shutdown node1 #关闭虚拟机node1,遇到关闭不了的情况点Force Off virsh destory node1 #直接关闭虚拟机node1,等同于手动点Force Off virsh-viewer node1 #显示node1
虚拟机中硬件信息目录:/etc/libvirt/qemu/
cd /etc/libvirt/qemu/ vim test.xml
远程拷贝虚拟机的时候需要拷硬盘和硬件信息。
实验: 真机为Windows (1)
mv /var/lib/libvirt/images/test.qcow2 /mnt/ mv /etc/libvirt/qemu/test.xml /mnt/
(2)删除之前建立的虚拟机test (3)
mv /mnt/test.* /var/lib/libvirt/images/ cd /var/lib/libvirt/images/ virsh create test.xml #一次性恢复
但关闭之后test消失。若要永久恢复
virsh define test.xml #永久恢复
(1)在原有虚拟机基础上添加一块20G的硬盘,硬盘类型为SATA。 添加完成 (2)开启虚拟机,在右下角光盘图标右键进行管理,选中以下几项。 执行df可以看到镜像路径: /run/media/root/RHEL-8-0-0-BaseOS-x86_64 (3)
cd /etc/yum.repos.d/ vim fake.repo
内容为
1 [fake1] 2 name=AppStream 3 baseurl=file:///run/media/root/RHEL-8-0-0-BaseOS-x86_64/AppStream 4 gpgcheck=0 5 6 [fake2] 7 name=BaseOS 8 baseurl=file:///run/media/root/RHEL-8-0-0-BaseOS-x86_64/BaseOS 9 gpgcheck=0
(3)执行 dnf group list --hidden (4)安装虚拟化软件 dnf group install “Virtualization Client” “Virtualization Hypervisor” “Virtualization Tools” (5)开启两个服务 libvirtd 和 libvirt-guests.service systemctl enable --now libvirtd libvirt-guests.service (6)对设备进行分区,执行 fdisk /dev/sdb 然后输入两次回车,wq再回车。 (7)对上设备进行格式化,执行 mkfs.xfs /dev/sdb1 -K 挂载 mount /dev/sdb1 /var/lib/libvirt/images/ 注:此挂载为临时挂载,开机无效,临时挂载方法为 vim /etc/rc.d/rc.local输入挂载指令mount /dev/sdb1 /var/lib/libvirt/images/ 然后执行chmod a+x /etc/rc.d/rc.local
(8)对虚拟机硬件信息进程调整让虚拟机可以支持虚拟化 编辑虚拟机设置 内存大小改为4096MB
(1)完成以下设置
dnf install httpd -y systemctl disable --now firewalld systemctl enable --now httpd mkdir /var/www/html/fake umount dev/sr0 mount /dev/sr0 /var/www/html/fake chown qemu.qemu /var/lib/libvirt/images/ #恢复之前的权限
(2)安装虚拟机 进入安装界面
linux中使用虚拟化默认没有桥接模式,虚拟机配置完成启动后会生成一个接口叫vnet0。 使用的网络模式为NAT模式,并且选项里没有网桥模式。
例:在虚拟机中进行网桥网络配置 (1)网卡配置目录:/etc/sysconfig/network-scripts/ 执行cd /etc/sysconfig/network-scripts/ 然后复制一份网卡配置文件 cp ifcfg-ens160 ifcfg-br0
vim ifcfg-ens160
1 TYPE=Ethernet 2 BOOTPROTO=none 3 NAME=ens160 4 DEVICE=ens160 5 ONBOOT=yes 6 BRIDGE=br0
vim ifcfg-br0
1 TYPE=Bride 2 BOOTPROTO=none 3 IPADDR=192.168.1.4 4 NETMASK=255.255.255.0 5 NAME=br0 6 DEVICE=br0 7 ONBOOT=yes
(2)重新加载网络配置
nmcli connection reload nmcli connection down ens160 nmcli connection up ens160 nmcli connection down br0 nmcli connection up br0 nmcli connection show
执行virt-manager查看网桥,搭建成功。 (3)删除之前的虚拟机,新建一个虚拟机,网络模式默认为网桥模式 finish完成安装。
结论: 如果默认NAT模式,虚拟机的安装会连接virbr0,从virbr路由器获取ip。 如果用网桥模式,则使用br0放到物理网卡ens160,会导致主机安装时候网络获取不到ip的情况,解决方案如下。
例:使用dhcp服务给虚拟机分配ip (1)安装dhcp服务
dnf install dhcp-server -y
(2)执行
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf vim /etc/dhcp/dhcpd.conf
三处更改
6 # option definitions common to all supported networks... 7 option domain-name "fake.org"; 8 option domain-name-servers 114.114.114.114
30 subnet 192.168.1.0 netmask 255.255.255.0 { 31 range 192.168.1.0 192.168.1.40; 32 }
删除32行之后内容。
注:以上三步操作可参照dhcpd服务设置 (3)打开dhcpd服务
systemctl enable --now dhcpd
(4)此时再使用网桥的方式安装虚拟机不会报错,因为dhcp会给虚拟机分配ip
在虚拟机创建过程中每次都需要做大量硬件设定工作,那么可以考虑用脚本代替手动设定,从而简化安装过程。
例:创建虚拟机设定脚本(以利用网络源安装虚拟机为例) (1)执行cd /mnt 切换目录进行实验,执行man virt-install 查看安装虚拟机的帮助,然后执行/EXAMPLE 查找相关安装实例。 (2)编辑脚本文件vim fake.sh
#!/bin/bash virt-install \ --location http://192.168.1.4/fake \ --os-variant rhel8.0 \ --vcpus 1 \ --memory 1024 \ --disk /var/lib/libvirt/images/fake.qcow2,size=8,bus=virtio \ --name fake \ --network bridge=br0,model=virtio
(3)删除之前的虚拟机,执行脚本sh fake.sh直接创建出虚拟机fake 但是这种方法只能一次性用于建立一个名为fake的虚拟机,如何使用脚本建立多个不同名字的虚拟机?步骤如下
(1)如果我们建立一个名为test的脚本,脚本内容为echo hello wold。那么在执行sh test.sh时的效果为
此时执行sh test.sh haha 无论后面跟什么输出皆为hello world (2)test脚本内容改为echo $1保存退出之后执行sh test.sh haha则输出为haha,即脚本的输出为执行脚本指令后跟的字符。 (3)那么如果把fake.test脚本内容换做
#!/bin/bash virt-install \ #虚拟机安装命令 --location http://192.168.1.4/fake \ #指定安装源 --os-variant rhel8.0 \ #指定安装系统版本 --vcpus 1 \ #cpu核心数量 --memory 1024 \ #内存大小 --disk /var/lib/libvirt/images/$1.qcow2,size=8,bus=virtio \ #硬盘位置,硬盘大小,硬盘工作总线 --name $1 \ #虚拟机名称 --network bridge=br0,model=virtio #虚拟网卡为桥接,网卡工作模式为虚拟输入输出 #注意每一行命令和换行符“\”之前要有空格m,且换行符后不能存在字符。
(4)此时执行sh fake.sh test会新建一个名为test的虚拟机