使用 Cloud Image 快速创建虚拟机

各大 linux 发行版都会发行适用于虚拟化的镜像,这种镜像直接导入为虚拟机硬盘即可开机使用。对比传统的 ISO 镜像,Cloud Image 镜像无需安装,同时精简掉了虚拟化环境中不需要的驱动和组件,体积和启动速度极小。且默认使用串口控制台,方便在虚拟化平台中使用字符控制台,相较 vnc 控制台有着更高的传输效率和操作便捷性,同时无需为虚拟机配置虚拟显示设备,更加节省虚拟机资源。

一些发行版的 CloudImage 版镜像:
Debian:https://cloud.debian.org/images/cloud/
Ubuntu:https://cloud-images.ubuntu.com/
Rocky:https://wiki.rockylinux.org/rocky/image/#about-cloud-images

以下以 Proxmox VE 虚拟化平台为例,演示 debian 发行版虚拟机的开机过程。

# 下载通用虚拟化版 debian 12 cloudimage 镜像
wget https://cdimage.debian.org/images/cloud/bookworm/daily/latest/debian-12-genericcloud-amd64-daily.qcow2

# 定制镜像的工具
apt install libguestfs-tools

# 安装虚拟化客户机工具
virt-customize -a debian-12-genericcloud-amd64-daily.qcow2 --run-command "echo https://mirrors.ustc.edu.cn/debian > /etc/apt/mirrors/debian.list && echo https://mirrors.ustc.edu.cn/debian-security > /etc/apt/mirrors/debian-security.list"
virt-customize -a debian-12-genericcloud-amd64-daily.qcow2 --install qemu-guest-agent

# 替换开机镜像源
virt-customize -a debian-12-genericcloud-amd64-daily.qcow2 --run-command "sed -i 's@deb.debian.org@mirrors.ustc.edu.cn@g' /etc/cloud/cloud.cfg"

# 创建虚拟机,使用串口做为字符控制台
qm create 8000 --name "debian-12-cloudinit-template" --memory 16384 --cores 6 --cpu cputype=host,flags=+aes --net0 virtio,bridge=vmbr0 --ostype l26 --ide2 local-lvm:cloudinit --serial0 socket --vga serial0 --agent enabled=1

# 导入镜像为虚拟机的磁盘
qm importdisk 8000 debian-12-genericcloud-amd64-daily.qcow2 local-lvm

# 设置虚拟机磁盘控
qm set 8000 --scsihw virtio-scsi-pci --virtio0 local-lvm:vm-8000-disk-0 --boot order=virtio0

# 调整磁盘大小
qm resize 8000 virtio0 32G

# cloudinit 配置用户和 ssh 公钥
qm set 8000 --ciupgrade 0 --ipconfig0 ip=dhcp --ciuser debian --sshkeys ssh_keys.pub

# 模板化虚拟机
qm template 8000

至此虚拟机模板就创建完成。如果你不需要模板,你可以省去最后一部,就可以直接启动运行虚拟机了。

而如果你需要使用模板创建多台虚拟机,可如下操作:

qm clone 8000 301 --name dev1
qm clone 8000 302 --name dev2
qm clone 8000 303 --name dev3
qm clone 8000 304 --name dev4

启动虚拟机并进入串口字符控制台

qm start 101 && qm terminal 101

如果需要提前退出控制台,按下 Ctrl + O 即可。

下面是 ubuntu server 的例子:

# ubuntu
wget https://mirrors.ustc.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64.img

# 替换镜像源
virt-customize -a jammy-server-cloudimg-amd64.img --run-command "sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/cloud/cloud.cfg"
virt-customize -a jammy-server-cloudimg-amd64.img --run-command "sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/cloud/cloud.cfg"

# 安装虚拟化客户机工具
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent

# Proxmox VE 创建虚拟机,使用串口做为字符控制台
qm create 9000 --name "ubuntu-2004-cloudinit-template" --memory 16384 --cores 6 --cpu cputype=host,flags=+aes --net0 virtio,bridge=vmbr0 --ostype l26 --ide2 local-lvm:cloudinit --serial0 socket --vga serial0 --agent enabled=1
# 导入镜像为虚拟机的磁盘
qm importdisk 9000 jammy-server-cloudimg-amd64.img local-lvm
# 设置虚拟机磁盘控制器
qm set 9000 --scsihw virtio-scsi-pci
# 设置虚拟机磁盘
qm set 9000 --scsi0 local-lvm:vm-9000-disk-0
# 设置磁盘可启动
qm set 9000 --boot c --bootdisk scsi0
# 调整磁盘大小
qm resize 9000 scsi0 32G
# cloudinit 配置
qm set 9000 --ciupgrade 0 --ipconfig0 ip=dhcp --ciuser ubuntu --sshkeys ssh_keys.pub
# 模板化虚拟机
qm template 9000

甚至一些特殊功能的发行版和 bsd ,虽然没有专门的 cloudimage,也是可以用类似的方法安装的。

# OpenWrt
qm create 400 \
    --name "openwrt" \
    --cores 2 \
    --memory 1024 \
    --scsihw virtio-scsi-pci \
    --cpu cputype=host,flags=+aes \
    --net0 virtio,bridge=vmbr0,link_down=1 \
    --net1 virtio,bridge=vmbr1,link_down=1 \
    --ostype l26 \
    --serial0 socket \
    --vga serial0 \
    --agent enabled=1


# 导入虚拟化存储池
wget https://archive.openwrt.org/releases/23.05.2/targets/x86/64/openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz
gzip -d openwrt-23.05.2-x86-64-generic-ext4-combined.img.gz
qm importdisk 400 openwrt-23.05.2-x86-64-generic-ext4-combined.img local-lvm

# 设置虚拟机磁盘
qm set 400 --virtio0 local-lvm:vm-400-disk-0 --boot order=virtio0

# 启动虚拟机并进入串口控制台
qm start 400 && qm terminal 400

# 设置虚拟机从 0 号硬盘启动、随主机开启启动。
qm set 400 --boot order=virtio0 --onboot 1 --startup order=1,up=60
# iKuai
# 创建虚拟机
qm create 300 \
    --name "ikuai" \
    --cores 2 \
    --memory 2048 \
    --virtio0 local-lvm:1 \
    --ide2 local:iso/iKuai8_x64_3.6.5_Build202206011520.iso,media=cdrom \
    --boot order=virtio0,ide2 \
    --scsihw virtio-scsi-pci \
    --cpu cputype=host,flags=+aes \
    --net0 virtio,bridge=vmbr0,link_down=1 \
    --net1 virtio,bridge=vmbr0,link_down=1 \
    --ostype l26 \
    --serial0 socket \
    --agent enabled=1

# 爱快安装器不支持控制台,去网页 noVNC 安装后关机

# 设置虚拟机从 0 号硬盘启动、随主机开启启动。
qm set 300 --boot order=virtio0 --onboot 1 --startup order=1,up=30 --vga serial0

# 启动虚拟机并进入串口控制台
qm start 300 && qm terminal 300
# OPNSense
# 创建虚拟机
qm create 300 \
    --name "opnsense" \
    --cores 2 \
    --memory 1024 \
    --scsihw virtio-scsi-pci \
    --cpu cputype=host,flags=+aes \
    --net0 virtio,bridge=vmbr0,link_down=1 \
    --net1 virtio,bridge=vmbr1,link_down=1 \
    --ostype other \
    --serial0 socket \
    --vga serial0 \
    --agent enabled=1

# 导入虚拟化存储池
qm importdisk 300 OPNsense-22.1.2-OpenSSL-nano-amd64.img local-lvm

# 设置安装镜像为虚拟机第二块硬盘
qm set 300 --virtio0 local-lvm:vm-300-disk-0 --boot order=virtio0

# 启动虚拟机并进入串口控制台
qm start 300 && qm terminal 300

# 设置虚拟机从 0 号硬盘启动、随主机开启启动。
qm set 300 --boot order=virtio0 --onboot 1 --startup order=1,up=60
#pfSense
# 创建虚拟机
qm create 200 \
    --name "pfsense" \
    --cores 2 \
    --memory 1024 \
    --virtio0 local-lvm:8 \
    --scsihw virtio-scsi-pci \
    --cpu cputype=host,flags=+aes \
    --net0 virtio,bridge=vmbr0,link_down=1 \
    --net1 virtio,bridge=vmbr1,link_down=1 \
    --ostype other \
    --serial0 socket \
    --vga serial0 \
    --agent enabled=1

# 下载解压安装镜像
wget https://atxfiles.netgate.com/mirror/downloads/pfSense-CE-memstick-serial-2.7.2-RELEASE-amd64.img.gz
gzip -d pfSense-CE-memstick-serial-2.7.2-RELEASE-amd64.img.gz

# 导入虚拟化存储池
qm importdisk 200 pfSense-CE-memstick-serial-2.7.2-RELEASE-amd64.img local-lvm

# 设置安装镜像为虚拟机第二块硬盘
qm set 200 --virtio1 local-lvm:vm-200-disk-1 --boot order=virtio1

# 启动虚拟机并进入串口控制台
qm start 200 && qm terminal 200
# 选择 xterm 终端,把 8G 的 0 号硬盘格为 mbr ufs 安装。
# 安装完成后选择留在终端,然后手动关机。

# 设置虚拟机从 0 号硬盘启动、随主机开启启动。
qm set 200 --boot order=virtio0 --onboot 1 --startup order=1,up=60

如果你使用的不是 Proxmox VE,例如 Esxi、Vmware Workstation、Hyper-V、VirtualBox 等,你只需手动创建无硬盘的虚拟机,再将这些镜像转换为对应虚拟化平台的硬盘镜像格式即可,例如 vmdk、vhd、vdi 等。将这些硬盘镜像导入虚拟机,即可使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容