Blok tabanlı depolama uygulamalarında dosya sistemi depolama cihazı tarafından değil, host tarafından yönetilir. Bu nedenle, depolama cihazı genellikle bir dosyanın ne zaman silindiğini veya bir depolama biriminden taşındığını bilmez ve bu nedenle alanı ne zaman serbest bırakacağını bilmez. Bu davranış, bu alanın hemen başka bir cihaza/uygulamaya tahsis edilebildiği veya yalnızca kullanılabilir depolama havuzuna geri döndürülebildiği, thin provisioned ortamlarda (bugün neredeyse her yerde bulunur) özellikle zararlıdır. Silinen veya taşınan dosyalar tarafından tüketilen alana “dead space (ölü alan)” denir.
Data reduction teknolojisini kullanan depolama cihazları için bu ölü alan’ın geri kazanıldığından emin olmak son derece önemlidir. Ölü alan geri kazanılmazsa, depolama cihazı ne kadar alan kullanıldığını hatalı olarak bildirebilir, bu da host tarafından farklı alan kullanımı bildirilmesi nedeniyle karışıklığa ve gereksiz yere ek depolama cihazı satın alınmasına neden olabilir. Bu nedenle, bu alanı geri kazanmak ve depolama cihazının gerçekte ne kadar alan kullandığını görebilmek çok önemlidir.
UNMAP Nedir?
Alanı geri kazanmak için kullanılan özelliğe Space Reclamation adı verilir. Bu işlemi yaparken UNMAP adlı SCSI komutunu kullanır, bu nedenle bu işleme UNMAP de denir. Belirli bloklara artık host tarafından ihtiyaç duyulmadığını ve “geri alınabileceğini” depolama cihazına bildirir. Depolama cihazı daha sonra bu blokları depolama havuzuna geri kazandırabilir.
VMware Dead Space
Ölü alanı tanımlayabileceğimiz iki yer vardır:
VMFS: Bir sanal disk veya sanal makine silindiğinde (veya başka bir datastore’a taşındığında), o sanal diski veya sanal makineyi depolamak için kullanılan alan artık depolama cihazı üzerinde ölmüş olur. Depolama cihazı, bu alanın serbest bırakıldığın bilmediği için blokları ölü alana dönüştürür.
In-guest: Bir sanal disk üzerinde çalışan sanal makine içindeki guest file system’den bir dosya taşındığında veya silindiğinde, VMFS, bir bloğun artık sanal disk tarafından kullanılmadığını bilmez, sonuç olarak depolama cihazı da bilmez. Yani o alan artık ölü alandır.
VMFS Space Reclamation
VMFS ile alan kazanma, ESXi sürümüne bağlı olarak farklılık gösterir. VMware, ESXi 5.0’dan beri UNMAP’i çeşitli biçimlerde desteklemektedir.
vSphere 5.5 ve 6.0’da VMFS UNMAP, bir yönetici tarafından talep üzerine yürütülen manuel bir işlemdir. vSphere 6.5’te VMFS UNMAP, gerektiğinde yönetim müdahalesi olmaksızın ESXi tarafından yürütülen otomatik bir süreçtir.
vSphere 5.5’ten 6.0’a kadar VMFS UNMAP
vSphere 5.5 ve 6.0’da space reclamation için “esxcli” komutu ile UNMAP işlemi yapılabilir. Bir LUN’da SCSI UNMAP desteklenip desteklenmediğini kontrol etmek için aşağıdaki komutu kullanabiliriz:
esxcli storage core device vaai status get -d naa
naa.600601608c8039002e008a5cf3f747dc
VAAI Plugin Name: VMW_VAAIP_CX
ATS Status: supported
Clone Status: supported
Zero Status: supported
Delete Status: supported
Kullanılmayan blokları geri almak için aşağıdaki komutu kullanabiliriz:
esxcli storage vmfs unmap --volume-label=volume_label|--volume-uuid=volume_uuid --reclaim-unit=number
Bu komut aşağıdaki opsiyonları alır:
-l|–volume-label=volume_label
VMFS volume’ün UNMAP’e etiketi. Bu zorunlu bir argümandır. Bu değişkeni belirtirseniz, -u|–volume-uuid=volume_uuid kullanmayın.
-u|–volume-uuid=volume_uuid
UNMAP için VMFS biriminin UUID’si. Bu zorunlu bir argümandır. Bu argümanı belirtirseniz, -l|–volume-label=volume_label kullanmayın.
-n|–reclaim-unit=number
Yineleme başına UNMAP için VMFS bloklarının sayısı. Bu isteğe bağlı bir argümandır. Belirtilmezse, komut varsayılan olarak 200 değerini kullanır.
Örnek olarak, MyDatastore isimli ve 509a9f1f-4ffb6678-f1db-001ec9ab780e UUID’li bir VMFS volume’de şu şekilde kullanılabilir:
esxcli storage vmfs unmap -l MyDatastore
veya
esxcli storage vmfs unmap -u 509a9f1f-4ffb6678-f1db-001ec9ab780e
esxcli ile UNMAP yinelemeli bir süreçtir. Blok sayısı, her yinelemenin ne kadar büyük olduğunu belirtir. Bir blok sayısı belirtmezseniz, -n sayısı veya –reclaim-unit=number bağımsız değişkeni için varsayılan değer 200 blok olacaktır (her blok 1 MB’dir, bu nedenle her yineleme UNMAP’i bir seferde 200 MB’lik bir bölüme verir). Ancak bazı storage üreticileri cihazın SCSI UNMAP komutunu nasıl işlediğine bağlı olarak daha büyük veya daha küçük bir değer önerebilir. İşlem, boş alanın tamamı geri kazanılana kadar UNMAP’i VMFS biriminin boş alanına karşı çalıştırır. Boş alan blok sayısıyla tam olarak bölünemezse, son yinelemede blok sayısı kalan boşluk miktarına düşürülür.
Bu komut, .asyncUnmapFile pattern’ini kullanarak datasore’un en üst düzeyinde geçici gizli dosyalar oluşturur. Varsayılan olarak, geçici dosyalar için space reservation, VMFS dosya sisteminin blok boyutuna bağlıdır (varsayılan –reclaim-unit=200‘dür)
- 200 MB for 1 MB block VMFS3 / VMFS5
- 800 MB for 4 MB block VMFS3
- 1600 MB for 8 MB block VMFS3
Depolama aygıtı bu işlem için çok büyük değerleri işleyebilse bile ESXi, hedef VMFS volume’ün boş kapasitesinin %1’inden daha fazla blok sayısını artırmayı desteklemez. Sonuç olarak, UNMAP sırasında blok sayımı için best practice, boş alanın %1’inden büyük değildir.
Örnek olarak, bir VMFS volume’de 1.048.576 MB boş alan varsa, desteklenen en büyük blok sayısı 10.485’tir (her zaman aşağı yuvarlar). Daha büyük bir değer belirlerseniz, komut yine de kabul edilecektir, ancak ESXi, değeri varsayılan 200 MB’ye geri çevirecek ve bu da işlemi önemli ölçüde yavaşlatacaktır.
VMFS 5 bloklarının her biri 1 MB olduğundan, yalnızca bu kapasite megabayt olarak ifade edildiğinde, boş alanın %1’ini temel alan blok sayısı değerini hesaplamak zorunludur. Bu, belirli bir veri deposu için izin verilen en büyük blok sayısının basit ve doğru bir şekilde tanımlanmasına izin verecektir. GB veya TB kullanmak, yuvarlama hatalarına ve sonuç olarak çok büyük bir blok sayısı değerine yol açabilir. Bu sayıyı hesaplamak için ondalık sayıları her zaman MB’ye yakın en düşük değere yuvarlayın. En kısa UNMAP süresi için büyük bir blok sayısı kullanın.
Bir UNMAP işlemi yavaş görünüyorsa, blok sayısı değerinin geçersiz kılınıp kılınmadığını kontrol edebilirsiniz. Hedef ESXi host üzerindeki /var/log/ dizinindeki hostd.log dosyasını kontrol edebilirsiniz. Her UNMAP işlemi için, her yineleme için blok sayısını belirleyen bir dizi mesaj olacaktır. Logları inceleyin ve geri alınan VMFS volume’ün UUID’sini gösteren bir satır arayın, satır aşağıdaki örneğe benzeyecektir:
Unmap: Async Unmapped 5000 blocks from volume 545d6633-4e026dce-d8b2-90e2ba392174
ESXi 5.5 Patch 3 ve sonraki sürümlerinden itibaren, %75 veya daha fazla dolu bir veri deposuna yönelik herhangi bir UNMAP işlemi, komutta belirtilen herhangi bir blok sayısına bakılmaksızın 200 blok sayısını kullanır.
vSphere 6.5’te VMFS UNMAP
ESXi 6.5 sürümünde VMware, VMFS volume’leri için otomatik UNMAP desteğini tanıttı. ESXi 6.5, VMFS’in yeni bir sürümünü, sürüm 6’yı tanıttı. VMFS-6 ile, tüm VMFS-6 volume’leri için UNMAP önceliği adı verilen yeni bir ayar vardır. Bu, varsayılanda Low olarak ayarlanır.

vSphere 6.5 ile gelen otomatik UNMAP asenkron bir işlemdir, reclamation hemen gerçekleşmez ve tamamlanması genellikle 12 ila 24 saat sürer. Her ESXi 6.5 host’da, erişimleri olan tüm VMFS-6 volume’lerinde yer kazanmak için birlikte çalışacak bir UNMAP “crawler” vardır. Herhangi bir nedenle alanın hemen geri alınması gerekiyorsa, manuel esxcli UNMAP işlemi çalıştırılabilir.
Bir datastore üzerinde sanal makine oksa otomatik UNMAP işlemi çalışmayacaktır. Burada alan kazanmak istersek esxcli UNMAP işlemi yapabiliriz.
vSphere 6.7 ve sonraki sürümlerinde VMFS UNMAP
ESXi 6.5’te bulunan özelliklere ek olarak VMware, ESXi 6.7 ile birlikte otomatik UNAMP’i kullanmak için yeni bir seçenek ekledi.
ESXi 6.7 ve sonraki sürümlerinde otomatik UNMAP için kullanılabilen iki yöntem:
- fixed (ESXi 6.7 ile birlikte geldi)
- priority (medium / high)
ESXi 6.5’te, otomatik space reclamation (priority based) için yalnızca “Low” olarak bir seçenek vardı. ESXi 6.7 ile birlikte “medium” ve “high” seçenekleri de eklendi.
Space Reclamation Priority | Description |
---|---|
None | UNMAP operasyonlarını disable eder. |
Low (default) | UNMAP komutlarını yaklaşık olarak saniyede 25-50 MB oranında gönderir. |
Medium | UNMAP komutlarını yaklaşık olarak saniyede 50-100 MB oranında gönderir. |
High | UNMAP komutlarını 100 MB üzerinde oranında gönderir. |
Yukarıdaki tabloda da belirtildiği gibi, öncelik bazlı (priority based) space reclamation süreci, reclamation hızı ile birlikte hangi seçeneği seçtiğinize bağlı olarak değişken bir süreçtir. Bu, datastore’ların mevcut yüküne ve alanın ne kadar hızlı kurtarılabileceğine bağlı olarak ESXi içinde esneklik sağlar.
ESXi 6.7 ile birlikte yeni bir “fixed” space reclamation method bulunmakta. Bu seçenek, UNMAP işlemlerinin MB/s olarak ne storage’a “fixed” rate olarak kadar çabuk geri kazandırılabileciğini belirler. 100 MB/s ile 2000 MB/s arasında bir seçenek belirlenebilir. Bu seçenek kullanılarak, eğer storage destekliyorsa, daha agresif değerler ile daha hızlı space reclamataion operasyonları yapılabilir.
VMFS 6 Datastore için space reclamation ayarları

Bir VMFS6 datastore oluşturduğunuzda, otomatik space reclamation için varsayılan parametreleri değiştirebilirsiniz. VMFS 6 datastore oluşturuken space reclamation için mevcut olan tek method önceliktir (priority). Fixed method kullanmak için datastore oluşturduktan sonra space reclamation ayarlarını düzenleyebilirsiniz.
Option | Description |
---|---|
Block size | Bir VMFS datastore'daki blok boyutu, maksimum dosya boyutunu ve dosyanın kapladığı alan miktarını tanımlar. VMFS6, 1 MB'lik blok boyutunu destekler. |
Space reclamation granularity | UNMAP işlemi için granularity belirtin. Unmap granularity, 1 MB olan blok boyutuna eşittir. 1 MB'den küçük boyuttaki depolama sektörleri geri alınmaz. |
Space reclamation priority | Low (default): space reclamation için priority yöntemini kullanın. UNMAP işlemini düşük bir öncelik oranında etkinleştirin. None: Datasore için space reclamation işlemlerini devre dışı bırakmak istiyorsanız bu seçeneği seçin. |
Daha yüksek bir UNMAP oranı için fixed space reclamation yöntemini kullanmak isterseniz, oluşturduğunuz datastore’a sağ tıklayın ve Edit Space Reclamation seçeneğini tıklayın. İstediğiniz seçeneği belirleyip kaydedin.

Priority (öncelik) seçeneğini Low’dan Medium veya High seçeneğine yükseltmek isterseniz bunu GUI üzerinden yapabilmek için bir seçenek bulunmadığından CLI ile komut satırı üzerinden yapmak zorundasınız. CLI ile priority, granularity ve diğer ayarları değiştirebilirsiniz.
Space reclamation parametrelerini ayarlamak için aşağıdaki komutu kullanıyoruz:
esxcli storage vmfs reclaim config set
Priority seçeneğini medium ayarlamak için:
esxcli storage vmfs reclaim config set --volume-label=DATASTORENAME --reclaim-priority=medium
Komut şu seçenekleri alır:
Option | Description |
---|---|
-b|--reclaim-bandwidth | Saniyede MB olarak space reclamation fixed bandwidth. |
-g|--reclaim-granularity | Bayt cinsinden otomatik space reclamation'ın minimum minimum granularity değeri. |
-m|--reclaim-method | Otomatik space reclamation yöntemi. Desteklenen seçenekler: priority fixed |
-p|--reclaim-priority | Otomatik space reclamation'ın önceliği. Desteklenen seçenekler: none low medium high |
-l|--volume-label | Hedef VMFS volume'ün etiketi. |
-u|--volume-uuid | Hedef VMFS volume'ün uuid'si |
Reclamation yöntemini fixed ve hızı saniyede 100 MB olarak ayarlamak için aşağıdaki gibi bir kullanım söz konusu olur:
esxcli storage vmfs reclaim config set --volume-label datastore_name --reclaim-method fixed -b 100
Space reclamation ayarlarını CLI ile komut satırından aşağıdaki gibi görebilirsiniz:
esxcli storage vmfs reclaim config get -l=VMFS_label|-u=VMFS_uuid
# esxcli storage vmfs reclaim config get -l my_datastore
Reclaim Granularity: 1048576 Bytes
Reclaim Priority: low