【vCenter】vCenter删除无效的数据存储
如果 vCenter 中残留了无效数据存储,且无法通过“卸载数据存储”或“删除数据存储”正常移除,就需要进一步确认它是否被数据库中的对象引用。只有常规方法都失败时,才考虑数据库层面的清理。
风险说明
数据库直改属于高风险操作,执行前必须先备份 vCenter 数据库,并确认删除目标确实是无效对象。
操作步骤
- SSH 登录 VCSA。
- 执行下面的命令进入数据库工具:
/opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres- 执行
\\d查看表结构,确认数据库访问正常。 - 先根据数据存储名称查询对应的对象 ID:
SELECT id FROM vpx_entity WHERE name = 'InvalidDatastoreName';VCDB=# SELECT id FROM vpx_entity WHERE name = 'Server LUN 01';
id
----
74
(1 row)- 再查这个数据存储被哪些对象占用,导致 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)两种处理方向
- 优先删除占用对象,让 vCenter 自动把无效数据存储清理掉。
- 如果上一步无法处理,再考虑在数据库中直接删除数据存储关联记录。
数据库层面的删除命令如下:
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对应的是目标无效数据存储,而不是仍在使用中的正常对象。