Troubleshoot vSphere : Size Thin VMDK Lebih Besar Dibanding Data pada VM Linux

Seperti yang kita ketahui, di dalam virtualisasi terdapat 2 tipe virtual harddisk yang bisa digunakan, yaitu thin & thick. Berikut adalah sedikit insight mengenai kedua tipe virtual harddisk tersebut.

Thick merupakan tipe virtual harddisk yang langsung mengalokasikan kapasitas virtual HDD sesuai dengan besaran yang ditentukan saat proses pembuatan VM. Misalnya VM baru dibuat dengan alokasi virtual HDD sebesar 10 GB, maka kapasitas HDD secara fisik akan langsung berkurang 10 GB (Digunakan untuk alokasi virtual HDD). Walaupun virtual HDD tersebut belum digunakan sampai 10 GB, misalnya baru digunakan 1 GB saja.

Sedangkan, thin merupakan tipe virtual harddisk yang tidak langsung mengalokasikan kapasitas virtual HDD saat pembuatan VM. Misalnya VM baru dibuat dengan alokasi virtual HDD sebesar 10 GB, maka kapasitas HDD secara fisik tidak akan langsung berkurang sebesar 10 GB, melainkan hanya berkurang sebesar kapasitas yand dibutuhkan saja. Jika kapasitas yang dibutuhkan saat pembuatan VM hanya 1 GB maka kapasitas HDD secara fisik juga akan berkurang sebesar 1 GB, walaupun kapasitas yang dialokasikan kepada virtual HDD tersebut adalah 10 GB sekalipun.

Secara prinsip virtual HDD tipe thick memiliki kecepatan yang lebih kencang dibandingkan dengan yang thin, karena proses alokasi sudah dilakukan saat awal proses pembuatan VM (Dengan konsekuensi, proses pembuatan VM thick lebih lama dibandingkan VM thin). Sedangkan pada tipe thin, proses alokasi akan selalu dilakukan pada saat ada penambahan data baru di sisi VM.

Walaupun demikian, tipe thin ini juga bagus digunakan pada server virtualisasi yang kapasitas fisiknya tidak terlalu besar, karena berapapun kapasitas virtual HDD yang dialokasikan, kapasitas akan berkurang sesuai dengan kapasitas yang digunakan (Bukan berkurang sesuai dengan kapasitas yang dialokasikan). Selain itu proses pembuatan VM thin juga lebih cepat karena tidak ada proses alokasi.

Hanya saja, VM thin ini memiliki 1 kekurangan yang menurut saya sangat mengganggu. Kekurangannya adalah VMDK (File virtual HDD) thin tidak bisa menyesuaikan besaran kapasitasnya apabila ada penghapusan data pada VM bersangkutan. Seperti inilah contoh kasus terkait dengan kekurangan yang saya maksud.

  • Sebelum penghapusan data
    • Data VM Linux sebesar 5 GB
    • Size VMDK (File virtual HDD) sebesar 5 GB (Sama dengan data pada VM Linux)
    • Menghapus data pada VM Linux sebesar 3 GB
  • Setelah penghapusan data
    • Data VM Linux sebesar 2 GB
    • Size VMDK (File virtual HDD) masih sama, yaitu 5 GB (Tidak dengan data pada VM Linux)

Padahal seharusnya size VMDK menyesuaikan data yang ada pada VM Linux, yaitu berkurang menjadi 2 GB. Tetapi karena tipe virtual HDD yang digunakan adalah thin, maka penyesuaian di sisi VMDK tidak bisa dilakukan.

Jadi secara prinsip alokasi pada virtual HDD thin hanya berfungsi saat penambahan data saja, dan tidak berfungsi saat ada pengurangan data (VMDK tidak akan disesuaikan jika ada pengurangan data).

Maka dari itu, perlu adanya provisioning secara manual pada VMDK yang sudah terlanjur besar, supaya kapasitasnya sesuai dengan besaran data asli yang ada pada VM. Berikut adalah langkah-langkah untuk melakukannya.

Persiapan

  • Enable SSH Services
  • Login via web browser dengan user root
  • Pilih menu Manage | Services
  • Start service ESXi Shell dan SSH

Provisioning VMDK

  • Akses console VM yang akan di provisioning
  • Buka terminal VM Linux
  • Cek kapasitas HDD VM dengan perintah berikut
    # df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            963M     0  963M   0% /dev
    tmpfs           198M  1.4M  196M   1% /run
    /dev/sda1        48G  9.0G   37G  20% /
    tmpfs           986M   76K  986M   1% /dev/shm
    tmpfs           5.0M     0  5.0M   0% /run/lock
    tmpfs           986M     0  986M   0% /sys/fs/cgroup
    /dev/loop0       97M   97M     0 100% /snap/core/9804
    /dev/loop1       97M   97M     0 100% /snap/core/9665
    tmpfs           198M   28K  197M   1% /run/user/123
    tmpfs           198M     0  198M   0% /run/user/0
  • Misalnya disini saya akan melakukan provisioning pada partisi /. Sebagai informasi, kapasitas partisi / sebelumnya sudah mencapai 17 GB, lalu saya melakukan penghapusan sampai menjadi 9 GB saja
  • Catat juga besaran kapasitas yang available pada partisi tersebut, misalnya available pada partisi VM kali ini adalah 37 GB
  • Sekarang coba bandingkan size VMDK VM tersebut pada datastore vSphere
  • Terlihat bahwa size file VMDK jauh lebih besar (17 GB) jika dibandingkan dengan size data pada VM (9 GB). Hal ini terjadi karena size data pada VM pernah mencapai 17 GB
  • Kembali ke terminal VM
  • Masuk ke direktori utama partisi yang akan di provisioning, dalam contoh kali ini saya akan provisioning partisis /. Untuk masuk ke direktori tertentu bisa dilakukan dengan perintah cd (lokasi-direktori)
    # cd /
  • Selanjutnya adalah membuat file zero blocks
  • Untuk file zero blocks sebenarnya bisa saja kita buat sesuai dengan kapasitas yang available, tetapi tidak rekomendasi karena yang akan kita provisioning kali ini adalah partisi utama Linux (Sistem Linux bisa bermasalah apabila kapasitas availablenya 0). Rekomendasi dari saya besaran file zero blocks bisa menggunakan hitungan, kapasitas availabe dikurangi 2 GB. Misalnya dalam kasus kali ini, 37 – 2 = 35 GB
  • Konversikan alokasi file zero blocks ke dalam bentuk MB, dengan hitungan (Besaran GB) x 1024. Misalnya dalam kasus kali ini, 35 x 1024 = 35840 MB
  • Lalu buat file zero blocks dengan perintah “dd bs=1M count=(besaran-zero-blocks-dalam-satuan-MB) if=/dev/zero of=zero” (Pada langkah kali ini kapasitas VM akan dipenuhi oleh zero blocks), lalu tunggu proses generate file zero blocks selesai
    # dd bs=1M count=35840 if=/dev/zero of=zero
    35840+0 records in
    35840+0 records out
    37580963840 bytes (38 GB, 35 GiB) copied, 356.648 s, 105 MB/s
  • Setelah itu, shutdown VM Linux
  • Remote VMware vSphere tempat VM Linux via SSH. Jika menggunakan Windows bisa menggunakan putty, atau jika menggunakan Linux dan MacOS bisa memasukkan perintah ssh root@(IP vSphere host) di terminal
  • Masuk ke direktori tempat penyimpanan VM dengan perintah “cd /vmfs/volumes/(nama-datastore)/(nama-vm)”
    # cd /vmfs/volumes/datastore80.3/192.168.11.201-Ubuntu-Raihan/
    # ls
    192.168.11.201-Ubuntu-Raihan-6bc03b6b.hlog
    192.168.11.201-Ubuntu-Raihan-aux.xml
    192.168.11.201-Ubuntu-Raihan-ctk.vmdk
    192.168.11.201-Ubuntu-Raihan-flat.vmdk
    192.168.11.201-Ubuntu-Raihan.nvram
    192.168.11.201-Ubuntu-Raihan.vmdk
    192.168.11.201-Ubuntu-Raihan.vmsd
    192.168.11.201-Ubuntu-Raihan.vmx
    192.168.11.201-Ubuntu-Raihan.vmxf
    vmware-65.log
    vmware-66.log
    vmware-67.log
    vmware-68.log
    vmware-69.log
    vmware-70.log
    vmware.log
    vmx-192.168.11.201-Ubuntu-Raihan-2651018093-1.vswp
    
  • Yang perlu diperhatikan adalah file dengan ekstensi .vmdk (Abaikan file dengan nama …..-flat.vmdk)
  • Disini saya akan provisioning file VMDK yang pertama. Sebagai informasi VMDK selanjutnya akan diberi nama dengan pola nama-vm_1.vmdk, nama-vm_2.vmdk dan seterusnya
  • Selanjutnya adalah melakukan provisioning file VMDK dengan perintah “vmkfstools -K (nama-vm).vmdk”
    # vmkfstools -K 192.168.11.201-Ubuntu-Raihan.vmdk
    vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
    Hole Punching: 10% done.
  • Tunggu sampai proses provisioning selesai
  • Lalu cek kembali size VMDK pada datastore vSphere
  • Terlihat bahwa size VMDK sudah sama ataupun mendekati dengan kapasitas yang ada di VM.
  • Terakhir, nyalakan kembali VM Linux lalu hapus file zero blocks yang tadi sudah digenerate
    # cd /
    # rm zero

Leave a Reply

Your email address will not be published. Required fields are marked *