เป็นเวลานานแล้วที่ฉันพบปัญหาสำคัญกับ KVM พูดตามตรง ฉันไม่ได้ใช้มันบ่อยขนาดนั้นในช่วงไม่กี่ปีที่ผ่านมา แต่เมื่อเร็วๆ นี้ ฉันมีกิจกรรมมากมายเกี่ยวกับเทคโนโลยีเวอร์ชวลไลเซชันนี้ และประสิทธิภาพการทำงานก็มาพร้อมกับปัญหาบางอย่างตามมา
เมื่อมันเกิดขึ้น ฉันพยายามเปิดเครื่องเสมือน - ไม่มีอะไรพิเศษ แค่ kvm xyz และอะไรอีก ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:ไม่สามารถเข้าถึงโมดูลเคอร์เนล KVM:สิทธิ์ถูกปฏิเสธ และด้วยเหตุนี้จึงเริ่มต้นบทช่วยสอนเล็กๆ น้อยๆ นี้ ซึ่งแสดงสิ่งต่างๆ ทั้งหมดที่คุณสามารถทำได้เพื่อตรวจสอบสิ่งที่อาจผิดพลาด และวิธีแก้ไขปัญหา หลังจากฉัน.
ปัญหาในรายละเอียดเพิ่มเติม
ข้อความแสดงข้อผิดพลาดทั้งหมด:
ไม่สามารถเข้าถึงโมดูลเคอร์เนล KVM:สิทธิ์ถูกปฏิเสธ
qemu-system-x86_64:ล้มเหลวในการเริ่มต้น KVM:สิทธิ์ถูกปฏิเสธ
สิ่งที่บ่งชี้ว่า - เป็นไปได้มากที่สุด - คอมโพเนนต์ userspace ของ KVM ไม่สามารถเข้าถึงไดรเวอร์ KVM ได้ ซึ่งมักเกิดจากการอนุญาตที่ไม่ถูกต้อง
วิธีแก้ปัญหา
สิ่งแรกที่คุณต้องทำคือตรวจสอบว่าผู้ใช้ของคุณเป็นสมาชิกของกลุ่ม KVM และ libvirt เมื่อคุณทำการเปลี่ยนแปลงเหล่านี้แล้ว คุณจะต้องเปิดตัวเชลล์ใหม่เพื่อให้การเปลี่ยนแปลงสมาชิกกลุ่มเกิดขึ้น วิธีที่ง่ายที่สุดคือการลงชื่อเข้าใช้เซสชันผู้ใช้ของคุณอีกครั้ง
sudo usermod -G -a kvm "ชื่อผู้ใช้"
sudo usermod -G -a libvirtd "ชื่อผู้ใช้"
การอนุญาตโหนดอุปกรณ์
นอกจากนี้ คุณต้องการตรวจสอบสิทธิ์บนอุปกรณ์ /dev/kvm สิทธิ์เริ่มต้นที่ถูกต้องควรเป็น 660 และเป็นเจ้าของ root:kvm สำหรับไฟล์อุปกรณ์ อย่างที่คุณเห็น ถ้าคุณไม่ได้รูทหรือเป็นสมาชิกของกลุ่ม kvm คุณจะไม่สามารถเข้าถึงได้
ls -ld /dev/kvm
crw-rw---- 1 รูท kvm 10, 232 27 พฤษภาคม 10:43 /dev/kvm
กฎ Udev
อีกสิ่งหนึ่งที่คุณอาจต้องการตรวจสอบว่ามีกฎ udev ที่ถูกต้องหรือไม่ หากคุณสงสัย udevd เป็นบริการจัดการระบบไฟล์ของอุปกรณ์ ซึ่งกำหนดสิทธิ์ที่ถูกต้องสำหรับรายการภายใต้ /dev โดยทั่วไป เมื่อคุณติดตั้งซอฟต์แวร์ KVM หนึ่งในแพ็คเกจในบันเดิลจะให้กฎที่จำเป็น หากไม่มีกฎนี้และเคยมีข้อบกพร่องมาก่อน คุณอาจต้องการสร้างกฎด้วยตนเอง
ภายใต้ /etc/udev/rules.d/ ให้สร้างไฟล์ชื่อ XX-kvm.rules XX ย่อมาจากตัวเลข ซึ่งกำหนดลำดับคำศัพท์ที่กฎจะถูกแยกวิเคราะห์และดำเนินการ คล้ายกับกฎของ GRUB2 ในบางกรณี ลำดับของกฎต่างๆ อาจมีความสำคัญ หากคุณไม่แน่ใจและไม่มีสิ่งใดที่คุณรู้ว่าขึ้นอยู่กับฟังก์ชันการทำงานของ KVM ที่จะเรียกใช้ คุณสามารถใช้ 99-kvm.rules
ภายในไฟล์นี้ ให้เพิ่มบรรทัดต่อไปนี้:
KERNEL=="kvm", GROUP="kvm", MODE="0660"
เรามีอะไรที่นี่? หากคุณอยู่ในเวอร์ชัน TL; DR ของวิธีเขียนกฎ udev โปรดอ่านที่โน่น พูดง่ายๆ คือ
- KERNEL - ชื่อเคอร์เนลของอุปกรณ์
- GROUP - กลุ่ม UNIX ที่ควรเป็นเจ้าของอุปกรณ์
- MODE - สิทธิ์ระดับบิตสำหรับอุปกรณ์
เมื่อกฎเข้าที่แล้ว ให้โหลดกฎซ้ำโดยไม่ต้องรีบูต:
การควบคุม udevadm --โหลดกฎ
และเพื่อความปลอดภัย คุณอาจต้องรีสตาร์ทบริการ libvirt:
systemctl รีสตาร์ท libvirtd
การอนุญาตโหนดอุปกรณ์ - อีกครั้ง
ส่วนสุดท้ายของสมการนี้ - ถ้าวิธีแก้ปัญหาข้างต้นไม่ได้ผล คุณก็เปลี่ยนสิทธิ์บน /dev/kvm เป็นชุดที่ผ่อนคลายมากขึ้นได้ แทนที่จะใช้ 660 คุณสามารถใช้ 666 ได้ ซึ่งหมายความว่าผู้ใช้ทุกคนในระบบจะสามารถจัดการการจำลองเสมือนของ KVM ได้ ในการติดตั้งที่บ้าน นี่ไม่ใช่เรื่องใหญ่
sudo chmod +666 /dev/kvm
และตอนนี้คุณควรจะเรียกใช้ KVM ได้อย่างสง่างาม
บทสรุป
ไปเลย. บทช่วยสอนนี้ไม่ยาวเกินไป แต่ครอบคลุมบางส่วน ตอนนี้ ไม่ใช่บทความแก้ไขจุดบกพร่องทั่วไปสำหรับทุกคนและปัญหาใดๆ ที่เกี่ยวข้องกับ KVM สำหรับสิ่งนั้น คุณมีคู่มือการแก้ไขปัญหา KVM รุ่นเก่าของฉัน รวมถึงอีเมล ดังนั้นคุณจึงสามารถขอคำแนะนำและแนวทางแก้ไขใหม่ ๆ และอะไรก็ตาม เรากำลังพูดถึงปัญหาการอนุญาตการเริ่มต้น KVM โดยเฉพาะ และคุณมีวิธีวิเคราะห์และแก้ไขสามหรือสี่วิธีที่แตกต่างกัน
โดยรวมแล้ว KVM เป็นซอฟต์แวร์เวอร์ชวลไลเซชันที่ทรงพลังและยืดหยุ่น โดยมีข้อเสียอย่างหนึ่งคืออาจค่อนข้างเนิร์ด และไม่สามารถเข้าถึงได้เหมือนกับเครื่องมืออื่น ๆ ที่เป็นมิตรต่อส่วนหน้ามากกว่า ไม่ใช่ว่า virtualization นั้นไม่ใช่เรื่องเนิร์ดสำหรับการเริ่มต้น แต่เดี๋ยวก่อน ถ้าคุณพบอุปสรรค์ในการสร้างหรือเริ่มต้น VM ของคุณด้วย KVM เนื่องจากการอนุญาตที่ไม่ถูกต้อง รายการตรวจสอบด้านบนควรช่วยให้คุณพร้อมใช้งาน เรียบง่าย ไม่ล่วงล้ำ ไม่ต้องรีบูตเครื่อง เสร็จแล้วครับเพื่อนๆ
ไชโย