安装配置 KVM qemu.
# 安装前需添加内核支持, 设置 qemu, libvirt 等的 USE, 开启 QEMU_USER_TARGETS and QEMU_SOFTMMU_TARGETS
root # echo 'QEMU_SOFTMMU_TARGETS="i386 x86_64"' >> /etc/portage/make.conf
root # echo 'QEMU_USER_TARGETS="i386 x86_64"' >> /etc/portage/make.conf
root # emerge --ask app-emulation/qemu app-emulation/virt-manager
# 确保iptables已安装
#Creating TUN/TAP device
root # ip tuntap add dev tap0 mode tap group kvm
root # ip link set dev tap0 up promisc on
root # ip addr add 0.0.0.0 dev tap0
#Create network bridge
root # ip link add br0 type bridge
root # ip link set br0 up
root # ip link set tap0 master br0
root # echo 0 > /sys/class/net/br0/bridge/stp_state
root # ip addr add 10.0.13.13/24 dev br0
#Packet forwarding and NAT
root # sysctl net.ipv4.conf.tap0.proxy_arp=1
root # sysctl net.ipv4.conf.wlo1.proxy_arp=1
root # sysctl net.ipv4.ip_forward=1
#防火墙设置
root # iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE
root # iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
root # iptables -A FORWARD -i br0 -o wlo1 -j ACCEPT
#Guest configuration
# -nic tap,ifname=tap0,script=no,downscript=no
#如果使用图形界面,直接使用virt-manager中的默认NAT网络,方便快捷,它的防火墙设置
root # iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE
root # iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
root # iptables -A FORWARD -i virbr0 -o wlo1 -j ACCEPT
#加入组,新加入组需要重新登陆才能生效
root # gpasswd -a tim kvm
#如果没有组,就创建组并加入组
root # groupadd libvirt
root # usermod -a -G libvirt tim
#配置/etc/libvirt/libvirtd.conf,查找下面三行并注释掉,正常情况应该默认是注释的
# unix_sock_group = "libvirt"
# unix_sock_ro_perms = "0777"
# unix_sock_rw_perms = "0770"
#配置服务开机启动
root # rc-service libvirtd start
root # rc-update add libvirtd default
root # rc-update add libvirt-guests default
# 安装edk2-ovmf
root # emerge -av edk2-ovmf
root # vim /etc/libvirt/qemu.conf
file /etc/libvirt/qemu.conf
#增加部分配置
nvram = [
"/usr/share/edk2-ovmf/OVMF_CODE.fd:/usr/share/edk2-ovmf/OVMF_VARS.fd",
"/usr/share/edk2-ovmf/OVMF_CODE.secboot.fd:/usr/share/edk2-ovmf/OVMF_VARS.fd"
]
#安装windows
#如果使用virtio,需在主机系统安装客户系统时使用virtio-win驱动,否则看不到硬盘
#如果使用spice,需在客户系统中安装spice-guest-tools驱动
# 参数转xml
root # virsh domxml-from-native qemu-argv 参数文件
# xml转参数
root # virsh domxml-to-native qemu-argv 测试.xml
#首先在虚拟机客机内部执行如下命令,把虚拟磁盘内部所有未被占用的空间用 0 字节填充,如果不同分区挂载不同位置,使用不同路径多次使用dd填充
root # dd if=/dev/zero of=/junk.dat
root # rm -rf /junk.dat
#关闭虚拟机客机,在宿主机上执行如下命令,如果有快照,快照将失效,如果虚拟磁盘太大,将会花很长时间
root # qemu-img convert -c -O qcow2 vm-db.qcow2 vm-db-new.qcow2
root # rm -rf vm-db.qcow2
root # mv vm-db-new.qcow2 vm-db.qcow2
#最好使用qemu-img 创建虚拟盘,使用ls时显示size比较正常,如果使用virt-manager创建的虚拟盘,需使用du查看真实size
root # qemu-img create -f qcow2 VM.qcow2 30G
#创建外部快照
root # virsh snapshot-create-as --domain win10 win10-SN1 --disk-only --diskspec sda,snapshot=external,file=/mnt/virtualos/KVM/images/win10-SN1.qcow2 --atomic
#查看快照
root # virsh snapshot-list win10
#使用qemu-nbd
root # modprobe nbd max_part=16
root # qemu-nbd --connect=/dev/nbd0 VM.qcow2
# 如果没分区,先分区并格式化
root # fdisk /dev/nbd0
root # mkfs.ntfs -Q -L VM /dev/nbd0p1
# 挂载
root # mount /dev/nbd0p1 /mnt/tmp
# 卸载
root # umount /mnt/tmp
root # qemu-nbd --disconnect /dev/nbd0
本文作者是一位开源理念的坚定支持者,所以本文内容遵照开源的精神发布。
无担保:本文作者不保证此文内容准确无误,亦不承担任何由于使用此文档所导致的损失。
自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。
名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。
其他作品
本文作者十分愿意与他人分享劳动成果,如果你对我的其他作品有兴趣,可以在如下位置查看现有的作品集:
Tim 作品集 [ https://tiimmm.com/ ]
联系方式
由于作者水平有限,因此不能保证此文内容准确无误。如果你发现了此文中的错误(哪怕是错别字也好),请来信指出,任何提高此文质量的建议我都将虚心接纳。
Email: tiimmm dot chen at gmail dot com
网站制作者:Author:tiimmm dot chen at gmail dot com, Welcome to email for discussion!