虚拟机管理
这一章讲虚拟机的日常管理:列表页、新建、控制台、开关机、修改设置、快照与克隆、开机自动启动、磁盘扩容和删除,最后列出 1.0 还不做的事。第一次建虚拟机请先看创建第一台虚拟机;这里把每个环节讲细一些。
1. 虚拟机列表
打开 虚拟机,默认进入 列表 页,上面有三个子页:
- 列表:所有虚拟机,每台一行,显示名称、状态、操作系统、CPU、内存、IP、磁盘和控制台按钮。
- 屏幕(F1–F12):只在主机接了显示器、本地屏幕功能打开时出现。主机自己的显示器和键盘用 Ctrl-Alt-F1 … F12 在主机和各虚拟机之间切换;这里每个按键显示它现在的画面,把虚拟机的名字拖到按键上就能改它用哪个键。
- 自动启动:见 §7。
列表上能做的事:
- 搜索:搜索框可以按名称、UUID、系统、IP、MAC 和备注查找。
- 按状态筛选:全部、运行中、已停止、需要处理(出错、配置损坏,或者带着提示的虚拟机)。每个按钮旁边是台数。
- 排序:点列标题排序,再点一次倒过来。
- 展开一行:点一行的空白处,展开后看到 UUID、每块磁盘、光驱、网卡(接在哪个网络、MAC 和主机看到的 IP)、直通设备,以及 克隆 按钮。
- 点名称进入这台虚拟机的详情页。
列表和筛选、排序的选择记在这个浏览器里,下次打开还在。kcell(应用容器)单独列在下面的 kcell 组里;不是 keel 建的、但在主机上跑着的 bhyve 虚拟机也会列出来,标着 不归 keel 管(只读)。
2. 新建虚拟机
点列表右上角的 新建虚拟机,走一个向导。最上面一排步骤会随模板变化,一般是:系统、资源、网络、选项、确认。随时可以点 上一步,或点 换模板 回到选模板;没建完离开这个页面,已填的内容在这个标签页里还留着。
2.1 选模板
模板按类别排:Linux、Windows、BSD、路由器 / 防火墙、NAS、其他,点开一个类别再选具体的系统(Windows、Linux 的类别下还有 桌面版、Server(服务器版)、发行版这一层)。也可以直接在上面的搜索框里搜。每个系统旁边写着 已测试 或 未测试,以及它至少要多少内存和磁盘。
模板里是这个系统需要的设置:固件(UEFI 或 BIOS)、磁盘和网卡的型号、要不要 TPM、显示怎么配等。想从头自己配,选最后的 自定义(全部自己设,或者直接写 config.json)。自定义模板 里放的是你从别的 keelOS 导入的模板文件,可以 导出、删除。
注意:Windows XP、2003、7 这类老系统选各自的模板:它们用 SeaBIOS(详情页的 固件 一栏写 BIOS(SeaBIOS))和系统自带的驱动。DOS、Windows 9x 一类更老的系统 1.0 不支持。
2.2 系统来自哪里
系统来自 有三种,模板决定提供哪几种:
- 安装 ISO:从列表里选,或 从这台电脑上传,或者贴一个下载地址 从网址下载(由主机自己下载,可以离开页面)。ISO 放在存储池里,所有虚拟机共用,见存储。
- 磁盘镜像(当系统盘):已经装好的系统镜像(路由器固件之类)当第一块盘。
.img直接用;.qcow2、.vmdk、.dmg上传时 keel 自动转成.img。压缩包要先解压。 - 先不装(网络启动,或以后再说):虚拟机只有空盘。
选安装 ISO 却不选文件时,向导会提醒你硬盘是空的,安装要自己安排,确认后才继续。
2.3 资源:名字、CPU、内存、磁盘
- 名字:字母、数字、
.、_、-,以后在列表、日志、RDP 里都用它(例如win11)。 - CPU:vCPU 个数,1 到 64。
- 内存:单位 GiB,不能低于模板要求的最低值,否则表单标红提醒。
- 磁盘:模板建一块新盘,可以改大小;+ 磁盘 再加一块。磁盘放在 ZFS 存储池里,keel 为每台虚拟机建一个自己的数据集,磁盘、UEFI 变量、日志都在里面。
向导里没有 CPU 档位。需要的话建好以后在编辑页里设,见 §5.3。
2.4 网络
每个网卡要选接到哪个网络(虚拟交换机)。三个下拉框依次是:接哪个网络(或某个交换机)、接法、网卡型号:
- 自动:用虚拟网卡;如果这台虚拟机在主机 reload 时是关机的、而且网络上有空闲的 SR-IOV VF,就用 VF。
- 虚拟网卡、SR-IOV VF、整口直通:明确指定。选 VF 或整口直通时型号不用选,guest 里用的是真实网卡的驱动。
- 型号:
virtio-net(快,Linux 自带驱动,Windows 要装 virtio-win 驱动)、e1000(Windows、BSD 自带驱动)、pcnet。
主机上还没有任何网络时,这一步会提示你去 网络 页建一个;建完回来,已填的内容还在。路由器类模板的多个网口不能接到同一个网络上。网络的建法见网络。
2.5 选项
- 模板自己的问题,例如 Windows 的 TPM 2.0(vTPM)。
- 屏幕:VNC 打开才有图形控制台;分辨率(自动 就是和主机的显示器一样大,没接显示器是 1024 × 768);下次启动等控制台连上再开机(控制台打开以后才上电,看得到 "Press any key to boot from CD or DVD" 这类只出现几秒的提示,只管一次,Windows 模板默认勾上)。
- 访问密码(可选):RDP 的密码,留空 = 管理员密码,用户名是虚拟机的名字。
- 随主机启动:主机开机后自动启动这台虚拟机,见 §7。
- 嵌套虚拟化:见嵌套虚拟化;主机不支持时是灰的,旁边写着原因。
2.6 确认
最后一步列出所有选择。建好就启动 默认勾上。想看或改交给 keel 的配置,展开 高级:config.json,这里能改表单里没有的项。点 建立,虚拟机建好,页面直接跳到它的详情页,启动在后台进行。
3. 控制台
虚拟机在运行时,列表的每一行和详情页顶部有控制台按钮:
- 图形(VNC):虚拟机的屏幕,像坐在一台真机前面;键盘鼠标直接可用。只有打开了 VNC 的虚拟机才有。
- 串口控制台:虚拟机的串口(文本)。Linux、路由器、BSD 把内核和登录终端接在串口上时很有用。
每个控制台有三种打开方式:在新窗口里打开(点按钮本身)、在本页打开、浮动窗口(始终在最前面,可以拖到浏览器外面,要浏览器支持)。浏览器拦下弹出窗口时,会自动改成在本页打开。列表里的按钮是图标,鼠标放上去有提示。
详情页左上还有一张虚拟机屏幕的小图,每 5 秒刷新一次,点它打开 VNC 控制台。
除了网页,也可以用 RDP 连虚拟机的屏幕:详情页的 RDP 一行写着地址、端口和用户名,点 下载 .rdp 文件 双击就能用 Windows 的远程桌面(mstsc)连上,从开机画面就能看到,guest 里不用装任何东西。keel 自己的客户端 kRDPclient 在此之上还有视频编码、USB 转发和声音。详见控制台与远程桌面。
4. 开机、关机和其他电源操作
列表每行和详情页右上有三个按钮:
| 按钮 | 做什么 |
|---|---|
| 启动 | 开机(已关机或出错的虚拟机可点)。 |
| 关机 | 向虚拟机发 ACPI 关机,等于按一下电源键,由 guest 自己正常关机。最多等 90 秒(可以在 自定义 里改 关机超时),时间到了还没关就强制关闭;如果它的直通设备还在产生中断、或 vCPU 还在忙(比如 NAS 在写盘),keel 会多等一会儿。点之前会再确认一次。 |
| 强制关闭(列表里叫 强关) | 相当于拔电源,没写进磁盘的数据会丢。点之前会确认。 |
操作的结果会以提示条出现在页面上。
状态有:运行中、已关机、已挂起、出错、配置损坏。出错 的虚拟机详情页会写原因,修好设置后可以再点 启动。
挂起:主机做 reload(升级、换槽、重启 keelOS 的底层)时,运行中的虚拟机默认被挂起再恢复,暂停约 17–35 秒,里面的程序不重启。用 SR-IOV VF 的虚拟机默认改为关机再启动;每台虚拟机可以在 自定义 里改 主机 reload 时 是 挂起再恢复(默认) 还是 关机。详细见升级与重启。恢复失败的虚拟机,启动 按钮会变成 重新启动:从头开机,挂起的检查点挪到一边留着。
1.0 的网页上没有"挂起"、"恢复"、"重置"按钮。 命令行有:
keel vm suspend ID、keel vm resume ID、keel vm reset ID(重置 = 立即强制停止再启动,光驱保留,等着下次重启生效的改动会应用)。见命令行 keel。
5. 修改设置
在详情页点 编辑,得到一页表单,分成 常规、CPU 和内存、存储、网络、显示、设备、固件、远程控制台。右边是 config.json,改过的行会对比原来的配置标出来;表单里没有的项,点 修改 JSON 直接改。保存 之后生效。
5.1 运行中的虚拟机
虚拟机在运行时,每一项旁边有一个标签说明什么时候生效:
- 马上:名字、随主机启动、RDP 密码和 控制台视频、网络的切换……guest 不停。
- 重启后:CPU、内存、CD-ROM、显示、固件、设备等。"重启"是 guest 自己重启,或关机后再开;从挂起恢复不算。
- 部分马上:网卡和磁盘。换网络或交换机马上生效,链路不断(网段变了要在 guest 里续租 DHCP);型号、增删网卡、增删磁盘等下次重启生效。
要等重启的改动保存后,详情页出现黄色提示 有 N 项修改,下次重启生效,列出每一项,两个按钮:放弃修改 和 现在重启(先关机再开)。另一个页面里同时改了设置时,保存会被拒绝,提示重新打开编辑页。
5.2 常用的修改
- 加 ISO / 换 ISO:存储 里 + ISO,从 ISO 库里选。装完系统后把 ISO 移除(点 ✕),下次从磁盘启动。
- 加磁盘、加网卡:+ 磁盘、+ 网卡。新磁盘下次重启后出现。
- BIOS 虚拟机从光盘启动:固件 里的 下次启动 ISO 优先,用一次。
- 更新固件:详情页 固件 一行,keel 的 UEFI 固件更新后,旧虚拟机会在下次启动时换上;带 vTPM 的虚拟机保留旧固件,因为换固件会让 BitLocker 要求恢复密钥。要换时先准备好恢复密钥,在虚拟机关机时点 更新固件。
- 声卡、USB 转发、嵌套虚拟化、PCI 设备:在 设备 里。PCI 直通见设备直通。
5.3 CPU 档位
CPU 和内存 里有一个 核心 下拉框:任意(大核优先)、性能(尽量大核)、节能(尽量小核)。它只对有大小核(P 核和 E 核)的 CPU 起作用:每个 vCPU 固定在选定种类的核上;大核不够时多出来的放小核(节能反过来)。其他 CPU 上这个设置暂时没有效果。改了要重启虚拟机才生效。
详情页的 NUMA 一行(多路主机上才有)写着这台虚拟机的 vCPU 和内存放在哪个节点;概览 → 监控 页有整台主机的 CPU 地图。
6. 快照与克隆
详情页下面的 快照 卡片:
- 在 名字 里填一个名字(默认是
snap-日期-时间),备注 可选,点 拍快照。 - 列表里每个快照显示时间、拍的时候虚拟机的状态、占用的空间,以及三个按钮: - 回滚:回到这个快照。快照之后写进磁盘的内容全部丢失,设置和 UEFI 变量也一起回去;比它新的快照会一起删除。虚拟机在运行时可以勾选 先正常关机(否则直接断电),再选 回滚后启动。 - 从这里克隆:用这个快照建一台新虚拟机。 - 删除:删快照。有克隆还在用它时不能删。
快照是 ZFS 的,几乎不占空间,拍得很快。它包含同一时刻的所有磁盘、配置和 UEFI 变量,但不含内存:运行中拍的快照等于突然断电时的状态(崩溃一致),要保证数据库之类的一致性,先在 guest 里关机或停掉服务再拍。
克隆 也可以直接点详情页顶部或列表展开行里的 克隆,从虚拟机"现在的状态"克隆(keel 先拍一个快照)。克隆时填新虚拟机的名字,选:
- 链接克隆:立刻完成,和快照共享数据块;克隆还在时那个快照删不掉。
- 完整复制:和源虚拟机互不相干,耗时和复制磁盘一样。
克隆出来的虚拟机有新的 UUID、MAC 地址和控制台端口,不自动启动,没有 RDP 密码,vTPM 默认重新生成(可以勾 复制 vTPM)。
快照放在虚拟机自己的数据集里,不是备份:存储池坏了快照也没了。备份和搬到别的主机见快照、备份与迁移。
7. 开机自动启动
虚拟机 → 自动启动 子页控制主机开机后哪些虚拟机自己起来、按什么顺序:
- 虚拟机默认不自动启动。在编辑页(或新建时)勾 随主机启动,或者在这里点 加入自动启动。
- 自动启动的 列表里是启动顺序。拖动一行到别处改顺序;拖到列表下面的 放这里:排到最后 排到最后。
- 最上面的 开机后先等 N 秒再起第一台,给存储池、网络留出时间。
- 每一行的 起来后等 N 秒:这一台启动后等多久再起下一台。比如先起路由器,等 30 秒,再起其他虚拟机。
- 不自动启动 把它从顺序里拿下来。
- 每一行右边显示这一台上次自动启动的结果。
没有主机写权限的账户只能看,不能改。
8. 磁盘扩容
磁盘只能加大,不能缩小。
- 编辑,在 存储 里把那块盘的 GiB 改大,保存。
- virtio-blk 和 NVMe 的盘马上扩容,不用停机;AHCI、IDE 的盘下次重启后生效。
- 然后在 guest 里把新空间用上:Linux 用
growpart和resize2fs一类;Windows 在 磁盘管理 里先 重新扫描磁盘,再扩展卷。
9. 搬到别的存储池
主机有两个以上存储池时,详情页会出现 搬到别的存储池 按钮:虚拟机的数据集(磁盘、快照、检查点、UEFI 变量)复制到另一个池,校验后删掉旧的。选 搬到 的池,点 搬家。运行中的虚拟机也能搬,切换时停顿不到一秒;需要的空间不够的池灰着,写着原因。
10. 日志和配置
详情页顶部的 日志 打开串口、bhyve、supervisor 和事件日志,config.json 看这台虚拟机现在的完整配置(RDP 密码显示成星号)。排查问题见故障排查与日志。
11. 删除
删除是永久的:磁盘、快照、日志和设置都一起没有,恢复不了。
- 先把虚拟机关机(运行中的删除按钮是灰的)。
- 详情页最下面的 删除 卡片,点 删除这台虚拟机。
- 输入虚拟机的名字确认。名字对不上就不会删。
用这台虚拟机建的链接克隆或其他引用不受影响;ISO 库里的 ISO 不会被删。
12. 1.0 还不支持什么
- 网页上没有挂起、恢复、重置按钮,命令行有(§4)。
- 没有带内存的快照:快照只含磁盘、配置和 UEFI 变量,崩溃一致(§6)。
- 磁盘不能缩小,也不能在网页上删除已有的磁盘(只能删新加还没保存的)。
- CPU 档位只对有大小核的 CPU 有效(§5.3),其余的 CPU 绑定档位放到 2.0。
- DOS、Windows 9x 这类很老的系统不支持,Windows XP 是最老的目标。
- 嵌套虚拟化只在 Intel 主机上可用,且不能同时直通 PCI 设备,见嵌套虚拟化。
- 同一块直通设备分给多台虚拟机时,先启动的那台拿到,其他的在它运行期间启动不了。