虚拟化开发工具云原生【免费下载链接】multipassMultipass orchestrates virtual Ubuntu instances项目地址https://gitcode.com/gh_mirrors/mu/multipass点击查看免费下载本篇指南围绕 Multipass 的实例级设置项local.instance-name.disk系统讲解其键格式、允许值范围、单位解析规则、默认行为以及通过multipass set/multipass get调整实例磁盘大小的完整实操方法。读完本文你将掌握如何在 Multipass 中安全地扩容实例磁盘理解只能增不能减的底层原因并能依据源码确认大小解析与校验的真实行为。设置项总览Key 与作用对象local.instance-name.disk是 Multipass 暴露在设置树settings tree中的实例级属性设置用于查询与修改某个已存在实例的磁盘大小。Key 格式local.instance-name.disk占位符说明instance-name必须替换为 Multipass 实例的实际名称例如handsome-ling、primary。设置根Key 以local.为根表明它属于本地 Multipass 守护进程管辖的实例设置。从源码看Multipass 的守护进程daemon在解析这类 Key 时会按local.instance.cpus|memory|disk|bridged的固定模板进行正则匹配constexpr auto disk_suffix disk; constexpr auto mem_suffix memory; constexpr auto bridged_suffix bridged; // src/daemon/instance_settings_handler.cpp 中的 make_key_regex() const auto prop_pattern prop_template.arg( QStringList{cpus_suffix, mem_suffix, disk_suffix, bridged_suffix}.join(|));如果 Key 不符合该模式解析会抛出UnrecognizedSettingException。也就是说local.instance-name.disk与 cpus、memory、bridged 共同构成了 Multipass 的实例属性设置族。完整的可用设置列表可以通过multipass get --keys随时查看参见 Settings 参考。核心语义磁盘大小且只允许扩容该设置的值表示实例磁盘的大小。与launch时通过--disk指定磁盘空间的语义一致launch的-d, --disk选项描述为 Disk space to allocate. Positive integers, in bytes, or decimals, with K, M, G suffix. Minimum: 1G, default: 5G见 launch 参考。local.instance-name.disk则是在实例创建之后对这份分配进行在线调整的入口。为什么只能增大、不能缩小Multipass 明确规定磁盘大小只能增加不允许减少。文档中的警告原文如下The disk size can only be increased. Decreasing the disk size is not permitted since it could cause data loss and the VM might break.磁盘大小只能增加不允许减少磁盘大小因为可能导致数据丢失且虚拟机可能损坏。这条约束不是文档单方面的说法而是写死在守护进程设置处理逻辑中的硬性校验。在 instance_settings_handler.cpp 的update_disk()中if (size spec.disk_space) throw mp::InvalidSettingException{key, val, Disk can only be expanded}; else if (size spec.disk_space) // NOOP if equal { instance.resize_disk(size, messages); spec.disk_space size; }解读这段逻辑可以得到三条可验证的行为新值小于当前磁盘→ 抛出InvalidSettingException报错信息为 Disk can only be expanded且不执行任何实际扩容操作。新值大于当前磁盘→ 调用instance.resize_disk(size, messages)执行真正的磁盘扩容并把新的磁盘大小写回spec.disk_space实例的 VMSpecs 记录。新值等于当前磁盘→ 视为 NOOP空操作既不报错也不触发扩容。对应的单元测试也覆盖了这三种分支见 test_instance_settings_handler.cpp增大时resize_disk恰好被调用一次、相同时调用零次、缩小时调用零次且原大小保持不变。扩容的底层调用链update_disk()调用的resize_disk()最终落在BaseVirtualMachine的公共接口上base_virtual_machine.cppvoid mp::BaseVirtualMachine::resize_disk(const MemorySize new_size, mp::UserMessages messages) { resize_disk_impl(new_size); if (is_core()) messages.add_message(core_image_disk_resize_message()); }它会委托给各后端QEMU、Hyper-V、Apple Virtualization 等自行实现的resize_disk_impl()因此实际扩容动作由具体虚拟化后端完成若实例运行的是 Core 镜像还会附加一条提示消息。这也解释了为什么只能增底层镜像/虚拟磁盘通常只支持向文件尾部追加空间缩小会破坏文件系统与分区结构。允许值单位、大小写与取值范围允许值的总原则是不小于当前磁盘大小的任意容量。具体而言可以是一个正整数或小数后接可选的单位后缀单位后缀不区分大小写以下是所有可接受的单位语义均为二进制倍数即 1K 1024 字节而非 1000后缀大小写任意含义字节数B1 字节1KiB、KB、K1024 字节1024MiB、MB、M1024 × 1024 字节1048576GiB、GB、G1024 × 1024 × 1024 字节1073741824这些单位常量在 memory_size.cpp 中有对应定义kibi 1024LL、mebi kibi * kibi、gibi mebi * kibi。小数的特殊规则十进制字节被拒绝大单位向下取整Multipass 对小数有两处值得注意的限定原文 noteDecimal bytes (e.g. 1.1B) are refused, unless specified with larger units ( KiB), in which case the amount is floored (e.g. 1.2KiB is interpreted as 1228B, even though 1.2 x 1024 1228.8).十进制字节如1.1B会被拒绝小数只有在搭配K/M/G及以上这类大单位时才被允许。大单位小数向下取整floor例如1.2KiB会按1228B处理——虽然数学上1.2 × 1024 1228.8Multipass 会丢掉小数部分得到整数字节数。从解析器的正则表达式可以印证这一点memory_size.cppQRegularExpression regex{QRegularExpression::anchoredPattern( \\s*(\\d)(?:\\.(\\d)(?[KMG]))?(?:([KMG])(?:i?B)?|B)?\\s*), QRegularExpression::CaseInsensitiveOption};正则中(?:\\.(\\d)(?[KMG]))?表示小数部分只有在其后紧跟K、M、G单位时才会被捕获B单独出现时不允许带小数点。随后在计算时return val (long long)(mantissa / pow(10, matcher.captured(2).size()));整数部分与小数部分分别按单位换算后相加(long long)强制转换实现了向下取整与文档描述完全一致。另需注意值若被解析为 0 字节会抛出 Need a positive size. 的InvalidSettingException见 get_memory_size因此大小必须是正数。大小写不敏感的实例正则启用了CaseInsensitiveOption且单位字符在解析时统一转小写比较unit.at(0).toLower()所以7.5G、7.5g、7.5GB、7.5GiB都是等价的。查询与设置get / set 命令用法local.instance-name.disk与其他所有设置一样通过multipass set和multipass get命令读写参见 set 参考 与 get 参考。设置磁盘大小multipass set local.handsome-ling.disk7.5G这是文档给出的标准示例把名为handsome-ling的实例磁盘设置为7.5G。set命令的参数格式为keyvalue如果只给 Key 不给值则会交互式提示输入值。查询磁盘大小multipass get local.handsome-ling.diskget返回的是当前实例规格VMSpecs中记录的磁盘大小且以人类可读格式输出。从源码看查询路径是instance_settings_handler.cppassert(property disk_suffix); return QString::fromStdString(spec.disk_space.human_readable()); // TODO idem而human_readable()会选择GiB/MiB/KiB中合适的单位见 memory_size.cpp例如某测试中规格为12345KiB时get输出为12.1MiB对应 test_instance_settings_handler.cpp。这意味着你查询到的值可能与当初set输入的字面形式不同但字节数等价。修改前的必要条件在调用set修改实例设置时守护进程还会做两项前置校验instance_settings_handler.cpp实例不能被正在准备preparing否则抛出 instance is being prepared 异常实例必须处于 stopped 或 off 状态运行中的实例会被拒绝修改报错 Instance must be stopped for modification见check_state_for_updateinstance_settings_handler.cpp。因此扩容磁盘前应先停止实例multipass stop。此外已删除deleted实例无法修改磁盘设置但查询get对已删除实例是允许的。默认值与启动时分配的磁盘一致local.instance-name.disk的默认值就是该实例启动launch时分配的磁盘大小即 VMSpecs 中记录的disk_space。这意味着新建实例后不显式设置该键multipass get local.name.disk会返回launch时--disk指定的值launch若不指定--disk则采用后端默认值QEMU 等后端默认 5G最小 1G见 launch 参考每当通过set扩容成功spec.disk_space会被同步更新因此下一次的默认值/当前值就是扩容后的新大小再次扩容时以此为基准。常见用法与边界场景综合文档与源码实际使用中值得留意的几个场景合法扩容实例已停止multipass set local.name.disk20G将磁盘从当前大小例如 5G扩到 20G命令成功且无报错。设置相同大小multipass set local.name.disk5G当前恰好是 5G不会报错但也不会触发任何扩容操作NOOP 分支。尝试缩小multipass set local.name.disk3G当前 5G会失败收到InvalidSettingException错误信息为 Disk can only be expanded规格记录保持不变。大小写与单位混用2Gb、2048M、2GiB、2GB均可正常解析为同一大小但1.1B会被拒绝1.2KiB会按1228B向下取整处理。实例运行中修改会收到 Instance must be stopped for modification 错误需先multipass stop name。小结local.instance-name.disk是 Multipass 用于查询和调整实例磁盘容量的核心设置项。理解它的关键有三点只允许扩容、不允许缩容由守护进程硬校验并伴随数据安全考量大小写不敏感的单位体系B/K/M/G 及其变体均按 1024 进制换算小数仅限大单位且向下取整默认值跟随实例启动规格查询结果以人类可读形式返回。配合multipass stop、multipass set、multipass get三步操作即可安全完成实例磁盘的在线扩容管理。延伸阅读Settings 总览全部可用设置的完整清单Settings keys and values 说明设置树与取值规则set 命令参考 与 get 命令参考命令行读写方式launch 命令参考创建实例时通过--disk指定初始磁盘同族实例设置cpus、memory、bridged赞分享虚拟化开发工具云原生【免费下载链接】multipassMultipass orchestrates virtual Ubuntu instances项目地址https://gitcode.com/gh_mirrors/mu/multipass点击查看免费下载相关推荐Multipass 实例 CPU 配置指南local.\instance-name\.cpus 设置键的完整解析Multipass 实例 CPU 配置指南local.\instance name\ .cpus 设置键的完整解析 本指南围绕 Multipass 提供的实虚拟化开发工具云原生如何在 macOS 上从源码构建 Lynx Explorer 并打包 LynxSDK如何在 macOS 上从源码构建 Lynx Explorer 并打包 LynxSDK 在 macOS 上从 Lynx 源码构建可运行的 LynxExplorer虚拟化开发工具云原生Dagster GraphQL API 调用返回 UnauthorizedError 怎么排查Dagster GraphQL API 调用返回 UnauthorizedError 怎么排查 调用 Dagster 的 GraphQL API 时即使虚拟化开发工具云原生上一篇Hugo 模板函数 math.Sin 详解计算弧度参数的正弦值下一篇OLMo-7B环境影响分析全球首个零碳足迹7B模型背后的技术故事创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
【Python 量化取数指南 #12】Python 取北交所与指数:小众市场接口实测 【Python 量化取数指南 #12】Python 取北交所与指数:小众市场接口实测系列:《Python 量化取数指南》|连载项目 纯 GET 取数 仅依赖 requests
适用:想用 Python 拉北交所、指数这类「小众但常被忽略」的市场数据的人。1. 你将得到… · 2026/9/26 7:13:19
用模板框住Claude Code:打造稳定可控的AI编程协作工作流 1. 为什么我会给 Claude Code 攒一套模板:从一次差点翻车的重构说起先讲个真实经历。上个月我在一个中型项目里做模块拆分,代码量不大但牵连很广,涉及支付回调、任务队列、还有两块被历史包袱压着的遗留代码。我本来打算让 Claude Code 直接帮… · 2026/9/26 7:13:19
R语言评分卡实战:互金风控模型与数据挖掘落地指南 简介:面向数据挖掘学习者与互联网金融风控从业者,该课程资源以高级数据挖掘为主线,演示如何利用R语言处理海量信贷与交易数据,完成数据清洗、特征筛选、信用评分卡构建,并借助逻辑回归、决策树、随机森林等算法建立分类… · 2026/9/26 7:13:13
Apache Pulsar 端到端消息加密实战:从密钥生成到生产者/消费者配置的完整指南 消息队列后端流处理 【免费下载链接】pulsar Apache Pulsar - distributed pub-sub messaging system 项目地址: https://gitcode.com/gh_mirrors/pulsar28/pulsar 点击查看 免费下载 导读
本文以 Apache Pulsar 官方 Cookbook 文档(site2/website-nex… · 2026/9/26 7:55:58
Spark分布式随机森林源码打包实战:版本锁定与避坑指南 简介:一份面向大数据开发与机器学习学习者的分布式随机森林源码包,基于Spark平台实现,完整覆盖从数据清洗、特征子集抽样、并行决策树训练到投票平均预测的流程,并包含参数调整模块,便于理解树数量、样本量对模型性能的… · 2026/9/26 7:55:58
鸿蒙NEXT原生IM客户端:基于ArkTS重写MobileIMSDK的架构与实战 MobileIMSDK 这个开源框架,做 IM 的老朋友应该都不陌生。最近我把它的客户端部分真正搬到了 HarmonyOS NEXT 上,用 ArkTS 从零写了一个纯鸿蒙的客户端库,而不是套壳 WebView 或者拿 Java 代码打补丁。因为 HarmonyOS NEXT 那个“纯血”版本已… · 2026/9/26 7:55:58
基于Python校园食堂点餐系统:源码、数据库与部署实战 作为一个前后端都写过、也带过不少学弟学妹做课设的过来人,我第一眼看到“基于Python校园食堂点餐系统(源码数据库文档)”这个标题,就知道这类项目在课程设计和毕业设计里有多高的出场率。关键是这个组合很完整:有源码、有数据库、有文档&… · 2026/9/26 7:55:52
放弃WordPress:用WorkBuddy+Flask+SQLite从零搭建日更内容站 1. 为什么我放弃了WordPress,转头用WorkBuddyFlask从零搭站先说结论:如果你跟我一样,是个想快速把脑子里的想法变成能跑起来的网站、又不想被各种建站平台的模板和插件绑架的人,那WorkBuddy配合Flask和SQLite这套组合,… · 2026/9/26 7:55:26
Tool安全沙箱选型:Docker、gVisor与WASM三层防御架构 1. 为什么“Tool”这个词在安全语境下突然变得刺眼?最近翻了几轮企业级工具链的 incident report,发现一个反直觉现象:越是标榜“开箱即用”“一键部署”的 tool,越容易在渗透测试报告里被标红。不是因为功能弱,恰恰是… · 2026/9/26 7:55:20
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46