vmware虚拟机中创建kvm虚拟机

yuanheci 2025年04月13日 31次浏览

vmware开启虚拟化:
https://blog.csdn.net/alwaysbefine/article/details/131277295


制作云镜像(虚机镜像)- 【openstack】qemu 制作 qcow2 云镜像(基于 debian)
https://developer.aliyun.com/article/1100811

libvirt安装部分参考:
http://www.hwoo.com/linux/debian12部署KVM.html
(别看网络配置部分)

网络配置:
创建virbr0网络接口

定义默认网络
使用 virsh 命令来定义默认网络:

sudo virsh net-define /etc/libvirt/qemu/networks/default.xml

启动默认网络

sudo virsh net-start default

设置默认网络开机自启

sudo virsh net-autostart default

image

由于创建的是NAT网络,和“宿主机“网络独立,因此可以不用在同一网段。


debian ISO镜像下载:
https://cloud.debian.org/images/cloud/


创建虚拟机示例

sudo virt-install --name debian_qijing --ram 2048 --vcpus 2 --os-type linux --os-variant rhel7 --arch=x86_64 --network network=default,model=virtio --disk path=/home/rsh/vm/debian-12.10.0.qcow2,format=qcow2 --location /home/rsh/vm/debian-12.10.0-amd64-netinst.iso --console pty,target_type=serial --graphics vnc,listen=0.0.0.0,port=6666

--graphics 可让你设定虚拟机图形界面的访问方式与相关参数,这样用户就能通过特定的远程访问协议(比如VNC)连接到虚拟机的图形界面,进而进行操作和管理。


通过下载VNC Viewer来连接到kvm虚拟机,完成安装过程。
image-1744474457838

  由于创建的是是监听所有地址,所有连接的时候填入宿主机的某个可用ip即可,端口我用的是6666。

最后做成vm镜像就可以复用了。


除了ssh连接,vnc连接外,
还可以配置virsh console连接:
需要在guest虚机中创建一个systemd服务:
/etc/systemd/system/serial-getty@ttyS0.service

[Unit]
Description=Getty on ttyS0
After=systemd-user-sessions.service plymouth-quit-wait.service
Conflicts=getty@ttyS0.service

[Service]
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 ttyS0 vt220
Type=idle
Restart=always
UtmpIdentifier=ttyS0
TTYPath=/dev/ttyS0
TTYReset=yes
TTYVHangup=yes

[Install]
WantedBy=multi-user.target

使配置生效:

systemctl daemon-reload
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

  virsh console 命令主要用于连接到虚拟机的控制台,其工作原理与串口存在紧密联系。其优点为:
  相较于使用 VNC 或者 SSH 等方式连接虚拟机,virsh console 连接的是虚拟机的串口控制台,它不需要虚拟机网络服务正常运行,在虚拟机网络出现问题或者系统初始化早期,都可以通过 virsh console 连接到虚拟机进行调试和操作。


virsh console发现reboot -f不显示启动过程,需要修改grub2参数,/etc/default/grub

关键部分:

# quiet会导致输出变少,因此要注释掉
#GRUB_CMDLINE_LINUX_DEFAULT="quiet" 
#GRUB_CMDLINE_LINUX=""
# cmdline加上串口配置
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"

# 启用 GRUB 的串口支持
GRUB_TERMINAL="serial console"
# # 配置串口参数,根据实际情况修改波特率等
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop==
1"

sudo update-grub更新
重启即可看到:
image-1744513597216


构建虚机镜像
安装磁盘镜像压缩工具:sudo apt install libguestfs-tools

压缩:

virt-sparsify --compress debian-12.10.0.qcow2  debian-12.10.0-bare.qcow2

出现/tmp磁盘空间不足警告,会导致后续压缩卡主。

root@debian:/home/rsh/vm# virt-sparsify --compress debian-12.10.0.qcow2  debian-12.10.0-bare.qcow2
virt-sparsify: warning: There may not be enough free space on /tmp.
You may need to set TMPDIR to point to a directory with more free space.

Max needed: 20.0G.  Free: 604.3M.  May need another 19.4G.

Note this is an overestimate.  If the guest disk is full of data
then not as much free space would be required.

You can ignore this warning or change it to a hard failure using the
--check-tmpdir=(ignore|continue|warn|fail) option.  See virt-sparsify(1).

设置 TMPDIR 环境变量
&emsp 可以将 TMPDIR 环境变量设置为一个有更多可用空间的目录,这样 virt-sparsify 就会使用该目录作为临时文件的存储位置。例如,如果你有一个挂载点 /data/tmp 有足够的空间,可以使用以下命令:

export TMPDIR=/home/rsh/tmpdir
virt-sparsify --compress debian-12.10.0.qcow2  debian-12.10.0-bare.qcow2

压缩成功:
image-1744519498583

运行以下脚本创建虚机镜像:
--import参数表示不进行安装过程,让 virt-install 导入已有的磁盘镜像并创建虚拟机定义。

sudo virt-install \
  --name vm_debian \
  --ram 2048 \
  --vcpus 2 \
  --os-type linux \
  --os-variant debian10 \
  --arch=x86_64 \
  --network network=default,model=virtio \
  --disk path=/home/rsh/vm/debian-12.10.0-bare.qcow2,format=qcow2 \
  --console pty,target_type=serial \
  --graphics vnc,listen=0.0.0.0,port=6666 \
  --import

创建成功:
image-1744519572658

这样就做好了我的第一个虚机镜像!