Computer >> Máy Tính >  >> Phần mềm >> Máy ảo

Khắc phục sự cố KVM thường gặp

Trước đây, tôi đã cung cấp cho bạn hai bài viết khắc phục sự cố Xen, thảo luận về một số vấn đề phổ biến hơn mà bạn có thể gặp phải khi cố gắng cung cấp môi trường của mình bằng công nghệ Xen. Hôm nay, chúng ta sẽ làm điều tương tự với KVM.

Cá nhân tôi nghĩ KVM thanh lịch hơn nhiều khi nói đến độ dài và độ phức tạp tổng thể của Python, nhưng đôi khi bạn vẫn có thể gặp phải những lỗi xấu khiến cuộc sống của bạn trở nên khó khăn hơn. Hướng dẫn này sẽ hướng dẫn bạn cách khắc phục chúng, cách xác định các xung đột cấu hình và thiết lập có thể xảy ra cũng như nhiều thủ thuật gọn gàng khác. Sau tôi.

Mẹo 1:Giao diện mạng cầu nối không hiển thị

Giả sử bạn muốn sử dụng một thiết bị cầu tùy chỉnh mà bạn đã tạo, được gọi là br0. Tuy nhiên, khi bạn cố gắng thiết lập mạng của mình và yêu cầu khách của bạn sử dụng giao diện cụ thể, nó không hiển thị trong menu thả xuống trong Trình quản lý Máy ảo. Hình ảnh bên dưới cho thấy điều hoàn toàn ngược lại, nhưng hãy tưởng tượng thiết bị mong muốn của bạn không có trong danh sách các bộ điều hợp có sẵn. Điều này có thể xảy ra, và tôi đã thấy điều này xảy ra, vì vậy hãy tin tôi vào điều này, các công dân của Internet.

Khắc phục sự cố KVM thường gặp

Giải pháp rất đơn giản - chỉnh sửa thủ công tệp cấu hình cho miền của bạn. Theo mặc định, KVM lưu trữ các tệp ở hai vị trí, /etc/kvm/vm hoặc /etc/libvirt/qemu, do đó, bạn có nhiều khả năng tìm thấy các tệp XML của mình nhất ở đó. Mở cái có liên quan và thay đổi thủ công chi tiết bộ điều hợp cầu nối trong . Đóng tệp, khởi động máy ảo và tận hưởng.



<địa chỉ mac='52:54:00:0d:e6:4a'/>

Mẹo 2:Biosdevname &không có mạng

Biosdevname là một tiện ích cố gắng gán tên do BIOS đặt cho các thiết bị, duy trì tính chung và đơn giản hóa logic quản trị phần cứng, đặc biệt là với các thiết bị mạng. Nếu bạn có nhiều trong số đó, với các khả năng hoặc chức năng riêng biệt, bạn sẽ khó xác định chúng bằng các tên ethX chung, nhưng nếu chúng được cung cấp các chuỗi duy nhất, bạn sẽ dễ dàng phân biệt các bộ điều hợp 1Gbps và 10Gbps, v.v. Đương nhiên, điều này chủ yếu hữu ích cho các hệ thống doanh nghiệp, vì những người ở nhà hiếm khi gặp phải tình trạng khó xử này.

Tuy nhiên, tác dụng phụ của việc sử dụng biosdevname là nếu nó được sử dụng bên trong hệ điều hành khách trong các máy ảo do KVM tạo, thì bạn có thể không có mạng vì các thiết bị ảo hóa sẽ có tên thực không khớp lắm.

Có một số cách bạn có thể giải quyết vấn đề. Thứ nhất, một số phiên bản của tiện ích có khả năng phát hiện chúng đang được gọi bên trong môi trường ảo và sẽ thoát ra mà máy không có bất kỳ thay đổi nào. Một cách khác là chuyển một đối số hạt nhân trong menu GRUB; biosdevname=0 sẽ vô hiệu hóa tiện ích đang chạy.

Tùy chọn thứ ba là hack các quy tắc udev được sử dụng để gán tên cho thẻ mạng. Đây là một ví dụ rất thô sơ; cái này được thiết kế cho một máy có một bộ điều hợp mạng duy nhất, do đó bạn sẽ cần một logic động hơn cho nhiều thẻ. Hoặc, như văn bản đã nhận xét cho biết, bạn sẽ cần tạo một dòng riêng biệt cho mỗi quy tắc.

Khắc phục sự cố KVM thường gặp

Bạn có thể thực hiện thay đổi thủ công để nhận nhiệm vụ cổ điển:

vi /etc/udev/rules.d/70-persistent-net.rules

Thay thế chuỗi NAME từ "eth_biosname" thành "ethX" hoặc bất kỳ thứ gì bạn cần:

# Thiết bị PCI ...
SUBSYSTEM=="net", ACTION=="add", ATTR(type)=="1",
KERNEL=="eth*", NAME="eth_biosname"

# Thiết bị PCI ...
SUBSYSTEM=="net", ACTION=="add", ATTR(type)=="1",
KERNEL=="eth*", NAME="eth0"

Bạn sẽ nhận được các quy tắc khác nhau tùy thuộc vào phần cứng ảo mà bạn sử dụng trong các máy ảo của mình. Ví dụ:bạn có thể chọn phần cứng ảo Realtek, e1000 hoặc virtio, dẫn đến các chuỗi khác. Hãy chú ý và đảm bảo rằng bạn phù hợp với giải pháp cho môi trường cụ thể của mình.

Mẹo 3:Tên miền đã tồn tại

Điều gì sẽ xảy ra nếu bạn cố xác định một miền mới và miền đó đã tồn tại, ngoại trừ việc bạn gặp sự cố khi tìm tệp cấu hình hoặc khai báo miền đó. danh sách virsh không có, trình quản lý tài năng không hiển thị nó ở bất kỳ đâu. Vậy bạn làm gì?

virsh xác định machine.xml
lỗi:Không thể xác định tên miền từ machine.xml
lỗi:thao tác không thành công:tên miền 'máy' đã tồn tại
với uuid 883ab02f-1a67-7430-ef9a-2b59af52210e7

Bạn sẽ phải tìm tệp cấu hình và xóa nó. Và sau đó khởi động lại dịch vụ libvirtd.

cập nhậtb
xác định vị trí máy.xml
rm <đường dẫn đầy đủ đến machine.xml>
/etc/init.d/libvirtd khởi động lại

Mẹo 4:Lỗi nội bộ Không thể tìm thấy cgroup

Sự cố này có thể xuất hiện sau khi khởi động lại libvirtd, như trong ví dụ trên hoặc hoàn toàn không liên quan. Một thông báo lỗi đầy đủ có thể trông như thế này:

virsh tạo machine.xml
lỗi:Không thể tạo miền từ machine.xml
lỗi:lỗi nội bộ Không thể tìm thấy cgroup cho máy

Lý do của lỗi này có thể liên quan đến systemd, như được chỉ định trong báo cáo Bugzilla, nhưng nó cũng có thể xảy ra trên các máy nguyên bản của bạn không sử dụng systemd. Trong hầu hết các trường hợp, đó là một cuộc chạy đua rất tế nhị giữa các nhóm và libvirtd, do dịch vụ libvirtd xuất hiện trước các nhóm, một trong các nhóm bị xóa hoặc không tồn tại ngay từ đầu.

Bạn có thể giải quyết vấn đề bằng cách chỉnh sửa cấu hình libvirtd, /etc/libvirt/qemu.conf. bên trong tệp này, bạn cần chỉnh sửa chỉ thị cgroups_controllers để nó không liệt kê bất kỳ nhóm nào, trong trường hợp đó, libvirtd sẽ có thể chạy mà không cần chúng.

cgroups_controllers =[ ]

Sau này, bạn sẽ phải khởi động lại libvirtd. Ngoài ra, bạn sẽ phải tạo các nhóm cần thiết theo cách thủ công và chỉ định quy trình libvirtd vào hệ thống con có liên quan.

Mẹo 5:Máy ảo biến mất khỏi VMM khi tạm dừng/khởi động lại

Đây có thể là một vấn đề rất đơn giản, trên thực tế. Sau khi bạn tạm dừng hoặc khởi động lại máy ảo, bảng điều khiển máy ảo sẽ đóng lại. Cấu hình của bạn đã sẵn sàng, nhưng đây là một bất tiện lớn, vì bạn phải can thiệp vào chu trình quản lý máy.

Bạn cần tìm mệnh đề on_reboot trong tệp XML có liên quan cho máy ảo của mình và đảm bảo rằng hành động được đặt thành khởi động lại thay vì hủy. Của bạn đi, đó là tất cả để có nó.

hủy
khởi động lại
hủy

Mẹo 6:Không khởi động lại; chức năng không được hỗ trợ

Một lần nữa, rất liên quan đến mẹo trước. Nếu bạn chỉ định khởi động lại thay vì khởi động lại, bạn sẽ biết đây là một lệnh không hợp lệ mà KVM không thể thực thi. Tuy nhiên, rất có thể bạn sẽ thấy một lỗi khá phổ biến:

libvirtError:chức năng này không được trình ảo hóa hỗ trợ:virDomainReboot

Nếu bạn sử dụng khởi động lại, tất cả sẽ ổn.

Mẹo 7:Lỗi bootloader sau khi cài đặt

Đôi khi, bạn có thể thấy lỗi GRUB, rất có thể là lỗi số 15, trong lần khởi động lại đầu tiên sau khi cài đặt từ nguồn phương tiện bên ngoài. Điều này có thể xảy ra nếu bạn để hình ảnh CD/DVD được đính kèm vào máy ảo và được chọn làm thiết bị khởi động đầu tiên trong tệp XML của bạn. Sự cố tương tự như lỗi VirtualBox này, ảnh hưởng đến một số bản phân phối Linux hiện có. Ví dụ:

gốc (hd0,1)
Loại hệ thống tập tin là ext2fs, loại phân vùng 0x83
hạt nhân /boot/vmlinuz

Lỗi 15:Không tìm thấy tệp

Nhấn phím bất kỳ để tiếp tục...

Bạn có thể giải quyết bằng cách ngắt kết nối ảnh ISO và khởi động lại máy khách. Lần này, nó sẽ hoạt động tốt. Xin lưu ý rằng sự cố sẽ không biểu hiện nếu bạn đặt đĩa cứng của mình làm thiết bị có thể khởi động đầu tiên, vì KVM sẽ tự động chuyển sang nguồn khả dụng thứ hai, rất có thể là PXE hoặc CD/DVD, nếu nó không thể tìm thấy bảng phân vùng hợp lệ trên đĩa, đó sẽ là trường hợp nếu bạn chỉ cài đặt ngay bây giờ.

Và tôi đoán chúng ta đã hoàn thành ở đây cho ngày hôm nay.

Đọc thêm

Bạn có thể quan tâm đến một số bài viết khác về KVM:

Lưu trữ KVM và hướng dẫn mạng, cộng với kết nối mạng

Cách sử dụng song song KVM + Virtualbox

Hướng dẫn nhân bản KVM

Kết luận

Nửa tá mẹo cho hướng dẫn khắc phục sự cố đầu tiên, tôi nghĩ không tệ. Hướng dẫn này tập trung vào thiết lập mạng bắc cầu, xử lý các vấn đề về biosdevname, cgroups + libvirtd, hủy đăng ký các miền trùng lặp do virt-manager tự động tạo và giải quyết vấn đề khởi động lại hệ điều hành khách.

Hầu hết công việc được thực hiện bằng cách chỉnh sửa tệp cấu hình và khởi động lại dịch vụ. Chúng tôi không dựa vào GUI, vì bất kỳ hành động nào có thể được dịch thành dòng lệnh sau đó đều có thể được viết kịch bản để quản lý hoàn toàn tự động và dễ dàng hơn. Nhưng dù sao, tôi hy vọng bạn thích nó; nếu bạn có ý tưởng cho phần tiếp theo, hãy ping tôi.

Chúc mừng.