Virtualisasi – Cara Melakukan Debug Masalah
|
Sedang dalam pengerjaan!
Halaman ini diambil dari dokumentasi Fedora Wiki sebelumnya. Dokumen ini telah diedit untuk dipublikasikan di Portal Dokumentasi Fedora, tetapi belum direview untuk keakuratan teknisnya. Jangan digunakan untuk saat ini. Kemungkinan besar masih belum siap.
Ulasan mengenai akurasi teknis sangat dihargai. Jika Anda ingin membantu, lihat berkas README di repositori sumber untuk petunjuk. Permintaan pull diterima di https://pagure.io/fedora-docs/quick-docs Setelah Anda memperbaiki halaman ini, hapus pemberitahuan ini. |
Pelaporan bug yang efektif
Melaporkan bug dengan efektif adalah keterampilan penting bagi setiap pengguna atau pengembang Fedora.
Mempersempit kemungkinan penyebab bug dan memberikan informasi yang tepat dalam laporan bug memungkinkan masalah tersebut diselesaikan dengan cepat. Mengajukan laporan bug dengan sedikit informasi yang berguna dapat menyebabkan bug tersebut tidak terselesaikan, dan mungkin akan ditutup secara otomatis ketika versi distribusi mencapai "akhir masa dukungan".
Lihat cara mengajukan laporan bug untuk informasi umum tentang pengajuan bug. Halaman ini memuat informasi khusus mengenai bug terkait virtualisasi.
Informasi Versi
Setelah memastikan Anda telah menginstal pembaruan terbaru , kumpulkan detail versi paket-paket tersebut, misalnya.
[…]$ rpm -q qemu-kvm qemu-common python-virtinst virt-viewer virt-manager
Untuk mengetahui versi kernel yang sedang Anda jalankan dan arsitektur mesin yang digunakan:
[…]$ uname -a
Tentunya, Anda juga harus memastikan untuk melaporkan bug menggunakan versi Fedora yang sesuai. Pengguna Rawhide harus melaporkan bug menggunakan versi "rawhide".
Informasi Perangkat Keras
Kemampuan virtualisasi Fedora sangat bergantung pada kemampuan perangkat keras, jadi saat melaporkan bug, sertakan informasi yang lengkap tentang platform perangkat keras Anda, termasuk:
[…]$ cat /proc/cpuinfo
[…]$ lspci -vvv
[…]$ virt-host-validate
Anda juga dapat memeriksa kemampuan virtualisasi yang tersedia pada mesin Anda dengan menjalankan perintah berikut:
[…]$ virsh capabilities
Konfigurasi Tamu (Guest)
Saat melaporkan bug terkait masalah yang terjadi pada guest (guest), sertakan detail lengkap mengenai konfigurasi guest, termasuk arsitektur CPU, ukuran RAM, perangkat, dan sebagainya. Cara paling mudah adalah dengan menyertakan keluaran dari virsh dumpxml MyGuest atau, dalam kasus qemu, seluruh perintah qemu yang digunakan.
Virt Manager
Virt Manager menyimpan berkas log di ~/.cache/virt-manager/virt-manager.log.
Periksa berkas log tersebut dan sertakan bagian yang tampak berguna dalam laporan bug. Jika ragu, lampirkan seluruh berkas log ke dalam laporan.
Anda juga dapat menjalankan virt-manager dari baris perintah menggunakan virt-manager --no-fork dan memeriksa apakah ada pesan relevan yang ditampilkan.
virt-install
virt-install menyimpan berkas log di ~/.cache/virtinst/virt-install.log.
Jalankan virt-install dengan opsi --debug untuk menampilkan log debug secara mendetail.
Untuk mendapatkan akses ke konsol serial selama proses instalasi, Anda dapat menggunakan -x "console=ttyS0". Menggunakan konsol serial yang digabungkan dengan instalasi VNC sangat berguna untuk debug, misalnya --nographics -x "console=ttyS0 vnc".
libvirt
Program apa pun yang menggunakan libvirt dapat di-debug dengan menetapkan variabel lingkungan LIBVIRT_DEBUG=1, misalnya:
[…]$ LIBVIRT_DEBUG=1 virt-manager --no-fork
[…]$ LIBVIRT_DEBUG=1 virsh list --all
Jika masalah Anda tampak berkaitan dengan libvirtd, coba periksa /var/log/messages untuk mencari pesan kesalahan.
Anda juga dapat menggunakan konfigurasi logging /etc/libvirt/libvirtd.conf untuk, misalnya, mencatat log debug ke dalam berkas:
log_level = 1
log_outputs = 0:file:/tmp/libvirtd.log
Sebagai alternatif, Anda dapat menjalankan libvirtd langsung dari baris perintah dengan opsi debug diaktifkan:
[…]# systemctl stop libvirtd
[…]# LIBVIRT_DEBUG=1 libvirtd --verbose
libguestfs
Jika libguestfs, guestfish, virt-df, dan sejenisnya menimbulkan masalah, jalankan perintah berikut:
[…]# libguestfs-test-tool
Jika semuanya berfungsi dengan baik, di bagian akhir keluaran Anda akan melihat
===== TEST FINISHED OK =====.
Jika ada yang tidak berfungsi, masukkan keluaran lengkap tanpa diedit dari perintah tersebut ke dalam laporan bug.
Jaringan
Jika Anda mengalami masalah dengan guest yang terhubung ke jaringan virtual libvirt, antarmuka fisik bersama atau bridge, coba jalankan perintah-perintah berikut:
[…]# virsh net-list --all
[…]# brctl show
[…]# sysctl net.bridge.bridge-nf-call-iptables
[…]# iptables -L -v -n
[…]# ps -ef | grep dnsmasq
[…]# ifconfig -a
[…]# cat /proc/sys/net/ipv4/ip_forward
[…]# service libvirtd reload
Jika Anda mendapati bahwa /proc/sys/net/ipv4/ip_forward tidak disetel ke 1 saat boot, coba periksa urutan layanan libvirtd dan NetworkManager:
[…]# find /etc/rc.d -regex '.*rc[35].d/S.*\(libvirtd\|NetworkManager\)'
[…]# rm -f /etc/chkconfig.d/libvirtd /etc/chkconfig.d/NetworkManager
[…]# chkconfig libvirtd resetpriorities
[…]# chkconfig NetworkManager resetpriorities
[…]# find /etc/rc.d -regex '.*rc[35].d/S.*\(libvirtd\|NetworkManager\)'
kvm
Lihat juga [http://www.linux-kvm.org/page/Bugs halaman wiki KVM tentang pelaporan bug].
Keluaran dari setiap perintah <code>qemu-kvm</code> yang dijalankan oleh <code>libvirtd</code> disimpan di <code>/var/log/libvirt/qemu/GuestName.log</code>.
[[Testing_KVM_with_kvm_autotest|kvm-autotest]] adalah cara yang sangat baik untuk menguji fungsi dasar KVM.
Xen
Beberapa informasi berguna tentang cara melakukan debug masalah Xen dapat ditemukan di halaman Wiki [http://wiki.xen.org/wiki/Debugging_Xen Debugging Xen]. Jika Anda merasa telah menemukan bug sebenarnya, Anda dapat mengikuti langkah-langkah yang dijelaskan di halaman Wiki [http://wiki.xen.org/wiki/Reporting_Bugs_against_Xen Reporting Bugs against Xen], atau di [http://blog.xen.org/index.php/2013/06/04/reporting-a-bug-against-the-xen-hypervisor/ posting blog ini].
Bug yang telah dilaporkan dan saat ini sedang dilacak oleh pengembang Xen dikumpulkan di [http://bugs.xenproject.org/xen/ Pelacak Bug Xen Hypervisor], jadi Anda mungkin ingin memeriksanya untuk melihat apakah bug yang Anda temukan sudah ditangani.
Beberapa informasi tambahan yang berguna:
-
Berkas log tersedia di <code>/var/log/xen/</code>, baik untuk guest HVM maupun PV (cari berdasarkan nama guest dan ID domain Anda)
-
Jika guest Anda mengalami crash, disarankan untuk melakukan hal-hal berikut:
-
Atur "on_crash=preserve" di berkas konfigurasi domain Anda
-
Salin berkas System.map kernel guest ke host
-
Setelah guest mengalami crash, jalankan <code>/usr/lib/xen/bin/xenctx -s System.map <domid></code>
-
Tips Umum
Berkas Log Sistem
Selalu periksa <code>dmesg</code>, <code>/var/log/messages</code>, dan berkas serupa untuk mencari informasi yang berguna.
strace
<code>strace</code> sering kali dapat membantu memahami bug — misalnya, jika Anda menjalankan <code>virt-manager</code>, <code>libvirtd</code> , atau <code>qemu-kvm</code> di bawah strace, Anda dapat melihat berkas apa yang diakses, perintah apa yang dijalankan, atau panggilan sistem apa yang dilakukan, dan seterusnya:
<pre> $> strace -ttt -f libvirtd </pre>
Jika program yang dimaksud sudah berjalan, Anda dapat menempelkan strace padanya menggunakan <code>strace -p</code>.
SELinux
Jika Anda melihat pesan “AVC denied” atau “setroubleshoot” di <code>/var/log/messages</code>, kemungkinan bug Anda disebabkan oleh masalah kebijakan SELinux. Cobalah untuk sementara waktu mengubah SELinux ke mode “permissive” dengan perintah berikut:
<pre> $> setenforce 0 </pre>
Jika langkah ini membuat bug Anda hilang, itu tidak berarti bug tersebut telah diperbaiki — hanya membantu mempersempit penyebabnya. Sertakan detail AVC dari <code>ausearch -m AVC -ts recent</code> dalam laporan bug, atau jika pesan tersebut berisi perintah <code>sealert -l</code>, sertakan juga rincian keluaran dari perintah tersebut.
Salah satu penyebab umum masalah SELinux adalah berkas yang salah label. Cobalah langkah berikut:
<pre> $> restorecon /path/to/file/in/selinux/message </pre>
Jika Anda menginstal menggunakan ISO pada mount NFS, pastikan mount tersebut menggunakan label <code>virt_content_t</code>:
<pre> $> mount -o context="system_u:object_r:virt_content_t:s0" … </pre>
Jika Anda menggunakan pool penyimpanan libvirt, seperti NFS atau USB pass-through, periksa atau ubah salah satu boolean SELinux berikut: virt_use_comm, virt_use_fusefs, virt_use_nfs, virt_use_samba, virt_use_usb.
<pre> $> getsebool virt_use_nfs virt_use_nfs -→ off $> setsebool -P virt_use_nfs on </pre>
Pemecahan Masalah
Masalah Izin
Sebelum Fedora 11/libvirt 0.6.1, semua mesin virtual yang dijalankan melalui libvirt dijalankan sebagai root, memberikan kemampuan administrator penuh. Meskipun ini memudahkan pengelolaan VM, pendekatan ini kurang aman: mesin virtual yang terkompromi mungkin dapat memperoleh hak administrator pada mesin host.
Pada Fedora 11/libvirt-0.6.1, keamanan mulai meningkat dengan penambahan [[Features/SVirt_Mandatory_Access_Control|svirt]]. Secara singkat, libvirt mencoba menerapkan label SELinux secara otomatis pada setiap berkas yang dibutuhkan VM, seperti citra disk. Jika VM mencoba membuka berkas yang tidak dilabeli oleh libvirt, akses akan ditolak.
Fedora 12 membawa peningkatan lebih lanjut. Mulai libvirt-0.6.5, VM kini dijalankan dengan kemampuan proses yang dikurangi. Hal ini mencegah VM melakukan hal-hal seperti mengubah konfigurasi jaringan host (yang biasanya tidak perlu dilakukan). Dan sejak libvirt-0.7.0, proses emulator VM tidak lagi dijalankan sebagai 'root' secara default, melainkan sebagai pengguna 'qemu' yang tidak memiliki hak istimewa.
Meskipun semua perubahan ini sangat baik untuk keamanan, beberapa pengaturan lama yang bergantung pada izin VM yang lebih longgar menjadi tidak berfungsi lagi. Sebagian besar masalah ini dapat diatasi, meski dengan mengorbankan keamanan. Seiring waktu, diharapkan sebagian besar masalah ini dapat berfungsi secara otomatis, meski saat ini belum sepenuhnya tercapai.
Mengubah pengguna proses QEMU/KVM
{{admon/warning|Mengubah pengguna proses QEMU/KVM memiliki implikasi keamanan.}}
Untuk mengubah pengguna yang akan digunakan libvirt untuk menjalankan proses QEMU/KVM, edit berkas /etc/libvirt/qemu.conf lalu hapus tanda komentar dan ubah nilai pada kolom user= dan group=. Misalnya, jika ingin menjalankan KVM dengan pengguna 'foobar', atur kolom menjadi <pre>… user='foobar' group='foobar' …</pre> Kemudian, mulai ulang layanan libvirtd dengan perintah <pre>service libvirtd restart</pre>
Mengubah konfigurasi SVirt/SELinux
{{admon/warning|Mengubah pengaturan SVirt/SELinux dapat memiliki implikasi keamanan.}}
SVirt dapat dinonaktifkan untuk driver QEMU libvirt dengan mengedit file /etc/libvirt/qemu.conf, hapus tanda komentar dan atur <pre>security_driver='none'</pre> Kemudian, mulai ulang layanan libvirtd dengan perintah <pre>service libvirtd restart</pre>
Mengubah kemampuan proses QEMU/KVM
{{admon/warning|Mengubah pengaturan ini memiliki implikasi keamanan.}}
Secara bawaan, libvirt meluncurkan guest QEMU/KVM dengan kemampuan proses yang dibatasi. Untuk menonaktifkan fitur ini, edit berkas /etc/libvirt/qemu.conf, hapus tanda komentar dan atur <pre>clear_emulator_capabilities=0</pre> Kemudian, mulai ulang layanan libvirtd dengan perintah <pre>service libvirtd restart</pre>
Masalah performa KVM
Sering kali, kelambatan VM terjadi karena VM menggunakan QEMU murni dan bukan KVM.
Memastikan sistem mendukung KVM
Pastikan modul kernel KVM telah dimuat dengan benar:
<pre> $ lsmod | grep kvm kvm kvm_intel </pre>
Jika perintah tersebut tidak menampilkan kvm_intel atau kvm_amd, maka KVM belum dikonfigurasi dengan benar. Lihat [http://www.linux-kvm.org/page/FAQ#How_can_I_tell_if_I_have_Intel_VT_or_AMD-V.3F| halaman wiki KVM ini] untuk memastikan perangkat keras Anda mendukung ekstensi virtualisasi. Jika tidak mendukung, Anda tidak dapat menggunakan akselerasi KVM dan hanya bisa menjalankan QEMU murni.
Jika perangkat keras Anda mendukung ekstensi virtualisasi, coba muat ulang modul kernel dengan perintah:
<pre> su -c 'bash /etc/sysconfig/modules/kvm.modules' </pre>
Ulangi perintah lsmod di atas dan periksa apakah Anda mendapatkan keluaran yang diharapkan. Jika tidak, atau jika perintah kvm.modules menghasilkan galat, periksa keluaran dari:
<pre> dmesg | grep -i kvm </pre>
Jika Anda melihat pesan 'KVM: disabled by BIOS', silakan lihat [http://www.linux-kvm.org/page/FAQ#.22KVM:_disabled_by_BIOS.22_error| halaman wiki KVM terkait]. Pesan galat lainnya kemungkinan merupakan bug dan perlu dilaporkan.
Jika semua langkah tersebut berhasil, pastikan bahwa VM Anda benar-benar menggunakan KVM.
Apakah Guest Saya Menggunakan KVM?
Sering kali orang tidak yakin apakah guest qemu mereka benar-benar menggunakan virtualisasi perangkat keras melalui KVM.
Pertama, periksa apakah libvirt mendeteksi bahwa KVM tersedia:
<pre> $> virsh capabilities | grep kvm <domain type='kvm'> <emulator>/usr/bin/qemu-kvm</emulator> </pre>
Jika perintah tersebut tidak mengembalikan apa pun, coba jalankan perintah berikut untuk mengidentifikasi apa yang mungkin perlu diperbaiki agar dukungan KVM aktif:
<pre> $> virt-host-validate </pre>
Selanjutnya, periksa apakah guest sudah dikonfigurasi untuk menggunakan KVM:
<pre> $> virsh dumpxml ${guest} | grep kvm <domain type='kvm' id='18'> <emulator>/usr/bin/qemu-kvm</emulator> </pre>
Jika perintah tersebut tidak menampilkan apa pun, pastikan terdapat <domain type='kvm'> dan <emulator>/usr/bin/qemu-kvm</emulator>, dengan menjalankan perintah:
<pre> virsh edit ${guest} </pre>
Selanjutnya, periksa berkas <code>/var/log/libvirt/qemu/${guest}.log</code> untuk memastikan bahwa <code>/usr/bin/qemu-kvm</code> adalah emulator yang dijalankan oleh libvirt dan tidak ada pesan galat tentang <code>/dev/kvm</code>.
Jika ingin memeriksa lebih lanjut, Anda bisa memastikan apakah <code>qemu-kvm</code> memiliki akses terbuka ke <code>/dev/kvm</code>:
<pre> $> for iii in /proc/$(ps h -o tid -C qemu-kvm)/fd/*; do readlink $iii; done | grep kvm anon_inode:kvm-vcpu /dev/kvm anon_inode:kvm-vm </pre>
Akses konsol serial untuk pemecahan masalah dan manajemen
Akses konsol serial berguna untuk men-debug crash kernel dan untuk manajemen jarak jauh yang sangat membantu.
Sistem operasi guest yang tervirtualisasi penuh secara otomatis akan memiliki konsol serial yang dikonfigurasi, tetapi kernel guest tidak dikonfigurasi untuk menggunakannya secara default. Untuk mengaktifkan konsol guest pada sistem Linux fully-virt, edit berkas /etc/grub.conf di dalam guest dan tambahkan 'console=tty0 console=ttyS0'. Ini memastikan bahwa semua pesan kernel dikirim ke konsol serial serta ke konsol grafis biasa. Konsol serial kemudian dapat diakses dengan cara yang sama seperti guest paravirt:
<pre> su -c "virsh console <domain name>" </pre>
Sebagai alternatif, program grafis <code>virt-manager</code> dapat menampilkan konsol serial. Cukup tampilkan jendela 'console' atau 'details' untuk guest dan pilih 'View → Serial console' dari menu bar. <code>virt-manager</code> mungkin perlu dijalankan sebagai root agar memiliki hak akses yang cukup untuk mengakses konsol serial.
Akses konsol grafis
Untuk mendapatkan konsol grafis pada guest Anda, Anda dapat menggunakan 'virt-manager' dan memilih ikon konsol untuk guest tersebut, atau Anda dapat menggunakan alat 'virt-viewer' untuk langsung terhubung ke konsol:
<pre> virt-viewer guestname </pre>
Mengakses data pada image disk guest
{{Admon/caution | Jika image guest mungkin sedang aktif (live), Anda hanya boleh menggunakan akses baca-saja, jika tidak Anda berisiko merusak image disk.<br><br>Selalu aman menggunakan <code>guestfish --ro</code>}}
Program [http://libguestfs.org/guestfish.1.html guestfish] memungkinkan Anda memanipulasi image disk guest tanpa perlu menjalankan guest tersebut:
<pre> su -c 'yum install guestfish' guestfish -d NameOfGuest -i --ro ><fs> ll / ><fs> cat /boot/grub/grub.conf </pre>
Lihat <code>man guestfish</code> dan [http://libguestfs.org/ situs web libguestfs] untuk informasi dan contoh. guestfish juga dapat dijalankan menggunakan skrip.
[http://libguestfs.org/virt-rescue.1.html virt-rescue] adalah alat alternatif dari libguestfs yang dapat Anda gunakan untuk melakukan perubahan secara ad hoc. [http://libguestfs.org/virt-edit.1.html virt-edit] dapat digunakan untuk mengedit satu berkas dalam guest, misalnya:
<pre> virt-edit NameOfGuest /boot/grub/grub.conf </pre>
Masalah yang diketahui
Keluaran audio
Audio selalu menjadi hal yang sulit untuk dijalankan dengan libvirt, tetapi perubahan keamanan terbaru memberikan mekanisme agar hal ini dapat berfungsi. Masalah utamanya adalah VM tidak mengirim keluaran suara ke sesi pulseaudio pengguna Anda. Mungkin ada opsi pulseaudio untuk mengatasi masalah ini, tetapi cara yang berhasil dilakukan adalah:
-
[[SELinux/FAQ#How_do_I_enable_or_disable_SELinux_.3F|Atur selinux ke mode permissive]].
-
Konfigurasikan libvirt untuk [[#Changing_the_QEMU.2FKVM_process_user|menjalankan guest sebagai pengguna reguler Anda]]
-
Atur <pre>vnc_allow_host_audio = 1</pre> di /etc/libvirt/qemu.conf, lalu mulai ulang layanan libvirtd dengan <pre>service libvirtd restart</pre>
Masalah ini pada akhirnya akan diselesaikan secara otomatis dengan membuat klien grafis VNC menerima audio dari VM dan memutarnya sebagai pengguna saat ini. Beberapa kode sudah ada untuk menangani ini di virt-viewer/virt-manager, tetapi belum sepenuhnya selesai. Untuk informasi lebih lanjut, lihat [https://bugzilla.redhat.com/show_bug.cgi?id=595880 gtk-vnc bug 595880], [https://bugzilla.redhat.com/show_bug.cgi?id=536692 libvirt SDL audio bug 536692], [https://bugzilla.redhat.com/show_bug.cgi?id=508317 libvirt VNC audio bug 508317]
Grafik SDL
QEMU memerlukan akses ke berkas $XAUTHORITY Anda agar dapat menggunakan grafik SDL.
-
Konfigurasikan grafik SDL untuk VM Anda. Cara termudah untuk melakukannya:
<pre>$> echo <graphics type='sdl display='$DISPLAY' xauth='$XAUTHORITY'/> <graphics type='sdl display=':0.0' xauth='/home/cole/.Xauthority'/> (copy that string) $> su -c 'virsh edit $vmname' (stick that string somewhere in the <devices> block, remove any other <graphics> devices) </pre>
-
[[SELinux/FAQ#How_do_I_enable_or_disable_SELinux_.3F|Atur selinux ke mode permissive]]. Untuk informasi lebih lanjut, lihat [https://bugzilla.redhat.com/show_bug.cgi?id=609279 bug 609276]
-
Beri pengguna VM akses ke berkas $XAUTHORITY Anda. Pengguna VM default di Fedora 12 ke atas adalah 'qemu', jadi Anda dapat memberikan akses baca dengan <pre>setfacl -m u:qemu:r $XAUTHORITY</pre> Jika Anda mendapatkan galat 'operation not supported', Anda dapat memberikan akses baca yang lebih umum dengan <pre>chmod +r $XAUTHORITY</pre> Harap diperhatikan, hal ini mungkin memiliki implikasi keamanan. Jika masih belum berhasil, Anda dapat mengubah pengguna VM menjadi root (seperti perilaku Fedora versi lama), atau [[#Changing_the_QEMU.2FKVM_process_user|menggunakan pengguna reguler Anda sendiri]]
Galat saat menggunakan <interface type='ethernet'/>
Perilaku default libvirt yang menurunkan kemampuan proses QEMU/KVM menyebabkan <interface type='ethernet'/> tidak berfungsi dengan benar. Anda dapat mencoba:
-
Gunakan konfigurasi agar libvirt [[#Changing_QEMU.2FKVM_process_capabilities|tidak menurunkan kemampuan proses QEMU/KVM]]
Jika itu belum cukup, Anda dapat mencoba langkah berikut:
-
[[SELinux/FAQ#How_do_I_enable_or_disable_SELinux_.3F|Atur selinux ke mode permissive]]
-
Gunakan konfigurasi agar libvirt [[#Changing_the_QEMU.2FKVM_process_user|menjalankan QEMU/KVM sebagai root]]
Penugasan perangkat PCI
Perilaku default libvirt yang menurunkan kemampuan proses QEMU/KVM menyebabkan penugasan perangkat PCI tidak berfungsi dengan benar. Lihat [https://bugzilla.redhat.com/show_bug.cgi?id=573850 bug 573850] untuk informasi lebih lanjut. Hasil terbaik didapatkan dengan langkah-langkah berikut:
-
Gunakan konfigurasi agar libvirt [[#Changing_QEMU.2FKVM_process_capabilities|tidak menurunkan kemampuan proses QEMU/KVM]]
-
[[SELinux/FAQ#How_do_I_enable_or_disable_SELinux_.3F|Atur selinux ke mode permissive]]
-
Gunakan konfigurasi agar libvirt [[#Changing_the_QEMU.2FKVM_process_user|menjalankan QEMU/KVM sebagai root]]
Want to help? Learn how to contribute to Fedora Docs ›