[3rd-Party Apps] 请教KVM虚拟机安装系统后的问题
Tofloor
poster avatar
LINUX小白菜
deepin
2025-01-20 19:58
Author

各位大佬,为什么在KVM虚拟机安装完成系统后,删除安装系统的ISO文件就会无法启动系统?因为安装光盘ISO文件都是动辄几个G的大件,比较费空间,总想删除它,在VBOX和VMWARE都可以删除的安装光盘映像,为什么在KVM中就不行呢?

Reply Favorite View the author
All Replies
观察者
deepin
2025-01-21 17:14
#1

命令行用ai优化了下,改参数就行。

先新建虚拟盘 :

qemu-img create -f qcow2 deepin25.qcow2 100G

然后的ai优化的bash脚本如下bost启动的没uefi,安装完成后cdrom里的iso地址可清空,iso删除都不影响。

#!/usr/bin/env bash

# 虚拟机名称,用于标识虚拟机进程
VM_NAME="deepin"

# 虚拟机镜像文件路径
VM_IMAGE="deepin25.qcow2"

# 虚拟机内存大小,单位为 MB
VM_MEMORY="2048M"

# 虚拟机 CPU 核心数
VM_CPUS="1"

# 每个 CPU 核心的线程数
VM_THREADS="2"

# 虚拟机显示模式,可选 "sdl" 或 "none"
DISPLAY_MODE="sdl"

# OpenGL 支持,默认为打开(如果系统不支持 OpenGL,设置为 off)
OPENGL_SUPPORT="on"

# SPICE 远程桌面端口号
SPICE_PORT="5931"

# SPICE 远程桌面监听地址
SPICE_ADDR="127.0.0.1"

# 虚拟机主机名
NET_HOSTNAME="$VM_NAME"

# 主机端口,用于转发到虚拟机的 SSH 端口(22)
NET_FWD_PORT="22221"

# 网络设备 ID
NET_ID="nic"

# 音频后端类型(spice 或 none)
AUDIO_BACKEND="spice"

# 音频设备 ID
AUDIO_ID="audio0"

# 随机数生成器设备
RNG_DEVICE="virtio-rng-pci"

# 随机数生成器后端
RNG_BACKEND="rng-random"

# 随机数生成器文件路径
RNG_FILE="/dev/urandom"

# USB 重定向设备数量
USB_REDIRECT_NUM=3

# ISO 镜像文件路径(用于安装系统)
CDROM_IMAGE="/home/debian/镜像文件/deepin-desktop-community-25-preview-amd64.iso"

# 美化输出
function log_info() {
    echo -e "\033[32m[INFO]\033[0m $1"
}

function log_error() {
    echo -e "\033[31m[ERROR]\033[0m $1" >&2
}

# 检查镜像文件是否存在
if [[ ! -f "$VM_IMAGE" ]]; then
    log_error "虚拟机镜像文件 $VM_IMAGE 不存在!"
    exit 1
fi

# 启动QEMU虚拟机
log_info "启动 $VM_NAME 虚拟机..."
/usr/bin/qemu-system-x86_64 \
    -name "$VM_NAME,process=$VM_NAME" \
    -enable-kvm \
    -machine q35,vmport=off \
    -cpu host,kvm=on \
    -smp cores=$VM_CPUS,threads=$VM_THREADS,sockets=1 \
    -m $VM_MEMORY \
    -device virtio-balloon \
    -vga none \
    -display $DISPLAY_MODE,gl=$OPENGL_SUPPORT \
    -device qxl-vga,ram_size=65536,vram_size=65536,vgamem_mb=64 \
    -audiodev $AUDIO_BACKEND,id=$AUDIO_ID \
    -device intel-hda \
    -device hda-duplex,audiodev=$AUDIO_ID \
    -rtc base=localtime,clock=host,driftfix=slew \
    -spice disable-ticketing=on,port=$SPICE_PORT,addr=$SPICE_ADDR \
    -device $RNG_DEVICE,rng=$RNG_BACKEND \
    -object $RNG_BACKEND,id=$RNG_BACKEND,filename=$RNG_FILE \
    -device qemu-xhci,id=spicepass \
    $(for i in $(seq 1 $USB_REDIRECT_NUM); do
        echo "-chardev spicevmc,id=usbredirchardev$i,name=usbredir"
        echo "-device usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i"
      done) \
    -device pci-ohci,id=smartpass \
    -device usb-ccid \
    -chardev spicevmc,id=ccid,name=smartcard \
    -device ccid-card-passthru,chardev=ccid \
    -device usb-ehci,id=input \
    -device usb-kbd,bus=input.0 \
    -k en-us \
    -device usb-tablet,bus=input.0 \
    -device virtio-net,netdev=$NET_ID \
    -netdev user,hostname=$NET_HOSTNAME,hostfwd=tcp::$NET_FWD_PORT-:22,id=$NET_ID \
    -device virtio-scsi-pci,id=scsi0 \
    -drive id=SystemDisk,format=qcow2,file=$VM_IMAGE,if=virtio \
    -display none > qemu.log 2>&1 &

# 获取 QEMU 进程的 PID
QEMU_PID=$!

# 等待 QEMU 进程启动
sleep 2

# 检查 QEMU 进程是否在运行
if ps -p $QEMU_PID > /dev/null; then
    log_info "$VM_NAME 虚拟机已成功启动。"
else
    log_error "$VM_NAME 虚拟机启动失败!"
    exit 1
fi

# 等待 QEMU 进程退出
wait $QEMU_PID
QEMU_EXIT_STATUS=$?

# 检查 QEMU 退出状态
if [[ $QEMU_EXIT_STATUS -eq 0 ]]; then
    log_info "$VM_NAME 虚拟机已正常退出。"
else
    log_error "$VM_NAME 虚拟机异常退出,状态码: $QEMU_EXIT_STATUS"
    exit 1
fi

Reply View the author
LINUX小白菜
deepin
2025-01-23 11:32
#2

谢谢大佬赐招,我试试看。

Reply View the author