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-01local-hostname: debian-cloud-node(2) user-data
定义登录用户、公钥、APT 镜像源及开机自启任务。
#cloud-config# 禁用 root 远程密码登录(安全规范)disable_root: truessh_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: truepackages: - qemu-guest-agent - curl - wget - btop - fastfetch
name请替换为小写用户名,ssh_authorized_keys替换为你自己的 SSH 公钥内容。
2. 打包生成 ISO 镜像
选项 A:Linux 环境(最稳定)
# 推荐使用官方工具生成(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,执行以下脚本:
$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[] 65536while (($bytesRead = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) { $file.Write($buffer, 0, $bytesRead)}$file.Close()Write-Host "cidata.iso 制作完成!" -ForegroundColor Green三、在群晖 VMM 中导入与部署
1. 导入镜像资源
- 打开群晖 DSM 的 Virtual Machine Manager (VMM)。
- 导入硬盘映像:
- 点击左侧 映像 (Image) -> 顶部切换至 硬盘映像 (Disk Image)。
- 点击 新增 -> 选择从 NAS 共享文件夹或电脑上传下载的
.qcow2镜像(如genericcloud镜像)。
- 导入 Cloud-Init 配置盘:
- 切换至 ISO 映像 (ISO Image) 标签页。
- 点击 新增 -> 上传刚生成的
cidata.iso。
2. 创建并配置虚拟机
- 进入左侧 虚拟机 (Virtual Machine) 列表,点击 新增 (Create) 旁边的小箭头,选择 从硬盘映像导入(或直接点击 新增 -> Linux)。
- 基本规格:按需分配 CPU 和内存。
- 存储配置(核心步骤):
- 虚拟盘 1:选择刚才导入的硬盘映像。
- 扩容容量:原镜像仅 2GB 左右,必须在界面中将容量调大(例如
20 GB或更高),Cloud-Init 会在开机时自动完成无损分区拉伸。 - ISO 映像:选择挂载刚导入的
cidata.iso。
- 其他设置:
- 固件 (Firmware):建议保持为 UEFI。
- 虚拟网卡:选择默认的 VirtIO 网卡与对应的虚拟交换机。
- 开机与初始化:
- 启动虚拟机。首次启动期间,内核引导后会自动检测光驱卷标
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/