diff --git a/virtrust/docs/002-virtrust-api.md b/virtrust/docs/002-virtrust-api.md index 8b1232757a27e72ed7a48451d57984f3d8486981..7a46bdf8aa0ea48bdd3e51ef49e85032b850050c 100644 --- a/virtrust/docs/002-virtrust-api.md +++ b/virtrust/docs/002-virtrust-api.md @@ -71,8 +71,6 @@ VirtrustRc DomainDestroy(const std::unique_ptr &conn, const std::string ### 3. DomainMigrate - 迁移虚拟机 -将虚拟机迁移到其他主机。当前仅支持离线迁移,虚拟机在 running/shut-off 状态下,非共享存储需要用户手动复制磁盘文件,例如 qcow2 到目的端口,目标存在同名运行的虚拟机情况下不能迁移,可配置源虚拟机是否删除,重复迁移会覆盖目标端虚拟机。 - ```cpp VirtrustRc DomainMigrate(const std::unique_ptr &conn, const std::string &domainName, const std::string &destUri, unsigned int flags = 0); @@ -88,7 +86,7 @@ VirtrustRc DomainMigrate(const std::unique_ptr &conn, const std::string - `MIGRATE_UNDEFINE_SOURCE`:迁移成功后删除源端虚拟机 **功能描述**: -将虚拟机从当前主机迁移到目标主机。支持安全的迁移过程,包括 TSB 资源的同步。 +将虚拟机从当前主机迁移到目标主机。支持安全的迁移过程,包括 TSB 资源的同步。当前仅支持离线迁移,并且需要确保虚拟机在 shut-off 状态下。如待迁移虚拟机配置了非共享存储,则用户需要手动复制磁盘文件(例如 qcow2)到目的节点。如果目标存在同名运行的虚拟机情况下不能迁移。当前支持可配置源虚拟机是否删除,重复迁移会覆盖目标端虚拟机。 **返回值**: - 成功返回 `VirtrustRc::OK` diff --git a/virtrust/docs/003-virtrust-sh.md b/virtrust/docs/003-virtrust-sh.md index 2db5dcbfe59eaa4b436e807375267b9021625bf6..4e54c5d0cecf7e7274fd84ca835d27ec57425f0d 100644 --- a/virtrust/docs/003-virtrust-sh.md +++ b/virtrust/docs/003-virtrust-sh.md @@ -4,7 +4,7 @@ Virtrust Shell (virtrust-sh) 是 virtrust 项目的命令行界面工具,为用户提供了交互式的虚拟机管理功能。它基于 virtrust API 库构建,支持虚拟机的完整生命周期管理操作。 -- **虚拟机生命周期管理**:创建、启动、停止、迁移、查询和删除虚拟机 +- **虚拟机生命周期管理**:创建、启动、停止、迁移、查询和删除虚拟机定义 ## 安装和使用 @@ -29,11 +29,11 @@ virtrust-sh [options]... [args...] | 命令 | 描述 | |------|------| | `create` | 创建虚拟机实例 | -| `destroy` | 销毁(停止)虚拟机域 | +| `destroy` | 强制关闭(停止)虚拟机域 | | `list` | 列出虚拟机信息 | | `migrate` | 迁移虚拟机到其他主机 | | `start` | 启动(先前定义的)非活动虚拟机域 | -| `undefine` | 取消定义虚拟机域 | +| `undefine` | 删除虚拟机定义 | ## 详细命令说明 @@ -101,9 +101,9 @@ virtrust-sh -d start test-vm virtrust-sh start --only-tsb ``` -### 3. destroy - 停止虚拟机 +### 3. destroy - 强制关闭(停止)虚拟机 -强制停止运行中的虚拟机。 +强制关闭(停止)运行中的虚拟机。 **基本语法**: ```bash @@ -115,11 +115,11 @@ virtrust-sh destroy [options] - `--only-tsb`:仅更新 TSB 资源,需要提供虚拟机的 UUID 作为 domain_name **参数说明**: -- `domain_name`:要停止的虚拟机名称或 UUID(使用 `--only-tsb` 选项时必须使用 UUID) +- `domain_name`:要强制关闭(停止)的虚拟机名称或 UUID(使用 `--only-tsb` 选项时必须使用 UUID) **示例**: ```bash -# 停止虚拟机 +# 强制关闭(停止)虚拟机 virtrust-sh destroy test-vm # 仅更新 TSB 资源 @@ -128,7 +128,7 @@ virtrust-sh destroy --only-tsb ### 4. undefine - 删除虚拟机定义 -删除虚拟机的配置定义,但不会删除磁盘镜像文件。 +删除虚拟机定义,但不会删除磁盘镜像文件。 **基本语法**: ```bash diff --git a/virtrust/src/virtrust/api/domain.cpp b/virtrust/src/virtrust/api/domain.cpp index 7600325ac6cb58494eed09f27959107dc2157792..13fbd023f83db3e696659b0f771c3d44fd8b79cd 100644 --- a/virtrust/src/virtrust/api/domain.cpp +++ b/virtrust/src/virtrust/api/domain.cpp @@ -498,7 +498,7 @@ bool CompareTsbVirtState(int tsb, int virt) { switch (virt) { case VIR_DOMAIN_RUNNING: - return tsb == 1; + return tsb == VM_RUNNING; case VIR_DOMAIN_NOSTATE: case VIR_DOMAIN_BLOCKED: case VIR_DOMAIN_PAUSED: @@ -506,7 +506,7 @@ bool CompareTsbVirtState(int tsb, int virt) case VIR_DOMAIN_SHUTOFF: case VIR_DOMAIN_CRASHED: case VIR_DOMAIN_PMSUSPENDED: - return tsb == 0; + return tsb == VM_SHUTUP; default: return false; } diff --git a/virtrust/src/virtrust/link/migration_session.cpp b/virtrust/src/virtrust/link/migration_session.cpp index 1003baea19da5d1c40d5360508aa2487062f7b3c..b77b7bdc8530b059cf18b6484b5613c9926853a9 100644 --- a/virtrust/src/virtrust/link/migration_session.cpp +++ b/virtrust/src/virtrust/link/migration_session.cpp @@ -773,7 +773,7 @@ MigrateSessionRc MigrationSession::OnTransferDataRequestReceived(const protos::V // 导入服务端发来的虚拟机描述信息 auto protosDesc = request->vtpcminfo(); auto vmInfo = DescriptionFromProto(protosDesc); - vmInfo.state = VIR_DOMAIN_SHUTOFF; + vmInfo.state = VM_SHUTUP; VIRTRUST_LOG_DEBUG("|domain name: {}|TSB: CreateVRoot start", domainName_); ret = CreateVRoot(&vmInfo); if (ret != 0) { diff --git a/virtrust/src/virtrust/utils/foreign_mounter.cpp b/virtrust/src/virtrust/utils/foreign_mounter.cpp index 7f3a4a152332487b044f94e747db03bf5233cf3d..2fbd30d4acad13bb6d4e6fdd21d641eee93bd5a7 100644 --- a/virtrust/src/virtrust/utils/foreign_mounter.cpp +++ b/virtrust/src/virtrust/utils/foreign_mounter.cpp @@ -250,7 +250,7 @@ std::string VerifyConfig::GetGrubVersion(ForeignMounter &mounter) { // 未找到 if (grubVersion.empty()) { - VIRTRUST_LOG_ERROR( + VIRTRUST_LOG_WARN( "|GetGrubVersion|END|||Failed to extract grub version, not found or has no following line in {}.", GetGrubPath()); return ""; @@ -344,6 +344,7 @@ ForeignMounterRc ForeignMounter::Mount(std::string_view imgPath, size_t osIndex) size_t osCnt = CountStrings(roots); if (osIndex >= osCnt) { VIRTRUST_LOG_ERROR("|Mount|END|returnF||There are {} os in image, index out of range: {}.", osCnt, osIndex); + GuestfsFreeStringList(roots); return ForeignMounterRc::ERROR; } @@ -384,6 +385,7 @@ ForeignMounterRc ForeignMounter::MountFilesystems(const std::string &root) int ret = libguestfs_.guestfs_mount_ro(handle_, device.c_str(), mountpoint.c_str()); if (ret == -1) { VIRTRUST_LOG_ERROR("|MountFilesystems|END|returnF||Mount {} to {} failed.", device, mountpoint); + GuestfsFreeStringList(mountpoints); return ForeignMounterRc::ERROR; } }