一、目的

本文适用于指导运维人员开展自定义镜像制作工作,明确操作规范,保障镜像制作的合规性与可用性

二、镜像格式介绍

虚拟机的磁盘格式指的是底层的磁盘镜像格式,虚拟设备厂商有不同的格式来放置虚拟机磁盘镜像包含的信息。
具体可设置的格式如下面所示:

  • raw:无结构的磁盘镜像格式;如果是一个无扩展名的磁盘文件,那么这个磁盘文件可能是裸格式。
  • vhd:VHD磁盘格式,一种被VMware, Xen, Microsoft, VirtualBox, 以及其他虚拟机管理程序通用的磁盘格式。
  • vmdk:能被多钟虚拟机管理程序支持的通用格式。
  • vdi:能被 VirtualBox 虚机管理程序和 QEMU 模拟器支持的格式。
  • iso:光盘数据内容的归档格式,例如CD-ROM。
  • qcow2:由 QEMU 模拟器支持,能动态扩展以及支持写时复制特性。
  • aki:Amazon 内核镜像。
  • ari:Amazon ramdisk 镜像。
  • ami:Amazon 虚机镜像。

MStack创建虚拟机目前支持的是qcow2和raw格式镜像,由于底层是MStore存储文件系统对raw格式镜像性能支持优于qcow2格式,所以建议制作镜像为raw格式上传平台。

三、镜像制作环境准备

镜像制作的环境准备包括如下内容:

  • 本手册镜像制作环境采用Linux自带的软件工具virt-manager,需要准备一台物理机安装Linux系统,手动安装virt-manager软件包,可以安装virt-manager GUI图形化界面可更加方便制作镜像。
  • 要创建openstack镜像,需要客户机操作系统的安装CD或DVD ISO文件。
  • 需要访问虚拟化的工具。可以使用KVM或者GUI桌面虚拟化工具(如VMware Fusion,VirtualBox或virt-manager)。
  • 创建虚拟机镜像时,需要连接到虚拟机管理程序的图形控制台,该控制台充当虚拟机的显示器,并允许您使用键盘和鼠标与客户机操作系统的安装程序进行交互。
  • KVM可以使用VNC (虚拟网络计算)协议或更新的 SPICE协议公开图形控制台 。我们将在此处使用VNC协议,因为您更有可能找到可在本地桌面上运行的VNC客户端。

3.1 环境相关要求:

# 制作Rcoky、openeuler等系统镜像需要安装比较新版本的环境
系统版本: CentOS Linux release 7.9.2009 (Core)
qemu-kvm版本: QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-175.el7_9.6), Copyright (c) 2003-2008 Fabrice Bellard
Libvirt版本: libvirtd (libvirt) 4.5.0
virt-manager版本: 1.5.0
qemu-img版本: qemu-img version 1.5.3, Copyright (c) 2004-2008 Fabrice Bellard

virtio-win版本:
windows7、8102k8、2k12、2k16可使用virtio-win-0.1.141,下载地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.141-1/virtio-win-0.1.141.iso
windows2k19可使用virtio-win-0.1.164,下载地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.164-2/virtio-win-0.1.164.iso

3.2 安装GNOME Desktop、qemu、libvirt、virt-manager环境

本手册采用的是Centos系统搭建镜像制作环境,需要在该Linux系统上安装virt-manager工具,安装virt-manager之前需要先安装Linux系统的GNOME Desktop,具体操作命令如下:

# 安装GNOME Desktop命令:
yum groupinstall "X Window System" -y
yum groupinstall GNOME Desktop -y

#安装qemu、libvirt、virt-manager工具:
yum install qemu-kvm -y
ln -sv /usr/libexec/qemu-kvm /usr/bin/
yum -y install libvirt libvirt-client virt-manager virt-install virt-viewer
systemctl start libvirtd.service
systemctl status libvirtd

# 命令行输入startx进入linux图形化管理界面
startx
# 命令行输入virt-manager打开virt-manger X11 GUI 图形界面
virt-manager

3.3 virt-manager网络配置

关于virt-manager,我们这里建议直接在界面桥接到宿主机上,创建的虚拟机能够连接到外网,或者可以连接到指定的yum源,方便安装各种工具包,制作环境。

3.4 安装VNC server

Linux系统安装图形化界面之后,为了方便我们可以远程操作建议在宿主机系统上安装vncserver,以下是安装vncserver的操作步骤(命令参数详解之后会整理细致):

安装vnc-server工具包:
yum install vnc-server -y
执行命令启动vnc-server:
vncserver
更改配置文件允许VNC client端链接登录到VNC server端:
vim /root/.vnc/xstartup
在文件最后加入如下参数:
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 800x600"
执行命令重新启动vnc-server:
vncserver -kill :1
vncserver

四、镜像制作好后的操作

4.1 镜像格式转换

qemu-img convert 命令可以转换多种格式的镜像文件,包括 raw, qcow2, VDI (VirtualBox), VMDK (VMware) and VHD (Hyper-V)。

镜像格式 qemu-img参数
raw raw
qcow2 qcow2
VDI (VirtualBox) vdi
VMDK (VMware) vmdk
VHD (Hyper-V) vpc

下面示例转换 centos7.4.dsk raw格式镜像到 qcow2 镜像格式。

# qcow2raw
qemu-img convert -f qcow2 -O raw  centos7.9.qcow2 centos7.4.raw

4.2 镜像上传与镜像元数据设定

openstack image create –fil <file_name> --container-format bare --disk-format raw --property hw_qemu_guest_agent=yes --property os_distro=<image_type> --property os_admin_user=root  --public <image_name>

五、示例:Centos镜像制作

5.1.系统安装步骤(重点)

  1. 在terminal界面通过virt-manger命令启动virt-manger GUI操作界面:

    2、点击创建虚拟机,选择安装操作系统,配置CPU,内存和硬盘相关信息。
  • 点击创建虚拟机:
  • 选择加载本地镜像安装方式:
  • 选择本地安装镜像和系统版本:
  • 设置cpu和ram大小:

    设置根磁盘大小:
  • 安装系统时,勾选自定义虚拟机配置:
  • 设置系统启动从IDE虚拟光驱引导启动(点击“Apply”应用):
  • 设置该虚拟机存储disk为qcow2格式:
  • 选择光驱链接文件:
  • 选择系统键盘模式(点击“Apply”应用):
  • 开始安装:

    3.等待出现引导界面,对安装软件包和用户密码,然后等待系统安装成
    4.安装结束之后重启之前设置系统启动顺序从disk启动

    5.安装虚拟化需要的特定服务(见下一节支撑服务安装)

5.2 虚拟化支撑服务安装

1.系统基础配置:

  • 配置yum源:
    在/etc/yum.repo.d/目录下设置好自己需要的源文件
  • 关闭防火墙以及SELINUX
    systemctl stop firewalld
    systemctl disable firewalld
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    setenforce 0
  • 更改ssh配置:
    # 修改ssh配置文件
    PermitRootLogin yes
    UserDNS no    关闭ssh去解析用户端域名,加快链接速度
    systemctl restart sshd
  • 修改网卡配置信息(删除mac信息等)
    先配置成静态网络方便后续安装软件,最后再按如下要求配置
    编辑/etc/sysconfig/network-scripts/ifcfg-eth0,具体配置信息可以参考:
    TYPE=Ethernet
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    NM_CONTROLLED=no
  • 禁用zeroconf路线,允许实例访问元数据:
    echo "NOZEROCONF=yes" >> /etc/sysconfig/network
  • 设置nova console-log:
    要使nova console-log能将实例启动过程输出到实例启动日志中,需要配置相关参数,具体操作步骤如下:
    编辑/etc/default/grub文件,在参数GRUB_CMDLINE_LINUX后面加上console=tty0 console=ttyS0,115200n9:

    然后执行grub2-mkconfig -o /boot/grub2/grub.cfg命令让其配置生效:

    2.安装ACPI服务):
    为了让虚拟化层能重启和关闭虚拟机,必须在虚拟机内安装并运行 acpid 服务,在 CentOS虚拟机内运行以下命令安装 ACPI 服务并配置为系统启动时自动启动:
    yum install acpid -y
    # 设置自启动命令
    systemctl enable acpid
    3.安装linux rootfs resize
    由于在云平台上我们要根据自己的需求设置根磁盘大小,安装linux rootfs resize的作用就是使实例启动时可以自动扩展根分区大小,不然跟分区大小就会固定在制作镜像时的大小。
    yum install cloud-utils-growpart -y
    4.安装cloud-init
    虚拟机的主机名,密码和网络等相关配置需要去medata-server或者config-driver里面去获去,而完成这部分操作的就是cloud-init去完成:
    yum install cloud-init -y
    5.安装qemu-guest-agent:
    虚拟机实例需要在管理界面动态调整root用户的密码,需要安装并启用这个agent在处理这个操作,具体安装操作如下:
    yum install qemu-guest-agent -y

5.3 系统配置

5.3.1 系统设置和检查

1.删除垃圾用户和目录:

userdel    test
userdel    centos
rm –rf /home/test
rm –rf /home/centos

2.查看当前时区和时是否正确

date –R
hwclock
ll  /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同时确保 /etc/sysconfig/clock 为 ZONE=“Asia/Shanghai”
编辑 /etc/adjtime 修改最后一行为 UTC

3.设置系统密码最短长度:

grep ^PASS_MIN_LEN /etc/login.defs
vi /etc/login.defs
PASS_MIN_LEN 8

4.清空系统history记录:

history –w
echo >.history
history –c

5.在KVM管理界面关闭主机
6.拷贝虚拟机磁盘并转换格式(默认路径/var/lib/libvirt/images/)
7.上传镜像

5.3.2 cloud-init配置文件及参数参考

cloud-init配置文件具体配置:

cat /etc/cloud/cloud.cfg
users:
 - default
disable_root: 0
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys:   0
ssh_genkeytypes:  ~
syslog_fix_perms: ~
cloud_init_modules:
 - migrator
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - rsyslog
 - users-groups
 - ssh
cloud_config_modules:
 - mounts
 - locale
 - set-passwords
 - rh_subscription
 - yum-add-repo
 - package-update-upgrade-install
 - timezone
 - puppet
 - chef
 - salt-minion
 - mcollective
 - disable-ec2-metadata
 - runcmd
cloud_final_modules:
 - rightscale_userdata
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

system_info:
  default_user:
    name: root
    lock_passwd: true
    gecos: Cloud User
    groups: [wheel, adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
  distro: rhel
  paths:
    cloud_dir: /var/lib/cloud
    templates_dir: /etc/cloud/templates
  ssh_svcname: sshd

# vim:syntax=yaml
作者:束鹏  创建时间:2026-01-15 11:25
最后编辑:束鹏  更新时间:2026-01-30 09:36