1252 字
6 分钟
群晖 VMM 部署 Cloud 镜像与 Cloud-Init (NoCloud) 实战指南

本文档整合了 Debian/Ubuntu 云镜像在群晖 Synology Virtual Machine Manager (VMM) 中的完整交付流程,解决“镜像无密码无法登录”及“Cloud-Init 不生效”等常见问题。

一、官方镜像选型指南#

Debian 官方云镜像(Cloud Images)对不同命名有严格定义,必须选对版本以确保包含 Cloud-Init:

镜像标识内置 Cloud-Init内核类型适用场景与推荐度
genericcloud是linux-image-cloud-amd64 (虚拟化精简内核)强烈推荐。适合群晖 VMM 等纯 KVM 环境,启动极快,内存占用小。
generic是linux-image-amd64 (完整物理标准内核)次选。适合需要直通特殊物理外设或嵌套虚拟化的场景。
nocloud / none否视变种而定不可用于 Cloud-Init。默认无密码且关闭 root 远程,需在控制台手动配置。
  • 官方下载地址:Debian Cloud Images 归档
  • 推荐下载文件格式:选择结尾为 .qcow2 或 .raw 的文件(例如:debian-12-genericcloud-amd64.qcow2)。

二、制作 Cloud-Init 数据盘 (cidata.iso)#

NoCloud 数据源依赖一个包含配置且卷标严格为 cidata(或 CIDATA)的光盘或磁盘镜像。

1. 编写配置文件#

在本地新建一个空文件夹(如 cloud-config/),在根目录下创建以下两个文本文件(必须严格使用 Unix 格式换行符 LF):

(1) meta-data#

定义实例 ID 和主机名。修改配置后重新开机时,若需重新触发初始化,需变更 instance-id。

instance-id: syno-vm-node-01
local-hostname: debian-cloud-node

(2) user-data#

定义登录用户、公钥、APT 镜像源及开机自启任务。

#cloud-config
# 禁用 root 远程密码登录(安全规范)
disable_root: true
ssh_pwauth: false
# 配置时区
timezone: Asia/Shanghai
# 创建一个免密 sudo 的普通用户
users:
- default
- name: <your-username>
gecos: System Administrator
sudo: ALL=(ALL) NOPASSWD:ALL
groups: [adm, sudo, plugdev]
shell: /bin/bash
lock_passwd: true
ssh_authorized_keys:
- <your-ssh-public-key>
# 配置 APT 镜像源(以 Debian 为例,可选配置)
apt:
primary:
- arches: [default]
uri: http://mirrors.ustc.edu.cn/debian
security:
- arches: [default]
uri: http://mirrors.ustc.edu.cn/debian-security
# 更新并安装基础依赖
package_update: true
packages:
- qemu-guest-agent
- curl
- wget
- btop
- fastfetch

name 请替换为小写用户名,ssh_authorized_keys 替换为你自己的 SSH 公钥内容。

2. 打包生成 ISO 镜像#

选项 A:Linux 环境(最稳定)#

Terminal window
# 推荐使用官方工具生成(Debian/Ubuntu: apt install -y cloud-image-utils)
cloud-localds cidata.iso user-data meta-data
# 或者使用标准 mkisofs / genisoimage(注意:-volid 必须是 cidata)
genisoimage -output cidata.iso -volid cidata -joliet -rock user-data meta-data

选项 B:Windows 环境(免装软件,PowerShell 脚本)#

在仅包含 user-data 与 meta-data 的目录下打开 PowerShell,执行以下脚本:

Terminal window
$sourceDir = (Get-Location).Path
$isoPath = Join-Path $sourceDir "cidata.iso"
$fsi = New-Object -ComObject IMAPI2FS.MsftFileSystemImage
$fsi.FileSystemsToCreate = 1 # ISO9660
$fsi.VolumeName = "CIDATA" # 严格大写或小写 CIDATA
$fsi.Root.AddTree($sourceDir, $false)
$stream = $fsi.CreateResultImage().ImageStream
$file = [System.IO.File]::OpenWrite($isoPath)
$buffer = New-Object byte[] 65536
while (($bytesRead = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) {
$file.Write($buffer, 0, $bytesRead)
}
$file.Close()
Write-Host "cidata.iso 制作完成!" -ForegroundColor Green

三、在群晖 VMM 中导入与部署#

1. 导入镜像资源#

  1. 打开群晖 DSM 的 Virtual Machine Manager (VMM)。
  2. 导入硬盘映像:
    • 点击左侧 映像 (Image) -> 顶部切换至 硬盘映像 (Disk Image)。
    • 点击 新增 -> 选择从 NAS 共享文件夹或电脑上传下载的 .qcow2 镜像(如 genericcloud 镜像)。
  3. 导入 Cloud-Init 配置盘:
    • 切换至 ISO 映像 (ISO Image) 标签页。
    • 点击 新增 -> 上传刚生成的 cidata.iso。

2. 创建并配置虚拟机#

  1. 进入左侧 虚拟机 (Virtual Machine) 列表,点击 新增 (Create) 旁边的小箭头,选择 从硬盘映像导入(或直接点击 新增 -> Linux)。
  2. 基本规格:按需分配 CPU 和内存。
  3. 存储配置(核心步骤):
    • 虚拟盘 1:选择刚才导入的硬盘映像。
    • 扩容容量:原镜像仅 2GB 左右,必须在界面中将容量调大(例如 20 GB 或更高),Cloud-Init 会在开机时自动完成无损分区拉伸。
    • ISO 映像:选择挂载刚导入的 cidata.iso。
  4. 其他设置:
    • 固件 (Firmware):建议保持为 UEFI。
    • 虚拟网卡:选择默认的 VirtIO 网卡与对应的虚拟交换机。
  5. 开机与初始化:
    • 启动虚拟机。首次启动期间,内核引导后会自动检测光驱卷标 cidata,执行用户初始化、扩盘及 QEMU 代理安装(耗时约 1~2 分钟)。
    • 初始化完成后,即可直接通过 SSH 登录,群晖 VMM 列表也将正确显示虚拟机的 IP 地址。
    • 系统配置完毕后,可在虚拟机设置中安全弹出并卸载 cidata.iso。

四、故障急救清单#

  • 现象 1:开机依然提示登录,密码不对,SSH 连接被拒
    • 原因:下载了 nocloud 或 none 镜像,镜像内没有 cloud-init 服务。
    • 解决:换用 genericcloud 重新导入;或在 GRUB 菜单按 e,在内核行末尾加上 init=/bin/bash 引导进单用户模式手动 passwd root。
  • 现象 2:genericcloud 没读取配置
    • 排查:检查 cidata.iso 的光盘卷标是否严格为 cidata(可用 blkid 查看),且文件必须位于光盘根目录,不能嵌套在子文件夹中。

相关文章#

群晖 VMM 部署 Cloud 镜像与 Cloud-Init (NoCloud) 实战指南
https://iiii.fun/posts/nas/synology-vmm-cloud-init/
作者
庆灵
发布于
2026-10-26
许可协议
CC BY-NC-SA 4.0