VMware vCenter ortamlarında zaman zaman bir sanal makine ESXi host üzerinden kaldırılmış olmasına rağmen vCenter envanterinde görünmeye devam edebilir. Bu tür kayıtlar genellikle orphaned, inaccessible veya yarım kalmış bir VM nesnesi olarak karşımıza çıkar. Normal şartlarda bu kayıtlar vSphere Client üzerinden Remove from Inventory seçeneği kullanılarak kaldırılabilir. Ancak bazı durumlarda VM’e ait kayıt vCenter veritabanında kaldığı için arayüz üzerinden yapılan silme işlemi başarısız olabilir.
Bu çalışmada vCenter envanterinde aşağıdaki şekilde görünen VM kaydı incelenmiştir;
oc4prnfs02-partial (orphaned)

Yapılan kontroller sonucunda bu nesnenin artık aktif olarak kullanılmadığı ve yalnızca vCenter üzerinde eski bir envanter kaydı olarak kaldığı görülmüştür. Amaç çalışan sistemlere herhangi bir müdahalede bulunmadan yalnızca bu stale/orphaned kaydı vCenter veritabanından temizlemektir.
Mevcut Durumun Kontrol Edilmesi
İlk olarak vCenter veritabanında VM adına göre arama yapılmıştır.
select id, name
from vpx_entity
where name like '%oc4prnfs02%';
Sorgu sonucunda aynı isim yapısına sahip iki farklı kayıt görülmüştür:
id | name
------+--------------------
8419 | E-oc4prnfs02
3049 | oc4prnfs02-partial
Burada özellikle dikkat edilmesi gereken nokta, iki farklı nesnenin birbirinden ayrılmasıdır. Silinecek kayıt:
VM Adı : oc4prnfs02-partial
ID : 3049
MoRef : vm-3049
Ortamda kalması gereken kayıt ise:
ID : 8419
Adı : E-oc4prnfs02
olarak belirlenmiştir. Bu nedenle yapılacak tüm işlemlerde yalnızca 3049 numaralı nesne hedef alınmalıdır.
İşlem Öncesi Kontroller
vCenter veritabanına doğrudan müdahale etmek rutin bir yönetim yöntemi değildir. Bu işlem ancak VM’in gerçekten orphaned olduğu doğrulandıktan ve standart envanter temizleme yöntemleri sonuç vermediğinde uygulanmalıdır. İşleme başlamadan önce VCSA üzerinde güncel bir backup alınması veya uygun bakım koşullarında geri dönüş sağlayacak bir snapshot oluşturulması önemlidir. Ayrıca VM’in herhangi bir ESXi host üzerinde çalışmadığı, aktif bir datastore kaynağı kullanmadığı ve başka bir VM ile karıştırılmadığı mutlaka kontrol edilmelidir. Bu örnekte olduğu gibi birbirine benzeyen VM isimleri varsa, silinecek ID’nin işlem öncesinde tekrar doğrulanması özellikle önemlidir.
Öncelikle Standart Yöntem Denenmelidir
Veritabanında işlem yapmadan önce VM vSphere Client üzerinden kontrol edilmelidir.
İlgili VM üzerinde:
Right Click
→ Remove from Inventory
seçeneği kullanılabiliyorsa öncelikle bu yöntem tercih edilmelidir. VM bu şekilde kaldırılabiliyorsa veritabanında manuel işlem yapılmasına gerek yoktur. Ancak nesne arayüz üzerinden kaldırılamıyor ve VM’in artık kullanılmadığı kesin olarak doğrulanmışsa VCDB üzerinde temizleme işlemine geçilebilir.
vCenter Veritabanına Bağlantı
VCSA sunucusuna root kullanıcısı ile SSH bağlantısı sağlanır:
ssh root@vcenter01
Bash shell aktif değilse:
shell.set --enabled true
shell
komutları kullanılabilir.
Ardından vCenter PostgreSQL veritabanına bağlanılır:
/opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres
Bağlantı başarılı olduğunda aşağıdaki ekran görülür:
VCDB=#
Silinecek Nesnenin Tekrar Doğrulanması
Veritabanında herhangi bir silme işlemi yapılmadan önce hedef nesnenin bir kez daha kontrol edilmesi önerilir.
select id, name, type_id, parent_id
from vpx_entity
where id in (3049,8419);
Ayrıca VM’e ait kayıt VPX_VM tablosu üzerinden de kontrol edilebilir:
select *
from vpx_vm
where id=3049;
Bu kontrollerin amacı işlem yapılacak nesnenin gerçekten:
3049 | oc4prnfs02-partial
olduğunu teyit etmektir.
VPXD Servisinin Durdurulması
Veritabanında manuel işlem yapılırken vCenter’ın aynı VM nesnesi üzerinde değişiklik yapmasını engellemek için vmware-vpxd servisi durdurulmalıdır. Öncelikle PostgreSQL oturumundan çıkılır:
\q
Ardından:
service-control --stop vmware-vpxd
komutu çalıştırılır.
Servisin gerçekten durduğu aşağıdaki komutla kontrol edilir:
service-control --status vmware-vpxd
Beklenen durum:
Stopped
Bu aşamada vSphere Client üzerindeki bazı yönetim işlemlerinin geçici olarak kullanılamaması normaldir.
Orphaned VM Kaydının Temizlenmesi
VPXD servisi durdurulduktan sonra VCDB’ye tekrar bağlanılır:
/opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres
Daha sonra yalnızca 3049 ID’li VM’e ait ilişkili kayıtlar temizlenir.
delete from VPX_COMPUTE_RESOURCE_DAS_VM
where VM_ID=3049;
delete from VPX_COMPUTE_RESOURCE_DRS_VM
where VM_ID=3049;
delete from VPX_COMPUTE_RESOURCE_ORC_VM
where VM_ID=3049;
delete from VPX_VM_SGXINFO
where VM_ID=3049;
delete from VPX_GUEST_DISK
where VM_ID=3049;
delete from VPX_VM_VIRTUAL_DEVICE
where ID=3049;
delete from VPX_VM_DS_SPACE
where VM_ID=3049;
delete from VPX_NON_ORM_VM_CONFIG_INFO
where ID=3049;
delete from VPX_NORM_VM_FLE_FILE_INFO
where VM_ID=3049;
delete from VPX_VDEVICE_BACKING_REL
where VM_ID=3049;
delete from VPX_VIRTUAL_DISK_IOFILTERS
where VM_ID=3049;
delete from VPX_VM_STATIC_OVERHEAD_MAP
where VM_ID=3049;
delete from VPX_VM_TEXT
where VM_ID=3049;
delete from VPX_VM
where ID=3049;
delete from VPX_ENTITY
where ID=3049;
delete from VPX_DVPORT
where connectee='vm-3049';
Komutların bazıları aşağıdaki sonucu döndürebilir:
DELETE 0
Bu sonuç her zaman bir hata olduğu anlamına gelmez. İlgili VM için o tabloda herhangi bir kayıt bulunmadığını gösterir. Bazı tablolarda ise:
DELETE 1
sonucu alınabilir. Bu da ilgili kaydın başarıyla silindiğini ifade eder.
Temizleme İşleminin Kontrolü
Silme işlemleri tamamlandıktan sonra VM’in ana kaydının kaldırıldığı doğrulanmalıdır.
select id, name
from vpx_entity
where id in (3049,8419);
İşlem başarılı olduysa sonuçta yalnızca aşağıdaki kayıt kalmalıdır;
id | name
------+----------------
8419 | E-oc4prnfs02
3049 ID’li oc4prnfs02-partial kaydı artık görünmemelidir.
Ek olarak:
select *
from vpx_vm
where id=3049;
sorgusunun:
(0 rows)
dönmesi beklenir. VM’e ait eski bir Distributed Switch port ilişkisi kalıp kalmadığı da şu sorguyla kontrol edilebilir:
select *
from vpx_dvport
where connectee='vm-3049';
Burada da ideal sonuç:
(0 rows)
olmalıdır.
VPXD Servisinin Yeniden Başlatılması
Veritabanı kontrolleri tamamlandıktan sonra PostgreSQL oturumundan çıkılır:
\q
Ardından VPXD servisi yeniden başlatılır:
service-control --start vmware-vpxd
Servisin durumu kontrol edilir:
service-control --status vmware-vpxd
Gerekirse tüm vCenter servislerinin genel durumu da aşağıdaki komutla kontrol edilebilir:
service-control --status --all
Servisler normal duruma geldikten sonra vSphere Client tekrar açılır veya mevcut oturum yenilenir. Daha önce envanterde görünen:
oc4prnfs02-partial (orphaned)
nesnesinin artık görünmemesi beklenir. Buna karşılık aktif olan:
E-oc4prnfs02
nesnesinin ortamda kalmaya devam ettiği doğrulanmalıdır.
Neden Sadece VPX_ENTITY Kaydı Silinmemelidir?
İlk bakışta yalnızca aşağıdaki sorgunun yeterli olacağı düşünülebilir:
delete from vpx_entity
where id=3049;
Ancak vCenter bir VM’e ait bilgileri yalnızca VPX_ENTITY tablosunda tutmaz. VM’in sanal donanım bilgileri, diskleri, datastore ilişkileri, DRS/DAS bilgileri, network bağlantıları ve diğer yapılandırma verileri farklı tablolarda tutulur. Bu nedenle yalnızca VPX_ENTITY tablosundaki ana kaydı silmek, VM’e ait bazı ilişkili kayıtların veritabanında kalmasına neden olabilir. Bu durum ilerleyen dönemlerde envanter tutarsızlıkları, network ilişkisi problemleri veya farklı vCenter yönetim hataları şeklinde karşımıza çıkabilir. Bu nedenle önce VM’e ait ilişkili kayıtların temizlenmesi, ardından VPX_VM ve VPX_ENTITY kayıtlarının kaldırılması daha güvenli bir yöntemdir.
Bu çalışmada vCenter envanterinde:
oc4prnfs02-partial (orphaned)
olarak görünen ve standart yöntemlerle kaldırılamayan eski bir VM kaydı incelenmiştir. Yapılan veritabanı kontrollerinde nesnenin:
ID : 3049
MoRef : vm-3049
olduğu belirlenmiştir. Benzer isim taşıyan ancak farklı ve korunması gereken:
8419 | E-oc4prnfs02
nesnesine herhangi bir müdahalede bulunulmamıştır. vmware-vpxd servisi kontrollü şekilde durdurulduktan sonra yalnızca 3049 ID’li orphaned VM’e ait ilişkili kayıtlar temizlenmiş, işlem sonrasında servis yeniden başlatılmıştır. Son kontrollerde eski VM kaydının vCenter envanterinden kaldırıldığı ve diğer nesnelerin etkilenmediği doğrulanmıştır. Bu yöntem, ESXi üzerinde artık bulunmayan fakat vCenter envanterinde orphaned veya stale olarak görünmeye devam eden VM kayıtlarının, standart yöntemlerle temizlenemediği durumlarda uygulanabilir. Ancak doğrudan vCenter veritabanında işlem yapıldığı için uygulama öncesinde mutlaka geri dönüş planı oluşturulmalı, güncel backup alınmalı ve silinecek VM’in ID bilgisi kesin olarak doğrulanmalıdır.

