ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Multipass restore 命令完全指南:从快照恢复实例状态

Multipass restore 命令完全指南:从快照恢复实例状态 虚拟化开发工具云原生【免费下载链接】multipassMultipass orchestrates virtual Ubuntu instances项目地址https://gitcode.com/gh_mirrors/mu/multipass点击查看免费下载multipass restore是 Multipass 中用于将实例回滚到某个历史快照时刻状态的命令行工具。本文以官方参考文档为核心结合仓库源码restore.cpp、daemon.cpp、multipass.proto深入讲解其语法、交互流程、--destructive选项、自动快照机制以及底层 gRPC 调用链读完即可在真实环境中安全、熟练地执行实例恢复操作。命令概述multipass restore命令将实例恢复到拍摄指定快照时的状态。快照由multipass snapshot命令创建它记录了恢复实例到同一状态所需的全部信息磁盘内容、配置等。恢复操作会丢弃实例的当前状态并用快照记录的状态取而代之。例如执行以下命令multipass restore relative-lion.snapshot2系统会在继续之前询问你是否想先为实例保存一个快照Do you want to take a snapshot of relative-lion before discarding its current state? (Yes/no):如果确认输出将与下面类似Snapshot taken: relative-lion.snapshot3 Snapshot restored: relative-lion.snapshot2命令语法与参数详解完整的multipass help restore输出如下它解释了所有可用选项Usage: multipass restore [options] instance.snapshot Restore an instance to the state of a previously taken snapshot. Options: -h, --help Displays help on commandline options -v, --verbose Increase logging verbosity. Repeat the v in the short option for more detail. Maximum verbosity is obtained with 4 (or more) vs, i.e. -vvvv. -d, --destructive Discard the current state of the instance Arguments: instance.snapshot The instance to restore and snapshot to use, in instance.snapshot format, where instance is the name of an instance, and snapshot is the name of a snapshot关键参数说明参数含义说明instance.snapshot必选位置参数使用实例名.快照名的点分格式指定目标实例与所用快照例如relative-lion.snapshot2-h, --help帮助选项显示命令行选项帮助-v, --verbose日志级别选项增加日志详细程度重复v可提升详细度最多 4 个v即-vvvv-d, --destructive破坏性选项跳过询问直接丢弃实例的当前状态从客户端源码restore.cpp可以看到该命令的参数解析逻辑命令行只接受恰好一个位置参数少于一个报Need the name of an instance and snapshot to restore.多于一个报Too many arguments supplied.参数必须能被.拆分成两个非空 token否则报Invalid format. Please specify the instance to restore and snapshot to use in the form instance.snapshot.。解析成功后instance、snapshot、destructive来自-d/--destructive是否被设置与verbosity_level被填入RestoreRequest。交互式恢复与自动快照机制如上面的示例所示不带任何附加选项运行时命令会主动提议先拍摄另一张快照。这个自动快照会在实例当前状态被丢弃前保存它其意义在于万一恢复结果不符合预期你仍然可以回到恢复前的状态。该自动快照遵循multipass snapshot命令的默认命名规则即snapshotN其中 N 是该实例迄今拍过的快照总数并且会附带一条说明其用途的自动注释。在示例中如果你运行multipass info relative-lion.snapshot3 | grep Comment你会找到这样的注释Comment: Before restoring snapshot1这条自动注释的格式在守护进程源码daemon.cpp中定义take_snapshot被调用时传入空名称表示走默认命名和注释fmt::format(Before restoring {}, request-snapshot())即Before restoring 快照名。这正是restore文档示例中注释显示为Before restoring snapshot1的原因示例中恢复的是snapshot1。提示与快照相关的名称、注释属性可通过multipass set命令与设置键local.instance-name.snapshot-name.name/local.instance-name.snapshot-name.comment查看和修改详见 local.instance-name.snapshot-name.name 与 local.instance-name.snapshot-name.comment。使用 --destructive 跳过确认如果不想保留恢复前的状态可以使用--destructive或-d选项跳过询问并直接丢弃当前状态。这一点在非交互场景下尤为重要如果命令是以非交互方式运行的即标准输入或标准输出被重定向由于无法向用户询问确认--destructive是必需的否则命令无法继续。从客户端实现看当服务端请求确认但终端不可交互时客户端会输出如下提示并中止流程restore.cppUnable to query client for confirmation. Use --destructive to automatically discard current machine state.而在交互式终端中客户端会弹出Do you want to take a snapshot of instance before discarding its current state? (Yes/no)提示并循环校验输入仅接受 yes/no 类回答restore.cpp只有回答no时才真正执行破坏性丢弃回答 yes 则会先自动拍照再恢复。底层原理gRPC 调用链与守护进程处理restore并非客户端本地操作而是通过 gRPC 与 Multipass 守护进程multipassd协作完成的属于双向流式 RPC。协议定义见 multipass.proto 与 multipass.protorpc restore (stream RestoreRequest) returns (stream RestoreReply); message RestoreRequest { string instance 1; string snapshot 2; bool destructive 3; int32 verbosity_level 4; } message RestoreReply { string log_line 1; string reply_message 2; bool confirm_destructive 3; }整个流程如下客户端请求multipass restore客户端构造RestoreRequest含实例名、快照名、是否破坏性、日志级别并通过RpcMethod::restore分发给守护进程。服务端校验守护进程在 daemon.cpp 中处理请求。它先通过find_instance_and_react在运行实例表中查找目标实例然后校验快照是否存在get_snapshot。状态前置检查只有当实例处于off或stopped状态时才允许恢复否则返回FAILED_PRECONDITION错误Multipass can only restore snapshots of stopped instances.——这一点与snapshot命令相同目前快照功能仅支持Stopped状态的实例见 snapshot 文档。确认交互若未指定--destructive服务端通过RestoreReply.confirm_destructive true向客户端请求确认客户端询问用户后回写RestoreRequest.destructive。若用户选择不丢弃服务端先自动拍一张 Before restoring 快照。执行恢复调用vm_ptr-restore_snapshot(request-snapshot(), vm_specs)真正恢复快照随后根据恢复后的规格更新挂载update_mounts若规格发生变化则持久化实例记录persist_instances。结果回传成功时客户端打印Snapshot restored: instance.snapshot。错误处理方面快照不存在抛出NoSuchSnapshotException映射为NOT_FOUND其他异常映射为INTERNALdaemon.cpp。测试覆盖见 test_daemon_snapshot_restore.cpp 与 test_base_virtual_machine.cpp。常见错误与注意事项实例未停止恢复前实例必须处于Stopped或off状态否则报Multipass can only restore snapshots of stopped instances.。请先使用multipass stop停止实例。快照不存在目标快照不存在时返回NOT_FOUND错误可用multipass list/multipass info确认实例拥有的快照列表。参数格式错误必须严格使用instance.snapshot点分格式且只能有一个位置参数。非交互环境管道、重定向或自动化脚本中运行必须携带-d/--destructive否则无法获得用户确认而中止。破坏性不可逆相对--destructive会直接丢弃当前状态若不使用该选项命令会先自动保存当前状态为snapshotN快照形成可回退的保险。与其他命令配合使用restore通常与以下命令协同工作参考文档的 See also 链接snapshot拍摄快照为restore提供恢复点支持--name自定义快照名与--comment附加注释。list列出实例及其快照。info查看实例详情包括快照名称与注释如grep Comment。delete删除不再需要的快照。set修改快照的name与comment属性。典型工作流先用multipass snapshot instance建立恢复点 → 进行有风险的配置或软件变更 → 出问题时用multipass restore instance.snapshot一键回滚若想保留失败状态以便排查则在提示时回答 yes让 Multipass 自动把变更前的状态留作备份快照。赞分享虚拟化开发工具云原生【免费下载链接】multipassMultipass orchestrates virtual Ubuntu instances项目地址https://gitcode.com/gh_mirrors/mu/multipass点击查看免费下载相关推荐Multipass 的 multipass info 命令完全指南查询实例与快照详情Multipass 的 multipass info 命令完全指南查询实例与快照详情 Multipass 是 Canonical 推出的轻量级虚拟机编排工具虚拟化开发工具云原生Git恢复文件restore命令的精确文件状态恢复Git恢复文件restore命令的精确文件状态恢复 一、痛点与解决方案 你是否曾因误操作导致代码丢失或在多人协作中意外覆盖了重要文件Git作为分布式版本控版本控制开发工具CLIMultipass delete 命令详解实例与快照的删除、恢复与彻底清除Multipass delete 命令详解实例与快照的删除、恢复与彻底清除 Multipass delete 命令完全指南实例与快照的删除、恢复与彻底清除虚拟化开发工具云原生上一篇WarcraftHelper完整指南让经典魔兽争霸3在现代电脑上完美运行的终极方案下一篇如何免费解锁WeMod完整功能Wand-Enhancer终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表