เรามีหนึ่งบทช่วยสอนเกี่ยวกับปัญหาทั่วไปของ Xen ที่อาจเกิดขึ้นเมื่อคุณลองและทดสอบ Xen ในสภาพแวดล้อมของคุณ เคล็ดลับและคำแนะนำชุดแรกมุ่งเน้นไปที่ปัญหาเกี่ยวกับการแสดงผล เวอร์ชันและโมดูลของ Python การเปลี่ยนสคริปต์ของ wrapper และการเรียกใช้คำสั่งที่ชัดเจน และบริการแก้ไขปัญหา
วันนี้เราเจาะลึกมากขึ้นและพยายามทำความเข้าใจ แก้ไข และแก้ไขปัญหาอื่นๆ อีกมากมายที่คุณอาจพบหรือไม่เคยเจอ ฉันต้องยอมรับว่าโซลูชันบางอย่างอาจเป็นแบบเฉพาะกิจเล็กน้อย ดังนั้นอย่าเชื่อคำพูดของฉัน แต่ฉันเชื่อว่าโดยรวมแล้วทำงานได้ดี หวังว่าประสบการณ์ Xen ของคุณจะเพิ่มมากขึ้นหลังจากอ่านบทความนี้
เคล็ดลับที่ 1:การเชื่อมต่อ VNC กับโฮสต์ไฮเปอร์ไวเซอร์ถูกปฏิเสธหรือถูกตัดการเชื่อมต่อ
หลังจากที่คุณเริ่ม Virtual Machine Manager (virt-manager) คุณจะมีตัวเลือกในการดูเนื้อหาของเครื่องเสมือนของคุณโดยใช้ VNC ซึ่งจะแสดงเนื้อหาของคอนโซลของโดเมนที่เกี่ยวข้อง บางครั้งคอนโซลอาจว่างเปล่าและส่งข้อผิดพลาดที่เขียนไว้ในชื่อด้านบน คำถาม ตอนนี้คุณทำอะไร?
ประสบการณ์ของฉันแสดงให้เห็นว่าสิ่งนี้จะเกิดขึ้นทุกครั้งที่มีการรีสตาร์ทหรือปิดระบบปฏิบัติการของแขก เมื่อคุณเปิดเครื่องอีกครั้ง คุณจะต้องเปิดคอนโซลอีกครั้งอย่างไม่สะดวกที่สุดเพื่อดูเนื้อหาของเขา สิ่งเดียวกันนี้จะเกิดขึ้นหากคุณใช้ virt-viewer:
virt-viewer <โดเมน>
เมื่อโดเมนรีบูต รีเซ็ต หรือปิด คุณจะสูญเสียการเชื่อมต่อ ในขณะนี้ วิธีแก้ปัญหาง่ายๆ คือเปิดหน้าต่างคอนโซลอีกครั้ง ไม่ว่าจะผ่าน virt-manager หรือ virt-viewer
หรือเพื่อสร้างการเชื่อมต่อ:
virsh vncdisplay <โดเมน>
vncviewer <ชื่อโฮสต์:พอร์ตที่ส่งคืนโดยคำสั่ง virsh>
เคล็ดลับที่ 2:vif จะหายไปในขณะที่ผู้เยี่ยมชมทำงาน ไม่มีเครือข่ายอีกต่อไป
อาจเกิดขึ้นได้ว่าในขณะที่เครื่องเสมือนของคุณกำลังทำงาน อินเทอร์เฟซเครือข่ายเสมือน ซึ่งปกติจะมีป้ายกำกับว่า vifX.X จะหายไปจากรายการ ifconfig ทำให้แขกของคุณกลายเป็นอิฐที่ไร้ประโยชน์
ปัญหาอาจปรากฏในที่อยู่ MAC ของอินเทอร์เฟซเครือข่ายที่เกี่ยวข้องภายในเครื่องเสมือนที่เปลี่ยนเป็นศูนย์ทั้งหมด และบนโฮสต์ (dom0) คุณอาจเห็นรายการประเภทต่อไปนี้ใน /var/log/messages:
เคอร์เนล:[ 109.743854] br0:พอร์ต 2(vif1.0) เข้าสู่สถานะการเรียนรู้
เคอร์เนล:[ 109.811880] br0:พอร์ต 3(tap1.0) เข้าสู่สถานะการเรียนรู้
เคอร์เนล:[ 117.369189] br0:พอร์ต 3(tap1.0) เข้าสู่สถานะปิดใช้งาน
เคอร์เนล:[ 117.398076] อุปกรณ์ tap1.0 ออกจากโหมดสำส่อน
เคอร์เนล:[ 117.398083] br0:พอร์ต 3(tap1.0) เข้าสู่สถานะปิดใช้งาน
เคอร์เนล:[ 117.815006] br0:พอร์ต 2(vif1.0) เข้าสู่สถานะปิดใช้งาน
เคอร์เนล:[ 117.850075] br0:พอร์ต 2(vif1.0) เข้าสู่สถานะปิดใช้งาน
แล้วคุณจะแก้ไขอะไรแบบนี้ได้อย่างไร? มีหลายตัวเลือก หนึ่ง การอัปเกรดเคอร์เนลที่อาจแก้ปัญหาได้อย่างลึกลับ ไม่ใช่เรื่องลึกลับเหมือนการแก้ไขสภาพการแข่งขันในสแต็คเครือข่าย Xen
ตัวเลือกที่สองคือพยายามปรับแต่งการตั้งค่าเครือข่ายในไฟล์การกำหนดค่า Xen ซึ่งอยู่ภายใต้ /etc/xen/xend-config.sxp ไฟล์นี้มีคำสั่งทุกประเภท รวมถึงวิธีตั้งค่าบริดจ์และอินเทอร์เฟซเครือข่ายเสมือน หลายคนอ้างว่าระบบเครือข่ายค่อนข้างบั๊ก และคุณควรกำหนดค่าสคริปต์ของคุณเองด้วยตนเอง
โดยเฉพาะอย่างยิ่ง ให้เปลี่ยนคำสั่งต่อไปนี้:
(network-script network-bridge) ถึง (network-script )
นอกจากนี้ คุณควรกำหนดค่าบริดจ์ด้วยตนเอง ในระหว่างการทดสอบ คุณควรใช้คำสั่ง brctl และ ifconfig และเมื่อคุณมั่นใจว่าการเปลี่ยนแปลงของคุณถูกต้องแล้ว คุณควรส่งต่อไปยังสคริปต์เครือข่ายของคุณอย่างถาวร ในระบบ RedHat และ SUSE นี่หมายถึงการสร้าง ifcfg-br
นี่คือตัวอย่างการกำหนดค่าบริดจ์ด้วยตนเอง:
brctl บวกbr br0
brctl setfd br0 0
ifconfig br0 10.0.0.128 ขึ้น netmask 255.255.255.0
brctl บวก br0 eth0
เพิ่มเส้นทาง - ค่าเริ่มต้นสุทธิ gw 10.0.0.254 br0
ifconfig eth0 0.0.0.0 ขึ้นไป
ถัดไปในเมนู เพิ่มหรือลดจำนวนเน็ตลูป ซึ่งหมายความว่าสามารถสร้างอุปกรณ์เสมือนได้กี่คู่ หากเกินขีดจำกัด คุณอาจต้องการเพิ่มจำนวน สิ่งนี้ทำได้โดยการสร้างไฟล์ชื่อ netloop ภายใต้ /etc/modprobe.d และเขียนข้างใน:
ตัวเลือก netloop nloopbacks=<บางจำนวนสูง เช่น 16, 32>
หรือเพียงแค่เพิ่มตัวเลือกนี้ใน /etc/modprobe.conf
อ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้:
เครือข่าย Xen
สะพานเครือข่าย Xen อธิบายด้วยบันทึกการแก้ไขปัญหา
เครือข่าย SLES ภายใต้ xen การแก้ไขปัญหาและคำแนะนำ
เครือข่าย Xen ที่ไม่ยุ่งยาก
ระบบเครือข่าย Linux แย่มาก เครือข่าย XEN แย่มาก
การสร้างสะพานเครือข่ายเสมือน Xen เพิ่มเติม
หากคุณบังเอิญเจอปัญหาเคอร์เนลล่ม ลิงก์ทั้งสองนี้อาจเป็นที่สนใจเช่นกัน โปรดระวังความล้ำหน้า:
Kernel BUG ที่ mm/vmalloc.c:2165
[PATCH] mm:ซิงค์ตารางพื้นที่หน้าที่อยู่ vmalloc ใน alloc_vm_area()
ปัญหาอาจแก้ไขได้โดยการลดจำนวนของเน็ตลูปให้เป็นศูนย์
เคล็ดลับ 3:เปิดใช้งานการเข้าถึง HTTP แบบเดิม
libvirt ทำให้ HTTP ซ้ำซ้อนเมื่อต้องเชื่อมต่อกับ dom0 และจัดการทั้งแบบโลคัลและรีโมต อย่างไรก็ตาม บางท่านอาจสนใจตัวเลือกนี้ โดยเฉพาะอย่างยิ่งหากคุณต้องการใช้เครื่องมืออย่าง OpenXenManager ซึ่งใช้ HTTP/HTTPS ในการเชื่อมต่อ ในการทำให้ Xen สามารถเข้าถึงได้จากเว็บ คุณจะต้องแก้ไขคำสั่งต่างๆ ในไฟล์คอนฟิกูเรชัน xend-config.sxp:
(เซิร์ฟเวอร์ xend-http ใช่)
(xend-พอร์ต 8000)
(xend-ที่อยู่ '')
เปลี่ยนเป็นใช่สำหรับเซิร์ฟเวอร์ xend-http และระบุพอร์ตที่ถูกต้อง ที่อยู่ xend ระบุที่อยู่ IP ของอินเทอร์เฟซเครือข่ายที่ Xend จะรับฟัง หากคุณปล่อยเครื่องหมายอัญประกาศว่างไว้ตามค่าเริ่มต้น เครื่องหมายจะฟังบนอินเทอร์เฟซที่มีอยู่ทั้งหมด ถัดไป โหลดไฟล์การกำหนดค่าซ้ำ:
/etc/init.d/xend โหลดซ้ำ
จากนั้นคุณสามารถทดสอบการเข้าถึงเว็บ:
เคล็ดลับ 4:ข้อผิดพลาด:ไม่สามารถเชื่อมต่อกับ 'localhost:8000':การเชื่อมต่อถูกปฏิเสธ
ข้อพิสูจน์ของเคล็ดลับข้างต้นคือคุณอาจได้รับข้อผิดพลาดปฏิเสธการเชื่อมต่อที่น่าเกลียดเมื่อคุณพยายามเชื่อมต่อกับ dom0 โดยใช้ virt-manager Python มีชื่อเสียงในด้านการใช้รายละเอียด ดังนั้น เตรียมตัวให้พร้อมสำหรับความอัปลักษณ์
เพื่อแก้ไขปัญหานี้ คุณอาจต้องเปิดใช้งานการเข้าถึง HTTP คุณต้องถามตัวเองว่าทำไมสิ่งนี้ถึงเกิดขึ้นตั้งแต่แรก สาเหตุที่เป็นไปได้มากที่สุดคือหนึ่งในบริการ Xen ไม่ทำงาน ซึ่งบังคับให้ virt-manager ถอยกลับไปใช้การเข้าถึงแบบเดิม หากคุณไม่ต้องการใช้โปรโตคอล HTTP คุณอาจต้องแน่ใจว่าระบบของคุณบู๊ตด้วยบริการ Xen ที่เกี่ยวข้องทั้งหมด โดยเฉพาะ libvirtd และ xend
เคล็ดลับ 5:ข้อผิดพลาดในการเริ่มต้น domU
เมื่อคุณพยายามเปิดใช้งานโดเมนของคุณด้วย xm create
#xm เริ่มการทดสอบ1
ข้อผิดพลาด:ไม่สามารถยกเลิกการหยุดโดเมนชั่วคราวได้:ต้องระบุจำนวนเต็ม
การใช้งาน:xm start
และเทียบเท่ากราฟิก:
ซึ่งโดยปกติหมายความว่าคุณได้ระบุส่วนประกอบฮาร์ดแวร์ที่ไม่มีอยู่จริงหรือไม่ได้รับการสนับสนุน เช่น การ์ดเครือข่ายหรือการ์ดเสียง โปรดตรวจสอบไฟล์การกำหนดค่าโดเมนของคุณ ซึ่งปกติจัดเก็บภายใต้ /etc/xen/vm เพื่อหาข้อผิดพลาด คุณอาจต้องการดู /var/log/messages รวมถึงบันทึกข้อผิดพลาด Xen - /var/log/xen/xend.log
ต่อไปนี้เป็นอีกรายการหนึ่ง:
#xm สร้างการทดสอบ 1
ใช้ไฟล์ปรับแต่ง "./test1"
ข้อผิดพลาด:(2, 'เคอร์เนลไม่ถูกต้อง', "elf_xen_note_check:ข้อผิดพลาด:ไม่ใช่รูปภาพ Xen-ELF:ไม่พบโน้ต ELF หรือส่วน '__xen_guest'\n")
กรณีนี้อาจเกิดขึ้นได้หากคุณพยายามเปิดเครื่องแขกรับเชิญแบบเสมือนเสมือนโดยใช้การตั้งค่าเคอร์เนล HVM ในไฟล์การกำหนดค่าโดเมน ค่อนข้างเล็กน้อยในการดีบักและแก้ไข
#xm สร้างการทดสอบ 1
ใช้ไฟล์ปรับแต่ง "./test1"
ข้อผิดพลาด:ไม่สามารถเชื่อมต่ออุปกรณ์ 768 (vbd) ได้
ไฟล์ /tmp/disk.raw ติดตั้งลูปแบ็คผ่าน /dev/loop1
ซึ่งติดตั้งในโดเมนเกสต์
และไม่สามารถติดตั้งได้ในขณะนี้
คุณอาจเห็นสิ่งนี้หากคุณพยายามนำไฟล์บนฮาร์ดดิสก์กลับมาใช้ซ้ำโดยเครื่องเสมือนเครื่องอื่น หรือคุณอาจติดตั้งเป็นอุปกรณ์ย้อนกลับที่ใดที่หนึ่งเพื่อตรวจสอบภายใน
เมื่อพูดถึงข้อผิดพลาด vbd นี่คืออีกข้อผิดพลาดหนึ่ง:
#xm สร้างการทดสอบ 1
ใช้ไฟล์ปรับแต่ง "./test1"
ข้อผิดพลาด:ไม่สามารถเชื่อมต่ออุปกรณ์ 5632 (vbd) ได้ ไม่พบอุปกรณ์.
รูปแบบของข้อความประเภทนี้ที่แสดงใน xend.log:
DEBUG (DevController:139) กำลังรออุปกรณ์ vscsi
DEBUG (DevController:139) กำลังรออุปกรณ์ vbd
DEBUG (DevController:144) กำลังรอ 768
คำเตือน (XendDomain:1076) ล้มเหลวในการตั้งค่าอุปกรณ์สำหรับ
เหตุผลในที่นี้อาจเป็นไฟล์ฮาร์ดดิสก์ที่ระบุไม่ถูกต้อง หรืออีกครั้ง การใช้งานอุปกรณ์บางอย่างไม่ถูกต้อง อาจเกิดจากการสะกดคำผิด ซึ่งคล้ายกับข้อผิดพลาดแรกที่ระบุไว้ด้านบน
ตอนนี้คำถามหนึ่งที่อาจเกิดขึ้นคือจะรู้ได้อย่างไรว่าอุปกรณ์ vbd เป็นอุปกรณ์ประเภทใด? วิธีแก้ปัญหาที่ง่ายที่สุดคือคุณสามารถยืนยันสิ่งนี้กับ Xen domU ที่บูทเครื่องใดก็ได้ อุปกรณ์ทั้งหมดอยู่ภายใต้ /sys/devices/xen/ ตัวอย่างเช่น:
#cat /sys/devices/xen/vbd-768/block/hda/hda1/dev
3:1
ที่นี่เราเห็นว่า vbd-768 เป็นอุปกรณ์บล็อกที่มีเลขหลัก 3 ดังนั้น hda1 จึงสอดคล้องกับ 3:1 ซึ่งย่อมาจากลอจิก เพิ่มเติมเกี่ยวกับระบบการตั้งชื่อนี้ในไม่กี่วินาที
และรายการที่สมบูรณ์สำหรับเครื่องเสมือนเฉพาะ:
#จะ
รวม 0
drwxr-xr-x 2 รูท root 0 18 ธ.ค. 12:07 กำลังไฟ
-rw-r--r-- 1 รูท 4096 18 ธ.ค. 12:07 น. เหตุการณ์
drwxr-xr-x 4 รูท 0 18 ธันวาคม 12:05 vbd-5632
drwxr-xr-x 4 รูท 0 18 ธันวาคม 12:05 vbd-768
drwxr-xr-x 3 รูท รูท 0 18 ธ.ค. 12:05 น. vfb-0
drwxr-xr-x 4 รูท 0 18 ธันวาคม 12:05 vif-0
วิธีที่ซับซ้อนกว่าคือการแปลตัวเลขเป็นเลขฐานสิบหก จากนั้นใช้บิตที่มีนัยสำคัญน้อยที่สุดสองบิตสำหรับตัวเลขรอง และบิตที่สูงขึ้นที่เหลือเป็นตัวเลขหลัก จากนั้นอ้างอิงรายการ devices.txt ทางออนไลน์หรือภายใต้ /usr/src/ linux/Documentation เพื่อถอดรหัสประเภทอุปกรณ์ที่แน่นอน ตัวอย่างเช่น ทศนิยม 768 คือ x0300 hexa ซึ่งหมายถึงเลขหลัก 3 เลขรอง 0 ซึ่งจะแปลเป็นอุปกรณ์ IDE ตัวแรก (ศูนย์) หรือ hda ในทำนองเดียวกัน 5632 แปลเป็น x1600 ซึ่งหมายถึงชุดค่าผสมหลัก 16,00 ชุดรอง ซึ่งสำหรับอุปกรณ์บล็อกคือซีดีรอม ครึกครื้นดีใช่ไหม เธรดรายชื่อผู้รับจดหมาย Xen แบบเก่านี้อาจเป็นที่สนใจเช่นกัน
เคล็ดลับที่ 6:การตั้งค่าขั้นสูง
ในที่สุดสิ่งที่มีน้ำหนักเบา เมื่อบูตแขกของคุณ คุณอาจต้องปรับแต่งการตั้งค่าขั้นสูงบางอย่าง ตัวอย่างเช่น คุณอาจสนใจ PAE หรือ OpenGL คุณควรทำเครื่องหมายตัวเลือกที่ถูกต้องในตัวช่วยสร้างเครื่องเสมือน หรืออีกทางหนึ่ง หากคุณคุ้นเคยกับบรรทัดคำสั่งและไฟล์เครื่องเสมือนเป็นอย่างดี เพียงเพิ่มสตริงที่ถูกต้องที่นั่น
เคล็ดลับสุดท้ายที่ไม่แสดงในรายการคือการตั้งค่าระบบมัลติบูตด้วย GRUB2 ที่รับผิดชอบ ไม่มีอะไรใหม่ เราได้พูดคุยเกี่ยวกับเรื่องนี้ในบทความแนะนำ ดังนั้นโปรดไปที่นั่นและลองดู
และเราจะจบลงที่นี่ในวันนี้
สรุป
ฉันเชื่อว่าเครื่องมือใด ๆ ที่เขียนด้วย Python ได้รับการออกแบบให้มีข้อผิดพลาดมากที่สุดเท่าที่จะเป็นไปได้เพียงเพื่อประณามผู้ดูแลระบบและรบกวนพวกเขา Xen อยู่ในหมวดหมู่นี้ โดยมีข้อความค่อนข้างเยอะและไม่สุภาพเกี่ยวกับปัญหาที่กำลังเผชิญอยู่ ไม่สำคัญที่จะพูดน้อย
หวังว่าบทช่วยสอนนี้จะมีประโยชน์กับคุณบ้าง ฉันต้องยอมรับว่ามีส่วนต่างเล็กน้อยสำหรับข้อผิดพลาดที่นี่ คุณอาจลองใช้คำแนะนำเหล่านี้และล้มเหลวอย่างน่าสังเวช รู้สึกโกรธและผิดหวัง นี่เป็นเพราะมีสถานการณ์ที่แตกต่างกันหลายร้อยสถานการณ์ที่อาจสร้างความเสียหายให้กับคุณ ซึ่งแต่ละสถานการณ์จะแตกต่างกันเล็กน้อย คำแนะนำบางอย่างควรมีประโยชน์ วิธีแก้ไขการตัดการเชื่อมต่อ VNC วิธีตรวจสอบปัญหาเครือข่าย ข้อผิดพลาดต่างๆ และปัญหาการกำหนดค่า และอื่นๆ แค่นั้นแหละ แล้วเจอกัน
ไชโย