ผ่านไปนาน منذเจอปัญหาใหญ่กับ KVM แต่เป็นธรรม ผมใช้ไม่มากในไม่กี่ปีผ่านมา แต่เมื่อเร็วๆ นี้มีกิจกรรมกับเทคโนโลยี virtualization นี้ productivity พร้อม troubles เป็น topping
พยายาม launch VM - ไม่พิเศษ แค่ kvm xyz ได้ error: Could not access KVM kernel module: Permission denied เริ่มต้นบทช่วยสอนเล็กนี้ แสดงวิธีตรวจสอบและแก้ไข ตามมา
ปัญหาในรายละเอียด (Problem in more detail)
Error message เต็ม:
Could not access KVM kernel module: Permission denied qemu-system-x86_64: failed to initialize KVM: Permission denied
บ่งชี้ว่า KVM userspace component เข้าถึง KVM driver ไม่ได้ ปกติมาจาก permissions ผิด
วิธีแก้ (Solution(s))
ตรวจสอบก่อนว่าผู้ใช้เป็น member ของกลุ่ม KVM และ libvirt หลังเปลี่ยน ต้อง launch shell ใหม่ วิธีง่าย: re-login เข้าสู่ user session
sudo usermod -G -a kvm "username" sudo usermod -G -a libvirtd "username"
สิทธิ์ device node (Device node permissions)
ตรวจสอบ permissions บน /dev/kvm ค่า default ถูกต้องควรเป็น 660 ownership root:kvm หากไม่ใช่ root หรือไม่ใช่ member ของ kvm group จะเข้าถึงไม่ได้
ls -ld /dev/kvm crw-rw---- 1 root kvm 10, 232 May 27 10:43 /dev/kvm
กฎ Udev (Udev rules)
ตรวจสอบว่า udev rules ถูกต้องอยู่แล้ว udevd = device file system management service ตั้ง permissions ให้ entries under /dev ตอนติดตั้ง KVM software หนึ่งใน packages จะให้ rule ที่จำเป็น ถ้าไม่มี (เคยมี bug) อาจต้องสร้าง rule เอง
Under /etc/udev/rules.d/ สร้างไฟล์ชื่อ XX-kvm.rules XX = number กำหนดลำดับ lexical order parse/execute คล้าย GRUB2 rules บางกรณีลำดับสำคัญ ถ้าไม่แน่ใจ และไม่มีอะไร depend KVM ใช้ 99-kvm.rules
ในไฟล์เพิ่มบรรทัด:
KERNEL=="kvm", GROUP="kvm", MODE="0660"
อธิบายสั้น: KERNEL = kernel name of device, GROUP = UNIX group ที่ควร own device, MODE = bitwise permissions
หลัง rule พร้อม reload rules โดยไม่ reboot:
udevadm control --reload-rules
เพื่อความปลอดภัย restart libvirt service:
systemctl restart libvirtd
สิทธิ์ device node - อีกครั้ง (Device node permissions - again)
ชิ้นสุดท้าย - ถ้าแก้ไม่ได้ เปลี่ยน permissions /dev/kvm เป็นชุด relaxed จาก 660 เป็น 666 - ผู้ใช้ทุกคนจัดการ KVM ได้ ใน home setup ไม่ใหญ่โต
sudo chmod 666 /dev/kvm
ตอนนี้ควร run KVM majestically ได้แล้ว
สรุป (Conclusion)
บทช่วยสอนไม่ยาว แต่ครอบหลายพื้นที่ ไม่ใช่ generic debugging สำหรับทุก issue KVM สำหรับนั้นมี KVM troubleshooting guide เก่า และ email สำหรับ tips ใหม่ เราพูดเฉพาะ KVM startup permission issue มี 3-4 วิธี analyze และ resolve
KVM powerful, flexible virtualization software - downside: ค่อนข้าง nerdy ไม่ accessible เท่ากับ tools frontend-friendly มากกว่า ไม่ได้ว่า virtualization ไม่ nerdy แต่ hey หากเจอ snag สร้าง/เริ่ม VMs ด้วย KVM เนื่องจาก wrong permissions checklist ข้างต้นควร up and running Simple, non-intrusive, no reboot needed จบแล้ว fellas
Cheers.