
手上正好有台老笔记本想跑个轻量的Linux环境做实验又不想双系统来回重启折腾直接用虚拟机镜像装 AnolisOS 是最省事的方案。相比从ISO一步步点安装向导镜像安装说白了就是“拿来即用”——别人已经把系统装好、调优过你只需要导入虚拟化平台配置一下资源开机就能进系统。这篇东西我按自己实操的路径整理覆盖镜像格式选型、VirtualBox和KVM两种主流导入方式、cloud-init初始化逻辑、常见启动故障排查以及装完后的国内源加速配置尽量把那些文档里不会写的坑也一块儿交代清楚。不管你是想本地快速体验龙蜥还是准备在服务端批量交付虚拟机这套流程都能直接抄作业。1. 动手前先想清楚为什么用虚拟机镜像而不是ISO安装1.1 虚拟机镜像和ISO安装的本质区别很多刚接触虚拟化的朋友会混淆两个概念ISO安装镜像和虚拟机磁盘镜像。ISO是系统的“安装介质”它里面是一套引导程序加软件包仓库安装过程要分区、格式化、写引导、装软件一套流程走下来快则十几分钟慢则半小时。虚拟机镜像则是已经安装并配置好的“磁盘”你把这块磁盘挂到虚拟机里它就是一个完整的系统开机即用。AnolisOS 官方提供的虚拟机镜像主要面向云环境和虚拟化场景默认开启了cloud-init内置了针对虚拟化平台优化的内核参数和驱动。这意味着你不需要自己处理virtio驱动、不需要手动配置网络如果用了cloud-init也不需要担心引导程序写错。我自己在本地测试环境里从下载镜像到系统可登录最快的一次只用了三分多钟这个效率在批量交付场景下非常可观。1.2 不同虚拟化平台的镜像格式怎么选虚拟机镜像不是只有一个格式不同虚拟化平台对磁盘文件的封装方式不同。AnolisOS 官方主要提供 qcow2 格式这是 QEMU/KVM 生态的标准镜像格式支持写时复制Copy-on-Write、快照和压缩磁盘占用小功能强。但如果你用的是 VirtualBox 或 VMware原生支持的是 vdi/vmdk 格式这就需要做一次格式转换。虚拟化平台推荐镜像格式转换命令备注KVM/libvirtqcow2无需转换功能最全支持快照和稀疏文件Proxmox VEqcow2无需转换可直接导入为虚拟机磁盘VirtualBoxvdi用 qemu-img convert也可以用 VBoxManage convertfromrawVMware Workstationvmdk用 qemu-img convert注意选择 vmdk 动态分配模式XCP-ng / XenServervhd/vhdx用 qemu-img convert需要额外安装 qemu-img一个特别容易踩的坑VirtualBox 虽然能识别 qcow2 格式新版 VBox 支持直接挂载 qcow2但功能不完整快照和高级特性受限。如果你只是跑个测试机无所谓但要长期使用或做实验还是转成 vdi 更稳。1.3 镜像下载渠道与校验AnolisOS 镜像可以从龙蜥社区官网和镜像站下载。官方站点是 openanolis.cn镜像站有多个国内镜像源可用比如 mirrors.openanolis.cn、阿里云镜像站等。建议优先选离你近的镜像站速度差距非常大——我在家里下载官方站点的镜像速度只有几百KB/s切到阿里云镜像站直接跑满宽带。下载完镜像后一定要校验SHA256。官方镜像站会提供对应的 checksum 文件Linux下用 sha256sumWindows下可以用 PowerShell 的 Get-FileHash。这一步不是走形式我就遇到过下载不完全导致虚拟机启动时引导报错的情况排查了半天最后发现是镜像文件损坏。花十秒钟校验一下能省掉后面好几个小时的排错时间。2. 核心前置准备镜像选型与平台规划2.1 镜像格式详解qcow2、raw与vmdk的取舍很多人问为什么不直接用 raw 格式raw 是最原始的磁盘镜像性能理论上最好但不支持快照而且文件有多大就占多大空间。qcow2 的好处是“用多少占多少”加上支持快照对开发和测试场景几乎是最优解。AnolisOS 官方云镜像默认就是 qcow2这也符合云原生场景的使用习惯。如果你要跑服务端虚拟机、做批量交付优先选 qcow2。如果跑桌面环境、要做性能基准测试可以考虑转成 raw 或直接在虚拟化平台上使用 raw 格式。vmware 场景下 vmdk 是绕不开的选择这时候 qemu-img convert 是必须掌握的工具。转换本身不复杂但有个细节转换后建议用 qemu-img check 验证文件完整性避免转换过程中出现未知问题。2.2 服务端场景KVM/libvirt 方案在Linux服务器上跑虚拟机主流方案就是 KVM libvirt。AnolisOS 本身对 KVM 虚拟化支持做得比较完善装好相关软件包后可以直接使用 virt-install 命令创建虚拟机。相比桌面虚拟化KVM 方案更轻量、更稳定也更贴近生产环境。KVM方案的优势在于性能损耗极低接近物理机支持嵌套虚拟化可以虚拟机里再跑虚拟机通过 virsh 命令可以全生命周期管理与 cloud-init 配合可以实现无人值守交付2.3 桌面场景VirtualBox/VMware 方案本地跑测试机我自己的习惯是 VirtualBox 优先原因很简单免费、跨平台、对新手友好。VirtualBox 支持导入多种镜像格式虽然对 qcow2 的支持有限而且图形化操作界面直观不需要记命令。如果你公司有 VMware Workstation 的授权用 VMware 也没问题它的磁盘性能和图形加速稍微好一点。但要注意 VMware 对 qcow2 的支持更差必须转成 vmdk 格式才能导入。格式转换不是难事但你要提前规划好存储空间vmdk 动态分配的情况下实际占用是按需增长的但转换过程中临时文件可能会占不少空间。2.4 下载与校验实操以官方镜像站为例下载 AnolisOS 8 云镜像的命令大致如下实际路径以镜像站目录为准# 以 x86_64 架构为例 wget https://mirrors.openanolis.cn/anolis/8/cloud/x86_64/AnolisOS-8.8_x86_64.qcow2 wget https://mirrors.openanolis.cn/anolis/8/cloud/x86_64/AnolisOS-8.8_x86_64.qcow2.sha256 # 校验文件完整性 sha256sum -c AnolisOS-8.8_x86_64.qcow2.sha256如果输出OK说明文件完整可以继续。如果有错误建议删掉重新下载。镜像站路径可能随版本变化如果 404 就去目录列表里找最新版本。AnolisOS 8 的云镜像命名一般包含版本号、架构和格式信息看清楚再下载特别是注意区分 x86_64 和 aarch64拿错架构的镜像启动时会直接报错。3. 完整实操从导入镜像到系统跑起来3.1 用 VirtualBox 导入并安装 AnolisOS 虚拟机先说明一点VirtualBox 对 qcow2 格式的支持有限建议先用 qemu-img 把 qcow2 转成 vdi再导入 VirtualBox。步骤分两部分。第一步镜像格式转换。qemu-img 工具在Linux下一般包含在 qemu-utils 包里安装方式sudo apt install qemu-utils # Debian/Ubuntu sudo yum install qemu-img # AnolisOS/CentOS/RHEL转换命令qemu-img convert -f qcow2 -O vdi AnolisOS-8.8_x86_64.qcow2 AnolisOS-8.8_x86_64.vdi转换过程耗时看磁盘性能一般需要几分钟到十几分钟。转换完成后用qemu-img info查看转换结果。第二步创建虚拟机并挂载磁盘。在 VirtualBox 里点“新建”名称填 anolis-test类型选 Linux版本选 Red Hat (64-bit)内存按需分配测试机 2~4GB 够用处理器核心数给 2~4 个。到“虚拟硬盘”这步时选择“使用已有的虚拟硬盘文件”然后选中刚才转换好的 vdi 文件。有个坑要重点说创建完虚拟机后进“设置 - 系统 - 处理器”把“启用 PAE/NX”勾上部分 AnolisOS 内核如果没有 PAE 支持启动可能报错。另外在“设置 - 存储 - 控制器”里确认磁盘控制器类型是 SATA 或 IDE不要选 NVMe因为 AnolisOS 8 的默认内核可能没有加载 nvme 驱动取决于云镜像的内核配置。3.2 用 KVM/libvirt 导入并启动虚拟机服务端场景下KVM 是更专业的选择。AnolisOS 自己就是 Linux 发行版跑 KVM 轻车熟路。先在宿主机上安装必要组件sudo yum install -y qemu-kvm libvirt virt-install bridge-utils qemu-img sudo systemctl enable --now libvirtd确认 KVM 模块已加载lsmod | grep kvm输出里应该有 kvm_intelIntel CPU或 kvm_amdAMD CPU。如果什么都没有说明硬件虚拟化没开要去 BIOS 里打开 VT-x/AMD-V。下面用 virt-install 从 qcow2 镜像直接创建并导入虚拟机sudo virt-install \ --name anolis-test \ --memory 4096 \ --vcpus 4 \ --disk path/data/vms/AnolisOS-8.8_x86_64.qcow2,formatqcow2,busvirtio \ --import \ --os-variant rhel8.0 \ --network networkdefault,modelvirtio \ --graphics vnc,listen0.0.0.0 \ --noautoconsole参数说明--import表示从已有磁盘镜像启动不执行安装流程--os-variant指定系统类型AnolisOS 8 与 RHEL 8 兼容用 rhel8.0 即可--network networkdefault使用 libvirt 默认 NAT 网络--graphics vnc开启 VNC 图形访问方便看系统启动过程这步要注意磁盘路径确保 qcow2 文件所在目录对 qemu 用户有读写权限否则启动时会报权限错误。3.3 系统登录方式与初始账号处理AnolisOS 官方云镜像默认的账号密码策略和普通 ISO 安装不太一样。云镜像通常内置了 cloud-user 用户密码为空或需要第一次登录时设置。如果你用 VNC 或 virt-manager 打开虚拟机控制台一般会看到 cloud-init 的初始化界面它会根据你配置的 cloud-init 数据设置密码或注入 SSH 公钥。最简单的方式有两种第一种不用 cloud-init 直接登录。用 virt-manager 打开控制台如果系统直接停在登录提示符尝试用 root / anolis 或者 cloud-user / cloud-user 这类默认凭证登录。不同版本默认密码不同官方文档里有说明。登录不上的话看下面的 cloud-init 方法。第二种配置 cloud-init 注入密码。在宿主机的/tmp/cloud-init目录下创建一个 user-data 文件#cloud-config password: anolis123 chpasswd: expire: false ssh_pwauth: true然后用cloud-localds工具生成 seed 镜像sudo yum install -y cloud-utils cloud-localds /data/vms/seed.img /tmp/cloud-init/user-data创建虚拟机时把这个 seed.img 作为第二块磁盘挂上sudo virt-install \ --name anolis-test \ --memory 4096 \ --vcpus 4 \ --disk path/data/vms/AnolisOS-8.8_x86_64.qcow2,formatqcow2,busvirtio \ --disk path/data/vms/seed.img,devicecdrom \ --import \ --os-variant rhel8.0 \ --network networkdefault,modelvirtio \ --graphics vnc,listen0.0.0.0 \ --noautoconsole系统启动后 cloud-init 会自动读取 seed.img 里的配置设置 root 密码和允许 SSH 密码登录。这是目前最省事的方式也是生产环境批量交付的标准做法。3.4 cloud-init 初始化逻辑与网络配置cloud-init 是理解镜像安装的钥匙。它本质上是“系统第一次开机时的一次性配置工具”负责处理用户数据、设置主机名、配置网络、写入 SSH 密钥、扩展根分区等任务。AnolisOS 云镜像默认集成了 cloud-init所以导入镜像后第一次启动时它会自动执行初始化流程。常见的坑是不少人在本地测试时没配 cloud-init 数据结果系统启动后卡在登录界面或者网络没起来。原因是云镜像默认没有开启 DHCP 之外的静态网络配置如果虚拟化平台的 NAT 网络没有向虚拟机下发 DHCP 租约网卡就起不来。如果你的虚拟化平台支持 DHCPVirtualBox 的 NAT 网络和 KVM 的 default 网络都支持那系统启动后一般会自动获取 IP。用virsh domifaddr anolis-test可以查看虚拟机的 IP 地址需要先启动虚拟机。如果没有 DHCP你可能需要在 cloud-init 配置里指定静态 IP或者登录系统后手动配置网络。3.5 资源规格与磁盘扩容镜像默认的根分区大小是有限的AnolisOS 官方云镜像默认根分区约 10GB 左右测试环境下可能够用但如果你计划装比较多的软件或跑容器后面肯定要扩容。扩容分两种第一种是磁盘文件太小需要先把镜像文件本身扩大第二种是文件够大但分区没占满。第一种用 qemu-img resizqemu-img resize AnolisOS-8.8_x86_64.qcow2 50G然后进入虚拟机系统用growpart和resize2fs或者 xfs_growfs扩展分区和文件系统# 先看分区结构 lsblk # 扩展分区假设根分区是 vda1 sudo growpart /dev/vda 1 # 如果文件系统是 xfs sudo xfs_growfs / # 如果文件系统是 ext4 sudo resize2fs /dev/vda1注意AnolisOS 8 默认文件系统是 xfsxfs 只能扩大不能缩小而且不能用 resize2fs要用 xfs_growfs。第一次操作前先确认文件系统类型不然会报错。4. 进阶玩法镜像直接跑容器、PVE 场景导入4.1 镜像解锁容器场景AnolisOS 的官方镜像站除了 qcow2 云镜像还提供容器镜像发布于龙蜥社区的容器镜像仓库。本地测试时可以直接用 Podman 或 Docker 把这些容器镜像拉下来运行不需要起虚拟机。如果你要基于这个 qcow2 镜像制作自定义容器镜像流程会比较绕一般不是直接转换而是从容器仓库里拉基础镜像在上面加自己的软件。比较实用的做法是先把虚拟机里的系统调好再用virt-sysprep清理系统痕迹最后用virt-customize注入自定义脚本这样就能做出一套自己的“黄金镜像”后续交付虚拟机直接基于这个镜像克隆。4.2 Proxmox VE 导入 qcow2 镜像PVE 是当前非常流行的开源虚拟化平台底层也是 KVM所以对 qcow2 支持很完善。在 PVE 节点上导入 AnolisOS 镜像的流程很方便# 把镜像上传到 PVE 节点比如 /var/lib/vz/template/iso/ # 创建虚拟机骨架 qm create 9000 --name anolis-template --memory 4096 --net0 virtio,bridgevmbr0 --scsihw virtio-scsi-pci --boot c --disk0 local-lvm:0 # 导入磁盘镜像 qm importdisk 9000 /var/lib/vz/template/iso/AnolisOS-8.8_x86_64.qcow2 local-lvm # 把导入的磁盘挂载为启动盘 qm set 9000 --scsi0 local-lvm:vm-9000-disk-0 # 设置启动顺序 qm set 9000 --boot orderscsi0注意 PVE 的 local-lvm 存储是基于 LVM-thin 的导入时 PVE 会自动把 qcow2 转换为 raw 格式这是一件好事——raw 性能比 qcow2 好一些。如果你在qm importdisk时报存储空间不足的错先检查 local-lvm 的剩余空间因为转换 raw 后文件会按虚拟磁盘大小占空间10GB 的 qcow2 导入后可能变成 10GB 的 raw。4.3 批量交付虚拟机的实践思路如果你负责的团队要交付多个 AnolisOS 虚拟机建议不要一台台导入安装而是把第一台配置好的虚拟机做成模板然后用virt-cloneKVM环境或 PVE 的克隆功能Proxmox环境批量复制。克隆出来的虚拟机必须做两件事改主机名、重新初始化 cloud-init。不然每台机器的 machine-id 一样DHCP 获取的 IP 可能冲突SSH host key 也会一样安全上直接炸。KVM 环境克隆后重置 cloud-initsudo virt-sysprep -d anolis-template --hostname new-host --firstboot-command rm -f /etc/machine-id; systemd-machine-id-setup这里用 virt-sysprep 清理机器的唯一性标识然后重新生成。如果不用 virt-sysprep你也可以在模板机里执行cloud-init clean之后关机再克隆这样每台新机器第一次开机都会重新走一遍 cloud-init 初始化流程。5. 常见问题与排查实录5.1 启动引导失败排查思路镜像无法启动是最高频的问题原因集中在三层镜像文件损坏、虚拟化平台配置不兼容、硬件虚拟化未开启。排查步骤建议按顺序来。首先确认镜像文件校验值正确不要跳过这一步。其次检查 BIOS 里是否开启 VT-x/AMD-VLinux 下用grep -E vmx|svm /proc/cpuinfo查看没有输出就是没开。第三检查虚拟机的磁盘控制器类型前面说过 VirtualBox 里尽量用 SATA 或 IDEKVM 里用 virtio某些老内核对 virtio-scsi 支持不好会直接 kernel panic。如果看到No bootable device或者Boot failed这类提示多半是磁盘没挂好或镜像格式不对。VirtualBox 里确认是否真的选到了 vdi 文件KVM 里用virsh dumpxml anolis-test查看磁盘路径是否正确。5.2 网卡无法识别或 IP 拿不到镜像启动后 SSH 连不上第一反应都是网络问题。AnolisOS 云镜像的网络设备命名规则是 enp 开头接口名不是传统的 eth0。用ip addr查看网卡名和状态如果网卡处于 DOWN 状态手动启用sudo ip link set enp1s0 up sudo dhclient enp1s0如果缺网卡固件或驱动大概率是 virtio 驱动问题。内核没加载 virtio_net 模块会导致网卡在系统里根本看不到需要确认内核是否包含virtio_net模块lsmod | grep virtio_net modprobe virtio_netKVM 环境里网卡 bus/model 配置错误也会导致网卡识别不了。用virsh edit anolis-test检查 network interface 的 model 是否为 virtiointerface typenetwork mac address52:54:00:xx:xx:xx/ source networkdefault/ model typevirtio/ /interface5.3 cloud-init 不生效或卡在初始化阶段cloud-init 的问题一般表现为登录帐号出不来、密码设置不了、主机名没变。排查思路是看 cloud-init 执行日志sudo journalctl -u cloud-init --no-pager常见原因是 seed.img 格式不对或者挂载方式有问题。cloud-init 允许数据源是 cdrom、文件系统或网络元数据服务VirtualBox 和 KVM 下最稳的是用 cdrom 挂载 seed.img注意设备类型要设为 ide-cdrom 或 sata-cdrom有些环境用 virtio-scsi 挂载 cdrom 会导致 cloud-init 读不到数据源。另一个常见问题是时间不同步。cloud-init 的很多操作依赖时间戳虚拟机系统时间如果和宿主差距过大可能导致证书校验失败、DHCP 租约异常。建议启动后先手动同步时间sudo timedatectl set-ntp true5.4 问题速查表现象可能原因解决方法启动显示 No bootable device磁盘未挂载/格式不对检查虚拟机关联的磁盘文件是否存在确认格式正确内核 panic虚拟化平台不兼容/驱动缺失切换磁盘控制器类型检查 CPU 虚拟化是否开启SSH 连接超时网卡未启用/防火墙拦截控制台查看 IP检查 firewalld 状态放行 22 端口登录提示密码错误cloud-init 未配置/默认凭证不对检查 cloud-init 日志用 seed.img 注入密码磁盘显示 100% 但实际没占满文件系统未扩展growpart xfs_growfs 扩展分区cloud-init 卡住数据源识别异常改用 cdrom 挂载 seed.img检查日志5.5 独家避坑提醒有一个坑我踩过不止一次本地测试时不要给虚拟机分太多内存。AnolisOS 8 的云镜像默认会在启动阶段做一些内存相关的检测如果你给的内存低于 1GB系统可能会变得非常慢甚至无法启动。但也不是越大越好4GB 左右对测试机足够了省下来的内存留给宿主机和其他虚拟机。另一个坑是快照问题。VirtualBox 里对 vdi 做快照没问题但如果你的磁盘是 qcow2 格式直接在 VirtualBox 里用快照功能会异常。所以再次强调VirtualBox 场景务必先转 vdi。6. 系统落地优化国内软件源加速配置6.1 为什么镜像安装后要换源用默认源安装软件非常慢这和开发时 Gradle 依赖下载慢是同一个道理——默认源在国外或者带宽有瓶颈。AnolisOS 官方提供了多个国内镜像源把 yum/dnf 源切换到国内镜像站之后安装速度和稳定性会有质的提升。我自己配置完源之后dnf install的速度从几十KB/s 直接跳到几MB/s体验完全不同。6.2 配置 AnolisOS 国内镜像源AnolisOS 8 的软件源配置文件在/etc/yum.repos.d/目录下默认有几个 repo 文件。配置国内源前先备份原文件sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.bak以阿里云镜像站为例创建/etc/yum.repos.d/AnolisOS.repo内容如下[base] nameAnolisOS-$releasever - Base baseurlhttps://mirrors.aliyun.com/anolis/$releasever/os/$basearch/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-AnolisOS [AppStream] nameAnolisOS-$releasever - AppStream baseurlhttps://mirrors.aliyun.com/anolis/$releasever/AppStream/$basearch/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-AnolisOS [extras] nameAnolisOS-$releasever - Extras baseurlhttps://mirrors.aliyun.com/anolis/$releasever/extras/$basearch/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-AnolisOS写完后清理缓存并重新生成sudo dnf clean all sudo dnf makecache如果$releasever变量没正确解析也可以直接写死版本号比如把$releasever替换成8。配置完源之后再用dnf repolist确认仓库状态正常情况下应该能看到 base、AppStream、extras 三个仓库且数量不为 0。6.3 常用基础环境安装与内核升级源配好之后基础环境的搭建就顺畅多了。我自己习惯装完系统先来一轮基础包安装sudo dnf install -y vim net-tools lrzsz wget curl git bash-completion sudo dnf install -y yum-utils device-mapper-persistent-data lvm2如果需要 Docker 环境AnolisOS 8 可以直接添加 Docker 官方源安装也可以用龙蜥社区提供的容器版本。AnolisOS 的内核更新也走 dnf 流程sudo dnf update kernel -y sudo reboot升级内核前先确认当前系统的软件源和内核版本避免因源冲突导致更新失败。6.4 时区与基础安全配置镜像默认时区可能是 UTC对国内用户来说直接改成 Asia/Shanghai 更方便sudo timedatectl set-timezone Asia/Shanghai安全方面建议按顺序做三件事关闭不需要的服务、配置 firewalld 规则、设置 SELinux 为 enforcing如果没特殊需求。AnolisOS 8 的 SELinux 默认就是 enforcing如果你对 SELinux 不熟悉可以先保持默认不要盲目关闭。需要修改的话编辑/etc/selinux/configSELINUXenforcing改完需要重启生效。注意不要在生产环境随意设置成 permissive那会让系统处于“只记录不拦截”的中间状态安全性和排查复杂度都会变差。7. 个人实战经验总结镜像安装这条路我走过来最大的感受是AnolisOS 作为 CentOS 的兼容替代品在虚拟化生态的适配度上做得相当扎实尤其是 qcow2 云镜像加 cloud-init 这套组合几乎是云原生时代的标准交付方式。你只要理解了镜像格式、虚拟化平台、cloud-init 初始化这三者的关系本地测试、服务端交付、批量克隆这些场景都能应付自如。最后分享一个个人习惯不管用什么虚拟化平台我都会在模板机里提前装好cloud-init和virt-sysprep然后统一做一次清理再关机制作模板。这样后续每台新机器第一次开机都是“干净”的状态不会出现 machine-id 冲突、IP 冲突、SSH host key 重复这类隐蔽问题。这个习惯帮我省下的排障时间比写这些配置的时间多得多。