Home

【vCenter】vCenter删除无效的数据存储

如果 vCenter 中残留了无效数据存储,且无法通过“卸载数据存储”或“删除数据存储”正常移除,就需要进一步确认它是否被数据库中的对象引用。只有常规方法都失败时,才考虑数据库层面的清理。

风险说明

数据库直改属于高风险操作,执行前必须先备份 vCenter 数据库,并确认删除目标确实是无效对象。

操作步骤

  1. SSH 登录 VCSA。
  2. 执行下面的命令进入数据库工具:
/opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres
  1. 执行 \\d 查看表结构,确认数据库访问正常。
  2. 先根据数据存储名称查询对应的对象 ID:
SELECT id FROM vpx_entity WHERE name = 'InvalidDatastoreName';
VCDB=# SELECT id FROM vpx_entity WHERE name = 'Server LUN 01';
 id
----
 74
(1 row)
  1. 再查这个数据存储被哪些对象占用,导致 vCenter 不能自动删除:
SELECT * FROM vpx_ds_assignment WHERE ds_id=<ID>;
VCDB=# SELECT * FROM vpx_ds_assignment WHERE ds_id=74;
 ds_id | entity_id | accessible | mount_path | mount_id | mount_mode | mounted
-------+-----------+------------+------------+----------+------------+---------
    74 |        24 |            |            |          |            |
(1 row)

继续查找占用对象

根据 entity_id 继续查找引用该数据存储的对象名称:

SELECT * FROM vpx_entity WHERE id=<ID>;
VCDB=# SELECT * FROM vpx_entity WHERE id=24;
 id |     name     | type_id | parent_id
----+--------------+---------+-----------
 24 | Win2012R2TMP |       0 |        80
(1 row)

两种处理方向

  1. 优先删除占用对象,让 vCenter 自动把无效数据存储清理掉。
  2. 如果上一步无法处理,再考虑在数据库中直接删除数据存储关联记录。

数据库层面的删除命令如下:

DELETE FROM vpx_ds_assignment WHERE ds_id=<ID>;
DELETE FROM vpx_datastore WHERE id=<ID>;
DELETE FROM vpx_vm_ds_space WHERE ds_id=<ID>;

结果

删除完成后,重启 VCSA,数据存储通常即可从 vCenter 中消失。

补充说明

  • 能通过正常对象清理解决,就不要直接删数据库记录。
  • 删除前一定要确认 ID 对应的是目标无效数据存储,而不是仍在使用中的正常对象。
VMware 存储