已测试的组合:
宿主机 | 虚拟机 |
---|---|
Debian 11 | CentOS 8, CentOS Stream 9, Debian 11/12 |
Deepin | CentOS 8 |
CentOS 8 | CentOS 8 |
¶ 下载操作系统镜像
可以在国内的镜像源下载。常用的有:
CentOS的镜像一般在镜像源的BaseOS/x86_64/iso
下面。比如CentOS 9-stream
的ISO在这里:https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/iso/
Debian后缀为DVD1的ISO可以离线安装,但是它们大多都很大。如果网络环境好的话可以考虑用netinst版本。
找到要下载的镜像后,右键该链接,点击复制链接,然后到服务器上用wget下载之即可。wget
403的话也可以尝试用curl 链接 > xxx.iso
下载。
¶ 安装qemu
Debian 12 |
¶ 检查KVM是否可用
不开KVM的话性能会很低。
grep -E 'vmx|svm' /proc/cpuinfo |
如果有输出则表示硬件有虚拟化支持。其次要检查kvm模块是否已经加载:
lsmod | grep kvm |
kvm_intel 315392 0 |
如果kvm_intel/kvm_amd、kvm模块被显示出来,则kvm模块已经加载。
如果少了模块,比如kvm_intel
,那就
modprobe kvm-intel |
如果输出
modprobe: ERROR: could not insert 'kvm_intel': Operation not supported |
就看一下dmesg里有没有错误信息:
dmesg | less |
按G翻到最后,如果有
kvm: disabled by bios |
说明要去BIOS里开启一下KVM的支持。
¶ 启动虚拟机安装操作系统
¶ 命令行安装
Centos stream 8 |
然后让普通用户使用libvirt时能使用KVM:libvirt让普通用户能用kvm
然后就可以开始安装了:
virt-install --name=centos8 --memory=1024 --vcpus=4 --osinfo detect=on,require=off --location=/home/searchstar/Downloads/CentOS-8.4.2105-x86_64-dvd1.iso --disk path=centos.img,size=100 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0" |
注意虚拟机deepin以及CentOS的-boot
后缀的镜像不能用这种方式安装,会报错:
ERROR 验证安装位置出错:Could not find an installable distribution at 'deepin-desktop-community-20.2.2-amd64.iso' |
CentOS的的-dvd1
镜像没有这个问题。安装界面:
Installation |
要把带[!]
的都处理完。不过下面写了(Processing...)
的可以按r
刷新,等它出结果。
安装好了之后会自动重启,然后就可以登录了。
¶ 使用vnc安装
¶ 创建虚拟机磁盘文件
不使用virt-install的话,要手动创建虚拟机的磁盘文件。
qemu-img create -f qcow2 centos.img 256G |
Formatting 'centos.img', fmt=qcow2 size=274877906944 cluster_size=65536 lazy_refcounts=off refcount_bits=16 |
-f
后面跟虚拟机镜像格式,支持的有:
raw: 默认格式。裸的磁盘文件。
qcow2:
最常用。支持稀疏文件、快照等。
其他:qemu还兼容其他的格式,比如VMDK, VDI, VHD(vpc), VHDX, qcow1 and
QED。
这些可以通过man qemu-img
查到。
¶ debian系
vnc=:2 可以换成其他可用端口。 |
然后就会在5902
端口(也可以换成其他可用端口)开一个vnc
server。用这里的方法连上即可:vnc通过ssh隧道连接到Linux服务器
¶ Centos 8
Centos 8比较特殊:
sudo /usr/libexec/qemu-kvm -m 4096 -enable-kvm centos.img -cdrom ~/Downloads/CentOS-8.2.2004-x86_64-minimal.iso |
VNC server running on ::1:5900 |
用这里的方法连上即可:vnc通过ssh隧道连接到Linux服务器
ctrl+alt+g
可以取消捕获。
¶ 联网
虚拟机一开始是没有网络的。
¶ virsh
virsh终端访问虚拟机并联网¶ 桥接网卡(有概率失败)
sudo apt install bridge-utils uml-utilities |
先看自己的机器的网卡编号
ip addr |
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 |
可以看到我的编号是eno1
。
由于操作网卡有可能导致连不上网,而连不上网的话服务器就失控了,所以最好是先设置一个定时重启,完成配置之后检测一下有没有网,有网则取消重启,否则就立即重启。由于操作过程有一段时间连不上网,所以需要把下面的保存为net.sh
:
set -e |
promisc
: 混杂模式(promiscuous
mode)是电脑网络中的术语。是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。
然后运行脚本
sudo bash net.sh eno1 |
奇怪的是,在我的服务器上第一次失败了,但是重启之后第二次就成功了。
然后用下面的命令重新启动虚拟机:
sudo qemu-system-x86_64 -m 4096 -enable-kvm centos.img -net nic -net tap,ifname=tap0,script=no,downscript=no |
如果虚拟机是centos的话,还需要在虚拟机中执行一下
dhclient |
才能拿到ip。
这个相当于把虚拟机桥接到外面去了。如果外面的网络要登陆才能上网的话,还需要登陆一下。
¶ NAT(有概率失败)
如果装的虚拟机没有GUI,但是外面的网络又需要在网页上登陆才能使用,那桥接就不太可行了,这时要用NAT模式,使虚拟机直接使用主机的网络。
https://wiki.qemu.org/Documentation/Networking/NAT
把下面的保存为ifup_nat.sh
!/bin/sh |
并给执行权限:
chmod +x ifup_nat.sh |
如果不给执行权限会报错(exit code 255)。
然后启动虚拟机:
sudo qemu-system-x86_64 -m 4096 -enable-kvm centos.img -net nic -net tap,script=ifup_nat.sh |
这个方法我在家里的电脑上实验成功,但是在学校的服务器上失败了,不知道为什么。
¶ 其他
¶ nographic启动
qemu-system-x86_64 nographic¶ 嵌套虚拟化
就是虚拟机里套虚拟机:
参数里添加
-enable-kvm -cpu host |
把所有宿主机CPU的特性都传下去。详情可见:
/usr/libexec/qemu-kvm -cpu help |
参考:https://www.cnblogs.com/jython/p/4458807.html
注:如果只放-enable-kvm -cpu qemu64,+vmx
,我这lsmod
里就没有kvm_intel
。
¶ centos开机自动联网
https://blog.csdn.net/u012972536/article/details/79827292
¶ UEFI启动
Debian 11:加上-bios /usr/share/ovmf/OVMF.fd
即可。
启动之后,发现/sys/firmware/efi
目录存在,说明确实是UEFI启动的。
参考:linux怎么查看操作系统是uefi启动还是bios启动?
¶ 克隆虚拟机
virt-clone --original 源虚拟机 --name 新虚拟机名字 --file 新虚拟机的磁盘文件路径 |
其好处是只会克隆磁盘文件中有效的部分,不会克隆其中为0的部分。
来源:https://www.cyberciti.biz/faq/how-to-clone-existing-kvm-virtual-machine-images-on-linux/
¶ ttyS0登录时输入用户名后卡住
这个在deepin虚拟机里更换内核之后碰到过。解决方案:
login: abort requested by PAM¶ network disk service卡住
centos虚拟机中出现过,要好几分钟才能进去,而且最终这几个服务会启动失败:
[FAILED] Failed to start System Security Services Daemon. |
其实原因和解决方案都跟上一个一样,都是这个:
login: abort requested by PAM¶ 参考文献
QEMU 1:
使用QEMU创建虚拟机
其中软件安装的部分不全,要装qemu-kvm
Can’t find
tool qemu-system-x86
qemu虚拟机与外部网络的通信
kvm
命令行安装虚拟机方法
KVM
使用 virt-install 创建虚拟机失败经历
https://askubuntu.com/questions/1225216/failed-to-connect-socket-to-var-run-libvirt-libvirt-sock
https://www.xmodulo.com/network-default-is-not-active.html