Mesin Virtual
Panel Mesin Virtual memungkinkan Anda mengontrol siklus hidup sistem operasi tamu, mengelola file konfigurasi, dan mengkloning sumber daya.
A. Operasi Status Dasar
- Dari daftar VM utama, Anda dapat memfilter berdasarkan status eksekusi saat ini: All States, Running, Stopped, Paused, atau Suspended.
- Pintasan tindakan (action shortcuts) memungkinkan administrator untuk menjalankan perintah status daya dengan cepat: Start, Stop (Graceful), Force Stop, Restart, atau Force Restart.
B. Mengakses Konsol Tamu (Guest Consoles)
- Memilih mesin virtual yang sedang berjalan memungkinkan Anda meluncurkan VNC Console interaktif secara langsung di dalam browser web.
- Ini menyediakan kontrol login sistem operasi grafis atau baris perintah tingkat rendah (
tty1), ideal untuk penyiapan awal, perbaikan jaringan, atau memeriksa hostname.
C. Mengubah Konfigurasi Perangkat Keras Virtual (Edit & XML Editing)
Ketika mesin virtual membutuhkan penyesuaian sumber daya, navigasikan ke panel tindakan Edit:
- Compute Options (Basic & Advanced): Sesuaikan pengaturan untuk Maximum Memory, Max vCPUs, CPU Pinning Configurations, Sockets, Cores, dan Threads. Anda juga dapat menentukan Mode CPU (misalnya,
host-passthrough) dan menentukan bendera (flags) lanjutan (misalnya, mengaktifkan fitur UEFI, Secure Boot, atau TPM). - Direct XML Editing: Untuk penyesuaian yang tepat di luar menu pilihan standar, pilih Edit XML. Ini memberikan akses langsung berbasis teks ke blok pemetaan definisi domain XML libvirt tamu (seperti memodifikasi
<domain type='kvm'>,<vcpu>,<memory>, atau definisi file pendukung secara langsung).
D. Template, Kloning, dan Snapshot
- Cloning VMs: Buat salinan duplikat dengan memulai tindakan Clone. Masukkan nama unik untuk klon baru tersebut, pilih target kumpulan penyimpanan tujuan, lalu pilih Guest identity (lihat bagian E). Klon selalu berupa salinan penuh dan independen dari setiap disk image VM sumber: setelah jadi, klon tidak bergantung pada sumbernya, dan makin besar disknya, makin lama proses kloning. Klon tertaut (linked/copy-on-write) tidak tersedia, dan snapshot milik sumber tidak ikut disalin ke klon. Block device host yang dipasang langsung ke sumber, disk baca-saja, dan image ISO tidak disalin: klon memakai device atau file yang sama dengan sumber, jadi jangan jalankan kedua VM bersamaan selama keduanya berbagi device yang dapat ditulis.
- Snapshots: Ambil citra pemulihan titik-waktu (point-in-time) dengan memilih Create Snapshot. Berikan nama snapshot yang unik (misalnya,
snap-01) dan catatan deskriptif opsional. Anda dapat memilih apakah ingin menyertakan memori runtime yang aktif di dalam status snapshot. - Templates: Ubah penyebaran (deployment) mesin virtual terstruktur yang ada menjadi konfigurasi template dasar statis melalui fitur Convert to Template, atau sebarkan mesin baru dari template yang telah diambil sebelumnya. Deploy dari template menawarkan pilihan Guest identity yang sama dengan kloning. Lihat Snapshots & Templates.
E. Identitas Tamu pada Klon (Guest Identity)
Salinan disk biasa juga menyalin semua hal yang dipakai sistem operasi tamu untuk membedakan dirinya dari mesin lain. Bila sumber dan salinan persisnya berjalan bersamaan, gejala yang biasa muncul:
- kedua VM mendapat alamat IP yang sama dari DHCP;
- klon dari VM yang dibangun dari cloud image menyala tanpa jaringan sama sekali;
- kedua VM menampilkan hostname yang sama, dan klien SSH tidak bisa membedakan keduanya dari host key-nya.
Pengaturan Guest identity pada dialog Clone menentukan hasilnya:
| Opsi | Hasil |
|---|---|
| Reset guest identity (recommended) | Klon dengan identitasnya sendiri. Vapor mengubah disk hasil salinan sebelum klon dinyalakan untuk pertama kali. VM sumber tidak pernah diubah. |
| Keep an exact copy | Salinan byte demi byte dari disk sumber. Gunakan untuk uji restore, untuk salinan yang disimpan untuk investigasi, atau untuk appliance yang lisensinya terikat pada machine ID. |
Reset guest identity terpilih secara default bila host mampu me-reset identitas. Bila tidak mampu, Keep an exact copy yang terpilih dan dialog menampilkan alasannya (lihat Kebutuhan host).
Apa yang diubah oleh Reset guest identity
- Machine ID:
/etc/machine-id(dan/var/lib/dbus/machine-idbila berupa file terpisah) mendapat ID acak baru. Server DHCP yang mengenali klien dari ID ini lalu memberi klon alamatnya sendiri. Machine ID yang berisiuninitialized(template yang disiapkan untuk boot pertama) dibiarkan apa adanya. - SSH host keys: setiap host key diganti dengan key baru dengan tipe dan ukuran yang sama. Klien yang pernah terhubung ke sumber akan melihat host key yang berbeda pada klon. Key DSA lama dihapus bila VM juga memiliki tipe key yang lebih baru. Key RSA yang lebih besar dari 4096 bit diganti dengan key 4096 bit, dan hasilnya memuat catatan tentang hal ini.
- Ikatan MAC jaringan (network MAC bindings): antarmuka jaringan klon mendapat alamat MAC baru. Konfigurasi jaringan yang menyebut alamat MAC sumber (netplan, NetworkManager, file
ifcfg, systemd-networkd, udev rules,/etc/network/interfaces) diperbarui ke alamat milik klon, sehingga antarmukanya bisa aktif. - DHCP leases: lease yang tersimpan dari sumber dihapus, sehingga klon meminta lease-nya sendiri.
- Random seed: random seed yang tersimpan diganti dengan data acak baru.
- Hostname: diambil dari nama klon, dalam huruf kecil. Setiap karakter selain huruf ASCII, angka, dan tanda hubung menjadi tanda hubung, tanda hubung yang berulang digabung menjadi satu, tanda hubung di awal dan akhir dihapus, lalu hasilnya dipotong menjadi paling banyak 63 karakter. Domain pada hostname sumber dipertahankan bila merupakan domain DNS yang valid:
web01.example.comyang dikloning sebagaiweb02menjadiweb02.example.com. Nama yang cocok pada baris loopback di/etc/hostsikut diperbarui. Bila tidak ada bagian nama klon yang dapat dipakai, atau tamu tidak memiliki/etc/hostname, hostname dibiarkan apa adanya.
Selain itu semuanya tetap seperti di sumber: akun pengguna dan kata sandi, SSH authorized keys milik pengguna, perangkat lunak dan driver yang terpasang, data aplikasi, serta alamat IP statis.
Alamat IP statis
Alamat IP statis dipertahankan, sehingga klon memiliki alamat yang sama dengan sumber. Kloning selesai dengan peringatan dan klon dibuat dengan autostart dimatikan. Ubah alamatnya sebelum kedua VM berjalan di jaringan yang sama, misalnya: biarkan sumber tetap mati, nyalakan klon, ubah alamatnya melalui VNC console, lalu nyalakan kembali sumber.
Hal lain yang perlu diperiksa pada klon yang sudah jadi
Klon tetap dibuat, dan hasilnya mencantumkan peringatan atau catatan bila:
- Sumber tergabung ke domain Active Directory atau Kerberos: klon masih memakai machine account milik sumber, yang dapat membuat sumber terkunci dari domain. Keluarkan klon dari domain lalu gabungkan kembali dengan nama barunya sebelum menghubungkannya ke jaringan.
- cloud-init mengelola hostname: cloud-init bisa memasang kembali hostname sumber pada setiap boot. Bila klon terus menampilkan nama sumber, ubah hostname pada konfigurasi cloud-init milik klon.
- Agen registrasi dan manajemen terkonfigurasi (Red Hat Subscription Manager, Ubuntu Pro, Puppet, Salt, Chef): klon masih membawa registrasi milik sumber. Daftarkan ulang klon tersebut.
Bila identitas tidak dapat di-reset
Bila Anda memilih Reset guest identity dan identitasnya tidak dapat di-reset, kloning gagal dengan alasannya dan tidak ada VM yang dibuat. Vapor memeriksa VM sumber sebelum menyalin, sehingga sebagian besar kasus langsung dilaporkan; sisanya ditemukan pada salinan sebelum salinan itu diubah, dan salinannya dihapus. Pilih Keep an exact copy sebagai gantinya, lalu ubah identitasnya dari dalam tamu sebelum menjalankan kedua VM:
| Situasi | Yang perlu dilakukan |
|---|---|
| Tamu Windows atau tamu non-Linux lainnya | Buat salinan persis, lalu generalisasi tamunya (di Windows, dengan Sysprep). |
| Disk terenkripsi (misalnya LUKS atau BitLocker) | Buat salinan persis dan ubah identitasnya dari dalam tamu. |
| Tidak ada sistem operasi yang ditemukan pada disk, atau lebih dari satu | Buat salinan persis. |
| File system yang tidak dapat diubah oleh host, misalnya file system XFS milik RHEL 9 dan turunannya (Rocky Linux, AlmaLinux) pada host dengan kernel yang lebih lama | Buat salinan persis dan ubah identitasnya dari dalam tamu. |
Sebagian sistem tamu, misalnya /var, berada di disk yang tidak ikut disalin bersama klon (block device host yang dipasang langsung, atau disk baca-saja) | Pindahkan bagian sistem tersebut ke disk image di VM sumber, lalu kloning ulang. Salinan persis tetap akan berbagi device tersebut dengan sumber. |
| VM memiliki lebih dari satu antarmuka jaringan, dan konfigurasi jaringannya menyebut alamat MAC yang tidak dimiliki antarmuka jaringan mana pun di sumber | Hapus atau perbaiki entri usang tersebut di VM sumber, lalu kloning ulang. Dengan guest_identity bernilai auto, hal ini hanya menjadi peringatan dan reset tetap selesai. |
| Satu-satunya SSH host key adalah key DSA | Tambahkan tipe key yang lebih baru di VM sumber (sudo ssh-keygen -A), lalu kloning ulang. |
Untuk mengubah identitas klon Linux sendiri, jalankan di dalam klon:
sudo rm -f /etc/machine-id /var/lib/dbus/machine-id
sudo systemd-machine-id-setup
sudo hostnamectl set-hostname <nama-baru>
sudo rm -f /etc/ssh/ssh_host_*
sudo ssh-keygen -A
sudo systemctl restart ssh # pada tamu keluarga RHEL, nama service-nya sshdBila terjadi kesalahan saat Vapor mengubah disk hasil salinan, kloning gagal secara keseluruhan: salinannya dihapus dan tidak ada VM yang dibuat. VM sumber tidak terpengaruh.
Guest agent
Klon tetap memiliki koneksi QEMU guest agent seperti sumbernya, sehingga fitur yang bergantung pada agent (quiesce file system untuk snapshot dan backup, pelaporan IP tamu) berjalan di klon sama seperti di sumber.
Kebutuhan host
Reset identitas membutuhkan guestfish (bagian dari libguestfs) di host Vapor. Pasang sebagai root:
# Debian 12 ke atas, Ubuntu 22.04 ke atas
sudo apt-get install guestfish libguestfs-xfs
# Debian 11, Ubuntu 20.04
sudo apt-get install libguestfs-tools libguestfs-xfs
# RHEL 9 dan turunannya (Rocky Linux, AlmaLinux)
sudo dnf install libguestfs libguestfs-xfs
# RHEL 8 dan turunannya
sudo dnf install libguestfs-tools-c libguestfs-xfsVapor tidak perlu di-restart. Vapor mencari ulang tool tersebut setiap kali dialog Clone dibuka, lalu mengujinya dengan self-test singkat di latar belakang. Bila Reset guest identity tidak terpilih secara otomatis atau dinonaktifkan, tutup dialog lalu buka lagi setelah sekitar satu menit. Bila masih tidak tersedia, alasan di dialog menjelaskan apa yang kurang di host atau apa hasil self-test-nya.
Host dengan kernel lebih lama dari 5.15
Vapor me-reset identitas di dalam VM pembantu kecil, yaitu libguestfs appliance, yang boot memakai kernel milik host itu sendiri. Clone dari VM yang sedang berjalan adalah salinan crash-consistent, dan file system guest modern seperti Debian 13 lalu berada dalam keadaan yang tidak bisa di-mount untuk ditulisi oleh kernel yang lebih lama dari 5.15. Di host seperti itu, identitas clone tersebut tidak bisa di-reset (alasan unmountable): tergantung pilihannya, clone gagal atau dibuat sebagai salinan persis dengan peringatan, dan salinan persis biasanya menyala tanpa jaringan. Clone dari VM yang sedang mati tidak terdampak.
Ini berlaku untuk Ubuntu 20.04 (kernel 5.4) dan Debian 11 (kernel 5.10). Sejak Vapor 3.3.2, instalasi baru di Ubuntu 20.04 memberi appliance kernel 5.15: installer mengunduh kernel HWE 5.15 dan mengekstraknya ke /opt/vapor-guestfs-kernel/<release> tanpa meng-install-nya, sehingga kernel dan proses boot host tidak berubah. Host yang di-upgrade di tempat tidak mendapatkannya. Lakukan hal yang sama secara manual, sebagai root:
REL=$(apt-cache depends linux-image-generic-hwe-20.04 | grep -o 'linux-image-5\.15[^ ]*' | sed 's/linux-image-//')
D=/opt/vapor-guestfs-kernel/$REL; T=$(mktemp -d)
(cd $T && sudo apt-get download linux-image-$REL linux-modules-$REL)
for f in $T/*.deb; do sudo dpkg-deb -x $f $D; done; sudo depmod -b $D $REL
sudo mkdir -p /etc/systemd/system/vapor.service.d
printf '[Service]\nEnvironment=SUPERMIN_KERNEL=%s\nEnvironment=SUPERMIN_MODULES=%s\n' \
"$D/boot/vmlinuz-$REL" "$D/lib/modules/$REL" | sudo tee /etc/systemd/system/vapor.service.d/guestfs-kernel.conf
# The appliance is cached; clear it so it is rebuilt with the new kernel.
sudo rm -rf /var/lib/vapor/guestfs-cache/.guestfs-0
sudo systemctl daemon-reload && sudo systemctl restart vaporUntuk membatalkannya, hapus /etc/systemd/system/vapor.service.d/guestfs-kernel.conf lalu restart Vapor. Di Debian 11, kernel yang lebih baru tersedia dari bullseye-backports, dan langkah yang sama berlaku dengan paket kernel tersebut. Tanpa semua ini, clone VM seperti itu saat VM-nya mati.
Untuk klien API
Permintaan clone (POST /api/v1/virtualization/computes/{id}/clone dan POST /api/v1/virtualization/computes/clone) dan deploy dari template (POST /api/v1/virtualization/computes/from-template) menerima field guest_identity:
| Nilai | Perilaku |
|---|---|
reset | Me-reset identitas. Bila tidak bisa, permintaan gagal: 409 dengan IDENTITY_RESET_UNAVAILABLE (host tidak mampu me-reset identitas) atau IDENTITY_RESET_UNSUPPORTED_GUEST (tamu tidak dapat di-reset; detailnya memuat reason_code), atau, bila penyalinan sudah dimulai, kloning gagal dengan error_code yang sama pada progress event. |
auto | Me-reset identitas bila memungkinkan. Bila Vapor mendapati hal itu tidak mungkin sebelum mengubah apa pun pada salinan, klon menjadi salinan persis dan hasilnya melaporkan alasannya sebagai peringatan. |
keep | Membuat salinan persis. |
Bila tool reset itu sendiri gagal atau melewati batas waktu, kloning gagal dengan IDENTITY_RESET_FAILED dan reason_code tool_error atau timeout: deploy dari template menjawab 500, sedangkan kloning melaporkan kode tersebut sebagai error_code pada progress event-nya.
Bila field ini tidak diisi, default host yang berlaku: clone_guest_identity_default di vapor.conf (atau environment variable VAPOR_CLONE_GUEST_IDENTITY_DEFAULT), yaitu auto (default) atau keep. Event akhir kloning (dan, untuk deploy dari template, respons-nya) memuat objek identity_reset berisi status (done, kept, atau failed), reason_code, reason, hostname baru, dan warnings seperti dijelaskan di atas. GET /api/v1/virtualization/computes/clone/capabilities melaporkan apakah host mampu me-reset identitas dan, bila tidak, alasannya.