VMKFSTOOLS –Punchzero | Shrink VMDK
Merhaba,
Virtual machine’lere disk verilirken genellikle az yer kaplaması açısından Thin disk veriliyor. Thin disk’ler, diğer disk method’larından farklıdır. Belirttiğiniz alanı datastore’dan allocated etmezler. Örneğin bir virtual machine’e 20GB thin disk ekliyorsunuz. İlk olarak bu disk’in datastore’da kaplayacağı alan 0 bayt olacaktır. Bu disk’in içerisine veri yazıldıkta disk büyümeye başlayacaktır. Ben disk içerisine 5GB’lık bir dosya kopyaladığımda bu disk aynı zamanda datastore’da da 5gb yer kaplayacaktır. Peki disk’in içerisinden 5GB’ı sildiğimizde bu disk datastore’da yine 0 bayt mı kaplayacaktır? Tabiki hayır.
ESXi üzeirnde bir thin, thick ile oluşturulmuş virtual machine’in disk’lerini küçültmek için vmkfstools komutlarını kullanabilirsiniz.
Ben bunun örneğini kendi demo ortamımdan göstereceğim. Üzerinde birtane thin disk olan virtual machine’ini inceliyoruz. İşletim sistemi olarak Redhat Linux kullandım.
/vmfs/volumes/53a07518-ef6f2cb9-39a3-001cc4dfef98/Linuxtest # du -ah 8.0K ./Linuxtest.vmx 0 ./Linuxtest.vmxf 0 ./Linuxtest.vmsd 1.7G ./Linuxtest-flat.vmdk 0 ./Linuxtest.vmdk 1.0M ./Linuxtest.nvram 1.0M ./vmware-1.log 1.0M ./vmware-2.log 1.7G .
Virtual machine’i ilk olarak kurduğumuzda disk’in boyutu 1.7Gb olarak gözükmekte. Aşağıdaki komut ile ben 500mb boyutunda bir dosya oluşturuyorum.
dd if=/dev/zero of=test.file bs=500000000 count=1
Yukarıdaki komut ile dosya oluşturduktan sonra ESXi’ın SSH’ından tekrar du -ah komutunu çalıştırıyoruz.
/vmfs/volumes/53a07518-ef6f2cb9-39a3-001cc4dfef98/Linuxtest # du -ah 8.0K ./Linuxtest.vmx 0 ./Linuxtest.vmxf 0 ./Linuxtest.vmsd 2.2G ./Linuxtest-flat.vmdk 0 ./Linuxtest.vmdk 1.0M ./Linuxtest.nvram 1.0M ./vmware-1.log 1.0M ./vmware-2.log 1.0M ./vmware.log 2.2G . /vmfs/volumes/53a07518-ef6f2cb9-39a3-001cc4dfef98/Linuxtest #
du-ah komutu ile görüldüğü gibi vmdk dosyası 2.2GB olmuş gözüküyor. Şimdi işletim sistemi içerisinde oluşturduğumuz dosyayı silin ve tekrar du -ah komutunu çalıştırın. VMDK boyutu değişmeyecektir.
Öncelikle Virtual machine’i shutdown konumuna getiriyoruz. Ardından ESXi host’a SSH ile bağlanıyoruz ve aşağıdaki komutu çalıştırıyoruz. Tabi komutu çalıştırırken vmdk’nın bulunduğu dizinde olmanız gereklidir.
# vmkfstools --punchzero Linuxtest.vmdk
Komutu çalıştırdıktan sonra bize aşağıdaki gibi bir sonuç çıkarıyor.
Not: Bu komutu çalıştırdıktan sonra işlemin bitme süresi tamamen vmdk’nın boyutuna bağlı olarak değişecektir.
/vmfs/volumes/53a07518-ef6f2cb9-39a3-001cc4dfef98/Linuxtest # vmkfstools --punchzero Linuxtest.vmdk vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576 Hole Punching: 100% done.
Hole Punhing 100% olduğunda işlemimiz tamamlanmış oluyor.
/vmfs/volumes/53a07518-ef6f2cb9-39a3-001cc4dfef98/Linuxtest # du -ah 8.0K ./Linuxtest.vmx 0 ./Linuxtest.vmxf 0 ./Linuxtest.vmsd 1.7G ./Linuxtest-flat.vmdk 0 ./Linuxtest.vmdk 1.0M ./Linuxtest.nvram 1.0M ./vmware-1.log 1.0M ./vmware-2.log 1.0M ./vmware-3.log 1.0M ./vmware.log 1.8G . /vmfs/volumes/53a07518-ef6f2cb9-39a3-001cc4dfef98/Linuxtest #
du -ah komutunu tekrar çalıştırdığımızda ilk oluşturduğumuz boyutu görüyoruz.
Burada şunu belirtmek istiyorum. Siz bu işlemi isterseniz farklı yöntemler ile de yapabilirsiniz. Virtual machine’i storage vmotion ile thin disk’e çevirerekte bu işlemi gerçekleştirebilirsiniz. Ancak bazı kullanıcılar datastore değiştirmeden bu işlemi yapmak istiyor oyüzden bunu anlatma gereği duydum.
Umarım faydalı olmuştur.
İyi çalışmalar.
merhabalar. bahsettiğiniz gibi uygulama yapıyorum fakat diskin boyutu ile kullanılan alan arasında halen bir tutarsızlık var. Centos üzerinde used space 55 gb görünüyor fakat vmdk file 160 gb civarında. &100 işlem başarılı herhangi bir hata da almıyorum fakat bir türlü küçültemiyorum diskin kapladığı alanı.
Merhaba vmkfstools -K Linuxtest.vmdk böyle yapman gerek
Elinize emeğinize sağlık.
Verdiğiniz yönergeler ile disklerde gerekli boşluklar esxi datastore yansıdı.
Rica ederim 🙂