Làm việc với máy ảo KVM. Giới thiệu. Trình ảo hóa cao su. Sử dụng các nhóm logic để ảo hóa QEMU-KVM trong Linux Cài đặt và định cấu hình kvm ubuntu

Trước đây tôi đã viết về cài đặt Qemu-KVM V. Debian. Nhưng theo tôi, thông tin hóa ra chưa đầy đủ. Thêm vào đó tôi đã không tính đến một số sắc thái. Vì vậy, tôi xin gửi đến các bạn một bài viết cập nhật về cách cài đặt máy ảo Qemu-KVM. Đương nhiên là tôi sẽ xóa bài viết cũ.

Tôi nghĩ tôi nên giải thích nó là gì máy ảo, không đáng. Có thể bạn biết điều này (vì bạn đang đọc bài viết này). Nếu không - . Chúng tôi sẽ tập trung trực tiếp vào chủ đề. Qemu-KVM là một dự án kết hợp hai trong số những công nghệ mơ mộng nhất (theo ý kiến ​​​​của tôi) về ảo hóa hoàn toàn. Qemu là một loại "trình giả lập máy tính" hỗ trợ nhiều kiến ​​trúc phần cứng khác nhau. Nó có thể chạy hầu hết mọi hệ điều hành cho mọi thiết bị (ví dụ mình chạy phiên bản cũ Mac OS X, dành cho PowerPC). Nhược điểm của Qemu là chậm do thiếu khả năng tăng tốc phần cứng. Và rồi một dự án khác xuất hiện để giải cứu - KVM. Hoặc máy ảo hạt nhân. KVM là công nghệ nhân Linux cho phép tăng tốc phần cứng với ảo hóa hoàn toàn. Nhược điểm của KVM là chỉ hỗ trợ kiến ​​trúc x86

Tại sao lại là Qemu-KVM? Đối với Linux, đây là dự án ảo hóa được khuyên dùng nhiều nhất. Nó hoạt động nhanh hơn Hộp ảoTrình phát VMware(theo thử nghiệm của tôi), KVM là công nghệ gốc dành cho Linux. Ngoài ra, nếu bạn có một máy tính chơi game tốt với hai card màn hình, bạn có thể cài đặt trong Qemu-KVM các cửa sổ, ném một trong các card màn hình vào đó và quên khởi động lại sang hệ điều hành khác. Nếu muốn chơi, bạn khởi chạy máy ảo chạy Windows và chơi. Hiệu suất sẽ bằng 95% hiệu suất của Windows được cài đặt trên phần cứng. Nhưng theo ý kiến ​​của tôi thì nó thật tuyệt vời. Tôi sẽ viết một bài riêng về việc này. Nó sẽ rất thú vị :)

Bây giờ tôi sẽ mô tả kế hoạch hành động của chúng tôi. Đầu tiên, tôi sẽ tiến hành cài đặt bằng một ví dụ Debian 8.2 Gnome 64 bit, mặc dù sẽ không có bất kỳ sự khác biệt đáng kể nào trong các môi trường đồ họa khác. Thứ hai, tôi sẽ mô tả cách làm việc với KVM chỉ ở chế độ đồ họa (xét cho cùng, chúng tôi sẽ không cài đặt nó trên máy chủ). Do đó, không có thiết bị đầu cuối, tập lệnh, v.v. như thường được thực hiện trong trường hợp ảo hóa máy chủ. Thứ ba, tôi khuyên bạn nên đọc thêm tài liệu về Qemu và KVM (tôi sẽ cung cấp liên kết ở cuối bài viết). Điều này sẽ rất hữu ích nếu bạn muốn tận dụng tối đa tiềm năng của gói này. Được rồi, kế hoạch hành động của chúng ta đã rõ ràng. Bây giờ là các bước hành động:

  • cài đặt qemu-kvm;
  • cài đặt trình quản lý đồ họa và các tiện ích bổ sung;
  • thiết lập cầu nối mạng;
  • tạo bộ nhớ cho máy ảo;
  • cài đặt một hệ thống khách.
Trước tiên, hãy kiểm tra xem máy tính của bạn có hỗ trợ ảo hóa phần cứng hay không. Để thực hiện việc này, hãy chạy lệnh trong terminal:

ví dụ: "(vmx|svm)" /proc/cpuinfo

Đầu ra lệnh phải chứa một trong hai vmx, hoặc svm. Nếu chúng không có ở đó, hãy kiểm tra xem ảo hóa có được bật trong BIOS hay không (tìm các mục Intel VT-i hoặc tương tự cho AMD). Nếu không có gì, thì bạn đã hết may mắn.

Cài đặt các thành phần cần thiết:

sudo apt cài đặt qemu-kvm bridge-utils libvirt-bin virt-manager

Thêm chính bạn vào nhóm libvirt:

người bổ sung sudo $USER libvirt

Bây giờ hãy thiết lập mạng. Để tất cả các máy ảo có thể truy cập mạng và liên lạc với nhau, bạn cần tạo cầu nối mạng và card mạng ảo cho mỗi máy ảo ( thiết bị nhấn). Vì chúng ta sẽ cài đặt máy ảo từ giao diện đồ họa nên không cần phải tạo vòi theo cách thủ công. Người quản lý tài năng sẽ làm điều này cho chúng tôi mỗi khi chúng tôi bắt đầu. Chúng ta chỉ cần cấu hình cây cầu. Đầu tiên, hãy kích hoạt định tuyến trong kernel:

sudo nano /etc/sysctl.conf

Chúng tôi tìm dòng net.ipv4_forward=0 và thay đổi giá trị của nó thành 1 . Chúng tôi cũng tiết kiệm:

sudo sysctl -p

Tiếp theo, tôi sẽ giả sử như sau: 1) trên máy tính của bạn có một card mạng nhận địa chỉ IP từ bộ định tuyến. 2) bạn truy cập Internet qua modem 3G và card mạng của bạn miễn phí. Tùy chọn này liên quan đến nhiều công việc thủ công hơn, nhưng nó đã được thử nghiệm nhiều lần (tôi đã tự mình thực hiện việc này trên một trong các máy). Vì vậy, hãy mở tệp giao diện:

sudo nano/etc/mạng/giao diện

Nội dung mặc định của nó là:



tự động lo
iface lo inet loopback

Chúng tôi thay đổi nội dung của nó. Đối với tùy chọn đầu tiên:

nguồn /etc/network/interfaces.d/*

# Giao diện mạng loopback
tự động lo
iface lo inet loopback

tự động eth0
hướng dẫn sử dụng iface eth0 inet

tự động br0
iface br0 inet tĩnh
địa chỉ 192.168.0.2
cổng 192.168.0.1
mặt nạ mạng 255.255.255.0
mạng 192.168.0.0
phát sóng 192.168.0.255
cầu_port eth0
tắt cầu_stp
cầu_maxwait 0
cầu_fd 0

Đối với tùy chọn thứ hai:

nguồn /etc/network/interfaces.d/*

# Giao diện mạng loopback
tự động lo
iface lo inet loopback

tự động ppp0
iface ppp0 inet wvdial

tự động eth0
hướng dẫn sử dụng iface eth0 inet

tự động br0
iface br0 inet tĩnh
địa chỉ 192.168.0.2
cổng 192.168.0.1
mặt nạ mạng 255.255.255.0
mạng 192.168.0.0
phát sóng 192.168.0.255
cầu_port eth0
tắt cầu_stp
cầu_maxwait 0
cầu_fd 0
lên tuyến đường mặc định br0

Ghi chú: nếu bạn không cần kết nối Internet tự động qua modem sau khi hệ thống khởi động, hãy xóa dòng auto ppp0 và
iface ppp0 inet wvdial . Nếu không, hãy đảm bảo rằng khi hệ thống khởi động, modem đã được cắm vào cổng USB.

Cứu. Bây giờ đối với tùy chọn với modem, bạn cần cài đặt chương trình quay số quay số:

sudo apt cài đặt wvdial

Chỉnh sửa cấu hình (lưu ý: lấy modem 3G làm ví dụ Beeline. Bạn có thể dễ dàng tìm thấy ví dụ về cấu hình cho các modem khác trên Internet):

sudo nano /etc/wvdial.conf


Ban đầu1 = ATZ
Ban đầu2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP","home.beeline.ru"
Chế độ ngu ngốc = 1
ISDN = 0
Loại Modem = Modem USB
PPPD mới = có
Điện thoại = *99#
Modem = /dev/ttyACM0
Tên người dùng = beeline
Mật khẩu = beeline
Baud = 9600
Quốc gia = Nga
Tự động kết nối lại=bật
DNS tự động = tắt
Giây nhàn rỗi = 0

Cứu. Bây giờ modem sẽ bật ngay sau khi hệ thống khởi động. Xếp hàng tuyến đường del mặc định br0 xóa tuyến đường mặc định qua cầu. Nếu không làm điều này, bạn sẽ không thể kết nối Internet vì lưu lượng truy cập sẽ đi qua cầu chứ không qua modem 3G.

Bước cuối cùng chúng ta cần nói bức tường lửa, để nó chuyển lưu lượng truy cập từ máy ảo của chúng ta tới mạng và ngược lại. Để làm điều này, bạn có thể thực hiện theo hai cách: viết một tập lệnh với một số quy tắc cho iptables, sẽ chạy cùng với hệ thống hoặc nhập các quy tắc này theo cách thủ công và lưu chúng. Tôi sẽ sử dụng tùy chọn đầu tiên. Đối với cái thứ hai, bạn sẽ cần cài đặt gói iptables-liên tục và chỉ cần nhập từng quy tắc một (sử dụng sudo). Vì thế. tạo một tập lệnh (trong bất kỳ trình soạn thảo văn bản nào). Dán nội dung sau vào đó:

#!/bin/sh

# Xác định giao diện đầu ra sẽ áp dụng thay thế địa chỉ (NAT)
iptables -v -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Chúng tôi chuyển tiếp tất cả các gói mà modem nhận được từ mạng toàn cầu (0.0.0.0/0) đến mạng cục bộ (192.168.0.0/24)
iptables -v -A TIẾN LÊN -i ppp0 -o br0 -s 0.0.0.0/0 -d 192.168.0.0/24 -j CHẤP NHẬN

# Chuyển tiếp tất cả các gói đến từ mạng cục bộ (192.168.0.0/24) sang mạng toàn cầu (0.0.0.0/0)
iptables -v -A TIẾN LÊN -i br0 -o ppp0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j CHẤP NHẬN

Lưu nó dưới dạng cổng.sh và cấp quyền thực thi (trong thuộc tính tệp hoặc trong thiết bị đầu cuối bằng lệnh chmod +x cổng.sh). Bây giờ bạn có thể khởi chạy thủ công sau khi hệ thống khởi động hoặc thêm nó vào quá trình khởi động. Để thực hiện việc này, hãy di chuyển tập lệnh sang ~/.config/autostart(trong trình quản lý file bật hiện file ẩn lên sẽ thấy thư mục .config trong thư mục chính của bạn).

Bây giờ mọi thứ đã sẵn sàng để cài đặt máy ảo. Từ menu ứng dụng, khởi chạy Virt Manager (trình quản lý máy ảo):

Nhấp chuột phải vào dòng localhost và lựa chọn Chi tiết. Chuyển đến tab Kho. Chúng ta cần chỉ định thư mục (hoặc phân vùng/đĩa) để lưu trữ các máy ảo.

Ở góc dưới bên trái, nhấp vào dấu cộng ( Thêm một hồ bơi), cho biết loại lưu trữ và đường dẫn đến nó.

Trên tab Giao diện mạng, bạn có thể kiểm tra xem mọi thứ có hoạt động không.

Bây giờ chúng ta nhấn Tệp - Máy ảo mới. Chỉ định đường dẫn đến ảnh đĩa và loại máy ảo. Tiếp theo, chúng tôi chỉ ra dung lượng RAM cho nó và số lượng lõi xử lý. Tiếp theo, cho biết bộ nhớ của chúng tôi và nhấp vào Tập mới. Chỉ định tên, để lại loại qcow2, và kích thước. Đây sẽ là một đĩa cứng ảo. Nếu bạn dự định cài đặt một hệ thống có vỏ đồ họa và một loạt chương trình, hãy cung cấp thêm dung lượng (50 gigabyte). Trên tab cuối cùng, chọn hộp Thay đổi cài đặt trước khi khởi chạy, kiểm tra xem bridge của chúng ta đã được chọn làm thiết bị mạng chưa, viết bất kỳ tên nào cho máy ảo và nhấp vào Hoàn thành. Cửa sổ thông số cho máy ảo này sẽ mở ra trước mặt bạn.





Chuyển đến tab CPU, và đánh dấu vào Sao chép cài đặt bộ xử lý hệ thống máy chủ.

Bên cạnh tab Mạng lưới(tiếp theo) và cũng chỉ ra vitio. Trên tab Trưng bày vui lòng cho biết gia vị, và trên tab Băng hình - QXL. Thông thường sự kết hợp này mang lại hiệu suất kết xuất đồ họa tối đa, nhưng nếu muốn, bạn có thể thử nghiệm. Xin lưu ý rằng đối với hệ thống máy khách Windows, cần phải cài đặt trình điều khiển QXL riêng (trong chính Windows).


Bây giờ mọi thứ đã sẵn sàng, hãy nhấp vào ở góc trên bên trái Bắt đầu cài đặt. Và chúng tôi cài đặt hệ thống như bình thường, ngoại trừ một ngoại lệ: ngay khi trình cài đặt bắt đầu tự động định cấu hình mạng, hãy nhấp vào Hủy bỏ và chọn Cấu hình mạng theo cách thủ công. Chỉ định địa chỉ IP mong muốn cho máy ảo (trong trường hợp của chúng tôi 192.168.0.3 ), mặt nạ mạng con ( 255.255.255.0 ), cổng (cổng sẽ là địa chỉ máy chủ, nghĩa là 192.168.0.2 ) và máy chủ DNS (ở đây chỉ cần chỉ định Google 8.8.8.8 ). Đó là tất cả. Không cần phải làm gì thêm. Cài đặt hệ thống và cấu hình nó. Nói chung là vậy thôi. Các bước được mô tả là một cách để thay thế VirtualBox bằng một giải pháp thay thế tốt hơn. Sau khi đọc tài liệu, bạn sẽ hiểu khả năng của Qemu-KVM rộng đến mức nào. Tôi đã cố tình không mô tả ở đây các tham số và phương pháp bổ sung của bảng điều khiển để khởi chạy máy ảo thông qua thiết bị đầu cuối, vì điều này không phải lúc nào cũng cần thiết trên máy gia đình. Tôi sẽ viết một bài riêng về vấn đề này, về việc thiết lập một máy chủ đa chức năng tại nhà (cũng có thể hoạt động như một máy chủ máy ảo). Đối với những người vì lý do nào đó không hiểu nội dung được viết hoặc vẫn có những khoảnh khắc khó hiểu, tôi khuyên bạn nên xem một video trong đó tôi sẽ không mô tả nhưng sẽ hướng dẫn cách cài đặt và định cấu hình tất cả nội dung này. Nếu bạn có gợi ý hoặc bổ sung cho bài viết, hãy viết bình luận.

Trong bài viết giới thiệu này, tôi sẽ giới thiệu ngắn gọn tất cả các công cụ phần mềm được sử dụng trong quá trình phát triển dịch vụ. Chúng sẽ được thảo luận chi tiết hơn trong các bài viết sau.

Tại sao ? Hệ điều hành này gần gũi và dễ hiểu đối với tôi nên không hề có sự dằn vặt, dằn vặt hay trăn trở khi lựa chọn bản phân phối. Nó không có bất kỳ lợi thế cụ thể nào so với Red Hat Enterprise Linux, nhưng quyết định được đưa ra là hoạt động với một hệ thống quen thuộc.

Nếu bạn đang dự định triển khai một cách độc lập một cơ sở hạ tầng sử dụng các công nghệ tương tự, tôi khuyên bạn nên sử dụng RHEL: nhờ có tài liệu tốt và các chương trình ứng dụng được viết tốt, nếu không phải là cấp độ lớn thì chắc chắn sẽ đơn giản gấp đôi, và nhờ hệ thống chứng nhận được phát triển, bạn có thể dễ dàng tìm thấy một số chuyên gia quen thuộc với hệ điều hành này ở cấp độ phù hợp.

Chúng tôi, một lần nữa, quyết định sử dụng Bóp Debian với một bộ gói từ Sid/Thử nghiệm và một số gói được nhập lại và biên dịch cùng với các bản vá của chúng tôi.
Có kế hoạch xuất bản một kho lưu trữ với các gói.

Khi chọn công nghệ ảo hóa, hai tùy chọn đã được xem xét - Xen và KVM.

Ngoài ra, thực tế là có một số lượng lớn các nhà phát triển, nhà cung cấp dịch vụ lưu trữ và giải pháp thương mại dựa trên Xen - việc triển khai giải pháp dựa trên KVM càng thú vị hơn.

Lý do chính khiến chúng tôi quyết định sử dụng KVM là nhu cầu chạy các máy ảo với FreeBSD và trong tương lai là MS Windows.

Để quản lý máy ảo, việc sử dụng các sản phẩm sử dụng API của nó trở nên cực kỳ thuận tiện: trinh nữ, người quản lý tài năng, cài đặt virt, vân vân.

Đây là hệ thống lưu trữ cài đặt của máy ảo, quản lý, lưu giữ số liệu thống kê về chúng, đảm bảo giao diện của máy ảo được nâng lên khi khởi động, kết nối các thiết bị với máy - nói chung là thực hiện rất nhiều công việc hữu ích và nhiều hơn thế một chút.

Tất nhiên, giải pháp không hoàn hảo. Những nhược điểm bao gồm:

  • Thông báo lỗi hoàn toàn điên rồ.
  • Không thể thay đổi một phần cấu hình máy ảo một cách nhanh chóng, mặc dù QMP (Giao thức giám sát QEMU) cho phép điều này.
  • Đôi khi, vì một số lý do không xác định, không thể kết nối với libvirtd - nó ngừng phản hồi với các sự kiện bên ngoài.

Vấn đề chính khi triển khai dịch vụ ngay từ đầu là hạn chế về tài nguyên cho máy ảo. Trong Xen, vấn đề này đã được giải quyết với sự trợ giúp của bộ lập lịch nội bộ nhằm phân phối tài nguyên giữa các máy ảo - và điều tuyệt vời nhất là khả năng hạn chế hoạt động của đĩa cũng đã được triển khai.

Không có gì giống như thế này trong KVM cho đến khi cơ chế phân bổ tài nguyên hạt nhân ra đời. Như thường lệ trong Linux, việc truy cập vào các chức năng này được thực hiện thông qua một hệ thống tệp đặc biệt nhóm, trong đó, bằng cách sử dụng các lệnh gọi hệ thống write() thông thường, người ta có thể thêm một quy trình vào một nhóm, gán cho nó trọng số vẹt, chỉ định lõi mà nó sẽ chạy, chỉ định băng thông đĩa mà quy trình có thể sử dụng hoặc, một lần nữa , gán trọng số cho nó.

Lợi ích là tất cả những điều này được triển khai bên trong kernel và nó có thể được sử dụng không chỉ cho máy chủ mà còn cho máy tính để bàn (được sử dụng trong “Bản vá hạt nhân Linux dòng ~ 200 dòng nổi tiếng có điều kỳ diệu”). Và theo ý kiến ​​​​của tôi, đây là một trong những thay đổi quan trọng nhất trong nhánh 2.6, không tính #12309 yêu thích của tôi và không tính việc lưu trữ hệ thống tệp khác. Chà, có lẽ ngoại trừ POHMELFS (nhưng hoàn toàn là vì cái tên).

Thái độ của tôi đối với thư viện tiện ích này rất mơ hồ.

Một mặt nó trông giống như thế này:

Và thứ này cũng rất khó để lắp ráp từ nguồn, chứ chưa nói đến thành một gói: đôi khi đối với tôi, có vẻ như Linux From Scratch xây dựng từ đầu dễ dàng hơn một chút.

Mặt khác, nó là một thứ rất mạnh mẽ cho phép bạn tạo image cho máy ảo, sửa đổi, nén, cài đặt grub, sửa đổi bảng phân vùng, quản lý tập tin cấu hình, chuyển máy phần cứng sang môi trường ảo, chuyển máy ảo từ hình ảnh này sang hình ảnh khác, chuyển máy ảo từ hình ảnh sang phần cứng và thành thật mà nói, ở đây trí tưởng tượng của tôi đã làm tôi thất vọng một chút. Ồ, vâng: bạn cũng có thể chạy một daemon bên trong máy ảo Linux và truy cập trực tiếp vào dữ liệu máy ảo, đồng thời thực hiện tất cả những điều này trong shell, python, Perl, java, ocaml. Đây là danh sách ngắn và không đầy đủ về những gì bạn có thể làm với .

Điều thú vị là hầu hết mã được tạo ra tại thời điểm lắp ráp, cũng như tài liệu cho dự án. Ocaml và Perl được sử dụng rộng rãi. Bản thân mã được viết bằng C, sau đó được gói trong OCaml và các đoạn mã lặp lại sẽ tự được tạo ra. Làm việc với hình ảnh được thực hiện bằng cách khởi chạy một hình ảnh dịch vụ đặc biệt (thiết bị supermin), các lệnh được gửi đến thông qua một kênh bên trong nó. Hình ảnh cứu hộ này chứa một bộ tiện ích nhất định, chẳng hạn như parted, mkfs và những tiện ích khác hữu ích cho quản trị viên hệ thống.

Gần đây tôi thậm chí còn bắt đầu sử dụng nó ở nhà khi tôi trích xuất dữ liệu tôi cần từ hình ảnh nandroid. Nhưng điều này đòi hỏi hạt nhân hỗ trợ yaffs.

Khác

Dưới đây là một số liên kết thú vị hơn đến phần mô tả về phần mềm được sử dụng - hãy tự đọc và nghiên cứu nếu bạn quan tâm. Ví dụ,

Trong Ubuntu, nên sử dụng KVM hypervisor (trình quản lý máy ảo) và thư viện libvirt làm công cụ quản lý cho nó. Libvirt bao gồm một bộ API phần mềm và ứng dụng người dùng để quản lý máy ảo (VM), virt-manager (giao diện đồ họa, GUI) hoặc virsh (dòng lệnh, CLI). Với tư cách là người quản lý thay thế, bạn có thể sử dụng convirt (GUI) hoặc convirt2 (giao diện WEB).

Hiện tại, chỉ có trình ảo hóa KVM được hỗ trợ chính thức trên Ubuntu. Trình ảo hóa này là một phần của mã hạt nhân của hệ điều hành Linux. Không giống như Xen, KVM không hỗ trợ ảo hóa song song, nghĩa là để sử dụng nó, CPU của bạn phải hỗ trợ công nghệ VT. Bạn có thể kiểm tra xem bộ xử lý của mình có hỗ trợ công nghệ này hay không bằng cách chạy lệnh trong terminal:

Nếu bạn nhận được thông báo sau đây:

THÔNG TIN: /dev/kvm tồn tại Khả năng tăng tốc KVM có thể được sử dụng

Điều này có nghĩa là KVM sẽ hoạt động mà không gặp vấn đề gì.

Nếu bạn nhận được thông báo sau khi thoát:

CPU của bạn không hỗ trợ phần mở rộng KVM KHÔNG thể sử dụng khả năng tăng tốc KVM

thì bạn vẫn có thể sử dụng máy ảo nhưng sẽ chậm hơn rất nhiều.

    Cài đặt hệ thống 64 bit với tư cách khách

    Phân bổ hơn 2 GB RAM cho hệ thống khách

Cài đặt

Sudo apt-get cài đặt qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Đây là bản cài đặt trên máy chủ không có X, tức là nó không bao gồm giao diện đồ họa. Bạn có thể cài đặt nó bằng lệnh

Sudo apt-get cài đặt virt-manager

Sau đó, mục "Trình quản lý máy ảo" sẽ xuất hiện trong menu và với khả năng cao là mọi thứ sẽ hoạt động. Nếu vẫn còn vấn đề, bạn cần đọc hướng dẫn trong wiki tiếng Anh.

Tạo hệ thống khách

Quy trình tạo hệ thống khách bằng GUI khá đơn giản.

Nhưng chế độ văn bản có thể được mô tả.

qcow2

Khi tạo một hệ thống sử dụng giao diện đồ họa làm ổ cứng, bạn sẽ được nhắc chọn tệp hình ảnh hiện có hoặc thiết bị chặn hoặc tạo tệp mới với dữ liệu thô (RAW). Tuy nhiên, đây không phải là định dạng tệp duy nhất có sẵn. Trong số tất cả các loại đĩa được liệt kê trong man qemu-img, loại linh hoạt và hiện đại nhất là qcow2. Nó hỗ trợ ảnh chụp nhanh, mã hóa và nén. Nó phải được tạo trước khi tạo một khách mới.

Qemu-img tạo -o preallocation=siêu dữ liệu -f qcow2 qcow2.img 20G

Theo cùng một người đàn ông qemu-img, việc phân bổ trước siêu dữ liệu (-o preallocation=metadata) ban đầu làm cho đĩa lớn hơn một chút nhưng mang lại hiệu suất tốt hơn khi hình ảnh cần phát triển. Trên thực tế, trong trường hợp này, tùy chọn này cho phép bạn tránh được một lỗi khó chịu. Hình ảnh được tạo ban đầu chiếm ít hơn một megabyte dung lượng và tăng lên kích thước được chỉ định nếu cần. Hệ thống khách sẽ thấy ngay kích thước được chỉ định cuối cùng này, tuy nhiên, trong giai đoạn cài đặt, nó có thể thấy kích thước thực của tệp. Đương nhiên, nó sẽ từ chối cài đặt trên ổ cứng 200 KB. Lỗi này không dành riêng cho Ubuntu; ít nhất nó xuất hiện trong RHEL.

Ngoài loại hình ảnh, sau đó bạn có thể chọn phương thức kết nối nó - IDE, SCSI hoặc Virtio Disk. Hiệu suất của hệ thống con đĩa sẽ phụ thuộc vào sự lựa chọn này. Không có câu trả lời chính xác nhất định; bạn cần lựa chọn dựa trên nhiệm vụ sẽ được giao cho hệ thống khách. Nếu hệ thống khách được tạo ra để “xem xét” thì bất kỳ phương pháp nào cũng được. Nói chung, I/O thường là nút cổ chai của máy ảo, vì vậy khi tạo một hệ thống có tải cao, vấn đề này phải được xử lý một cách có trách nhiệm nhất có thể.

Cá nhân tôi dễ dàng coi KVM (Máy ảo dựa trên hạt nhân) là một mức độ trừu tượng so với các công nghệ ảo hóa phần cứng Intel VT-x và AMD-V. Chúng tôi lấy một máy có bộ xử lý hỗ trợ một trong những công nghệ này, cài đặt Linux trên máy này, cài đặt KVM trong Linux và kết quả là chúng tôi có cơ hội tạo ra các máy ảo. Đây đại khái là cách hoạt động của dịch vụ lưu trữ đám mây, chẳng hạn như Amazon Web Services. Cùng với KVM, Xen đôi khi cũng được sử dụng, nhưng việc thảo luận về công nghệ này nằm ngoài phạm vi của bài viết này. Không giống như các công nghệ ảo hóa container, chẳng hạn như Docker, KVM cho phép bạn chạy bất kỳ HĐH nào dưới dạng hệ thống khách, nhưng nó cũng có Chi phí cao hơn cho ảo hóa.

Ghi chú: Các bước được mô tả bên dưới đã được tôi thử nghiệm trên Ubuntu Linux 14.04, nhưng về mặt lý thuyết, chúng sẽ có hiệu lực phần lớn đối với cả hai phiên bản Ubuntu khác và các bản phân phối Linux khác. Mọi thứ sẽ hoạt động cả trên máy tính để bàn và trên máy chủ, được truy cập qua SSH.

Cài đặt KVM

Chúng tôi kiểm tra xem Intel VT-x hoặc AMD-V có được bộ xử lý của chúng tôi hỗ trợ hay không:

grep -E "(vmx|svm)" /proc/cpuinfo

Nếu thứ gì đó nóng lên, điều đó có nghĩa là nó được hỗ trợ và bạn có thể tiếp tục.

Cài đặt KVM:

cập nhật sudo apt-get
sudo apt-get cài đặt qemu-kvm libvirt-bin virtinst bridge-utils

Những gì thường được lưu trữ ở đâu:

  • /var/lib/libvirt/boot/ - Ảnh ISO để cài đặt hệ thống khách;
  • /var/lib/libvirt/images/ — hình ảnh ổ cứng của hệ thống khách;
  • /var/log/libvirt/ - tại đây bạn nên tìm tất cả nhật ký;
  • /etc/libvirt/ - thư mục chứa các tệp cấu hình;

Bây giờ KVM đã được cài đặt, hãy tạo máy ảo đầu tiên của chúng ta.

Tạo máy ảo đầu tiên

Tôi đã chọn FreeBSD làm hệ thống khách. Tải xuống image ISO của hệ thống:

cd /var/lib/libvirt/boot/
sudo wget http:// ftp.freebsd.org/ path/ to/ some-freebsd-disk.iso

Máy ảo được quản lý trong hầu hết các trường hợp bằng tiện ích virsh:

Sudo virsh --help

Trước khi khởi chạy máy ảo, chúng tôi sẽ cần thu thập một số thông tin bổ sung.

Chúng tôi xem xét danh sách các mạng có sẵn:

danh sách mạng sudo virsh

Xem thông tin về một mạng cụ thể (được đặt tên mặc định):

mặc định thông tin mạng sudo virsh

Hãy xem danh sách các tối ưu hóa có sẵn cho hệ điều hành khách:

Danh sách sudo virt-install --os-variant

Vì vậy, bây giờ chúng ta tạo một máy ảo có 1 CPU, 1 GB RAM và 32 GB dung lượng ổ đĩa, được kết nối với mạng mặc định:

sudo virt-cài đặt\
--virt-type =kvm\
--tên freebsd10\
--ram 1024\
--vcpus=1\
--os-variant =freebsd8 \
--hvm\
--cdrom =/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
--mạng mạng = mặc định, model =virtio \
--đồ họa vnc\
--đường dẫn đĩa =/ var/ lib/ libvirt/ image/ freebsd10.img,size =32 ,bus =virtio

Bạn có thể thấy:

CẢNH BÁO Không thể kết nối với bảng điều khiển đồ họa: virt-viewer không
Cài đặt. Vui lòng cài đặt gói "virt-viewer".

Quá trình cài đặt tên miền vẫn đang được tiến hành. Bạn có thể kết nối lại với bảng điều khiển
để hoàn tất quá trình cài đặt.

Điều này là bình thường, nó phải như thế này.

Sau đó xem các thuộc tính của máy ảo ở định dạng XML:

sudo virsh dumpxml freebsd10

Thông tin đầy đủ nhất được cung cấp tại đây. Ví dụ, điều này bao gồm một địa chỉ MAC mà chúng ta sẽ cần sau này. Hiện tại chúng tôi đang tìm kiếm thông tin về VNC. Trong trường hợp của tôi:

Sử dụng ứng dụng khách yêu thích của bạn (cá nhân tôi sử dụng Rammina), chúng tôi đăng nhập qua VNC, sử dụng chuyển tiếp cổng SSH nếu cần. Chúng ta vào thẳng trình cài đặt FreeBSD. Sau đó mọi thứ vẫn như bình thường - Tiếp theo, Tiếp theo, Tiếp theo, chúng ta có được hệ thống đã cài đặt.

Các lệnh cơ bản

Bây giờ chúng ta hãy xem các lệnh cơ bản để làm việc với KVM.

Lấy danh sách tất cả các máy ảo:

danh sách sudo virsh --all

Lấy thông tin về một máy ảo cụ thể:

sudo virsh dominfo freebsd10

Khởi chạy máy ảo:

sudo virsh bắt đầu freebsd10

Dừng máy ảo:

sudo virsh tắt máy freebsd10

Hầu như không có máy ảo (bất chấp tên gọi, cái này Không xóa):

sudo virsh tiêu diệt freebsd10

Khởi động lại máy ảo:

sudo virsh khởi động lại freebsd10

Sao chép máy ảo:

sudo virt-clone -o freebsd10 -n freebsd10-clone \
--file /var/lib/libvirt/images/freebsd10-clone.img

Bật/tắt tính năng tự động chạy:

sudo virsh tự khởi động freebsd10
sudo virsh tự khởi động --vô hiệu hóa freebsd10

Chạy virsh ở chế độ hộp thoại (tất cả các lệnh trong chế độ hộp thoại - như mô tả ở trên):

Sudo trinh nữ

Chỉnh sửa các thuộc tính của máy ảo trong XML, bao gồm ở đây bạn có thể thay đổi giới hạn về dung lượng bộ nhớ, v.v.:

sudo virsh chỉnh sửa freebsd10

Quan trọng! Rất tiếc, các nhận xét từ XML đã chỉnh sửa đã bị xóa.

Khi máy ảo dừng, đĩa cũng có thể được thay đổi kích thước:

sudo qemu-img thay đổi kích thước /var/ lib/ libvirt/ hình ảnh/ freebsd10.img -2G
Thông tin sudo qemu-img /var/lib/libvirt/images/freebsd10.img

Quan trọng! Hệ điều hành khách của bạn có thể sẽ không thích ổ đĩa đột nhiên lớn hơn hoặc nhỏ hơn. Trong trường hợp tốt nhất, nó sẽ khởi động ở chế độ khẩn cấp với đề xuất phân vùng lại đĩa. Có lẽ bạn không nên muốn làm điều đó. Việc tạo một máy ảo mới và di chuyển tất cả dữ liệu sang nó có thể dễ dàng hơn nhiều.

Sao lưu và khôi phục khá đơn giản. Chỉ cần lưu đầu ra dumpxml ở đâu đó, cũng như ảnh đĩa, sau đó khôi phục chúng là đủ. Trên Youtube đã tìm được video Với sự trình diễn của quá trình này, mọi thứ thực sự không khó khăn.

Thiết lạp mạng lưới

Một câu hỏi thú vị - làm cách nào để xác định địa chỉ IP mà máy ảo nhận được sau khi tải? KVM thực hiện điều này một cách thông minh. Cuối cùng tôi đã viết tập lệnh này bằng Python:

#!/usr/bin/env python3

# tập lệnh virt-ip.py
# (c) 2016 Aleksander Alekseev
# http://trang web/

hệ thống nhập khẩu
nhập lại
hệ điều hành nhập khẩu
nhập khẩu quy trình con
từ xml .etree nhập ElementTree

def eprint(str):
print(str, file = sys.stderr)

if len(sys.argv)< 2 :
eprint("SỬ DỤNG: " + sys .argv [ 0 ] + " " )
eprint("Ví dụ: " + sys .argv [ 0 ] + " freebsd10" )
sys.exit(1)

nếu os .geteuid () != 0 :
eprint("LỖI: bạn phải root" )
eprint("Gợi ý: chạy `sudo " + sys .argv [ 0 ] + " ...`" ) ;
sys.exit(1)

nếu quy trình con .call ( "arping 2>&1 >/dev/null", vỏ = Đúng ) != 0 :
eprint("LỖI: không tìm thấy arping" )
eprint( "Gợi ý: chạy `sudo apt-get install arping`")
sys.exit(1)

Tên miền = sys.argv[1]

nếu không lại .match ("^*$" , tên miền):
eprint( "LỖI: ký tự không hợp lệ trong tên miền")
sys.exit(1)

Domout = subprocess .check_output ("virsh dumpxml " +domain+" || true" ,
vỏ = Đúng)
domout = domout.decode("utf-8").strip()

nếu domout == "" :
# thông báo lỗi đã được in bởi dumpxml
sys.exit(1)

Tài liệu = ElementTree.fromstring(domout)

#1. liệt kê tất cả các giao diện mạng
# 2. chạy song song `arping` trên mọi giao diện
#3.grep trả lời
cmd = "(ifconfig | cut -d " " -f 1 | grep -E "." | " + \
"xargs -P0 -I IFACE arping -i IFACE -c 1 () 2>&1 | " + \
"grep "byte từ") || đúng"

dành cho trẻ em trong doc.iter() :
if child.tag == "mac" :
macaddr = child.attrib["địa chỉ"]
macout = tiến trình con .check_output(cmd .format (macaddr) ,
vỏ = Đúng)
print(macout.decode("utf-8"))

Tập lệnh hoạt động với cả mạng mặc định và mạng cầu nối, cấu hình mà chúng ta sẽ xem xét sau. Tuy nhiên, trên thực tế, sẽ thuận tiện hơn nhiều khi định cấu hình KVM để nó luôn gán cùng một địa chỉ IP cho các hệ thống khách. Để thực hiện việc này, hãy chỉnh sửa cài đặt mạng:

sudo virsh net-chỉnh sửa mặc định

... đại loại như thế này:

>



>

Sau khi thực hiện những thay đổi này


>

... và thay thế nó bằng một cái gì đó như:




>

Chúng tôi khởi động lại hệ thống khách và kiểm tra xem nó đã nhận được IP qua DHCP từ bộ định tuyến hay chưa. Nếu bạn muốn hệ thống khách có địa chỉ IP tĩnh, địa chỉ này sẽ được cấu hình như bình thường trong chính hệ thống khách.

chương trình quản lý tài năng

Bạn cũng có thể quan tâm đến chương trình quản lý tài năng:

sudo apt-get cài đặt virt-manager
sudo usermod -a -G libvirtd TÊN NGƯỜI DÙNG

Cửa sổ chính của nó trông như thế này:

Như bạn có thể thấy, virt-manager không chỉ là GUI cho các máy ảo chạy cục bộ. Với sự trợ giúp của nó, bạn có thể quản lý các máy ảo chạy trên các máy chủ khác cũng như xem đồ họa đẹp mắt trong thời gian thực. Cá nhân tôi thấy điều đặc biệt thuận tiện trong Virt-manager là bạn không cần phải tìm kiếm trong các cấu hình để tìm ra cổng nào VNC đang chạy trên một hệ thống khách cụ thể. Bạn chỉ cần tìm máy ảo trong danh sách, nhấp đúp và có quyền truy cập vào màn hình.

Với sự trợ giúp của virt-manager, cũng rất thuận tiện để thực hiện những việc đòi hỏi phải chỉnh sửa các tệp XML tốn nhiều công sức và trong một số trường hợp là thực thi các lệnh bổ sung. Ví dụ: đổi tên máy ảo, thiết lập mối quan hệ của CPU và những thứ tương tự. Nhân tiện, việc sử dụng ái lực CPU giúp giảm đáng kể ảnh hưởng của những người hàng xóm ồn ào và tác động của máy ảo lên hệ thống máy chủ. Luôn luôn sử dụng nó nếu có thể.

Nếu bạn quyết định sử dụng KVM thay thế cho VirtualBox, hãy nhớ rằng họ sẽ không thể chia sẻ ảo hóa phần cứng với nhau. Để KVM hoạt động trên máy tính để bàn của bạn, bạn không chỉ phải dừng tất cả các máy ảo trong VirtualBox và Vagrant mà còn phải khởi động lại hệ thống. Cá nhân tôi thấy KVM tiện lợi hơn nhiều so với VirtualBox, ít nhất là vì nó không yêu cầu bạn phải chạy lệnh thiết lập sudo /sbin/rcvboxdrv sau mỗi lần cập nhật kernel, nó hoạt động bình thường với Unity và thường cho phép bạn ẩn tất cả các cửa sổ.

Kiểm tra hỗ trợ hypervisor

Chúng tôi kiểm tra xem máy chủ có hỗ trợ công nghệ ảo hóa hay không:

mèo /proc/cpuinfo | ví dụ: "(vmx|svm)"

Bạn sẽ nhận được một cái gì đó như thế này để phản hồi:

cờ: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc Arch_perfmon pebs bts Rep_good nopl xtopology nonstop_tsc aperfm perf ni pclmulqdq dtes64 màn hình ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm epb tpr_shadow vnmi flexpriority ept vpid dtherm ida arat

Nếu không, hãy vào BIOS, tìm tùy chọn kích hoạt công nghệ ảo hóa (có các tên khác nhau, ví dụ: Công nghệ ảo hóa Intel hoặc Ảo hóa) và kích hoạt nó - đặt giá trị Cho phép.

Bạn cũng có thể kiểm tra tính tương thích bằng lệnh:

* nếu lệnh trả về lỗi "không tìm thấy lệnh kvm-ok", cài đặt gói thích hợp: apt-get cài đặt trình kiểm tra cpu.

Nếu chúng ta thấy:

THÔNG TIN:/dev/kvm tồn tại
Có thể sử dụng khả năng tăng tốc KVM

Điều này có nghĩa là có hỗ trợ phần cứng.

Chuẩn bị máy chủ

Để thuận tiện, chúng tôi sẽ tạo một thư mục để lưu trữ dữ liệu cho KVM:

mkdir -p /kvm/(vhdd,iso)

* hai thư mục sẽ được tạo: /kvm/vhdd(đối với đĩa cứng ảo) và /kvm/iso(đối với hình ảnh iso).

Hãy đặt thời gian:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* lệnh này đặt vùng theo giờ Moscow.

ntpdate ru.pool.ntp.org

* Chúng tôi đồng bộ hóa với máy chủ thời gian.

Cài đặt và khởi chạy

Chúng tôi cài đặt KVM và các tiện ích quản lý cần thiết.

a) Ubuntu lên tới phiên bản 18.10

apt-get cài đặt qemu-kvm libvirt-bin virtinst libosinfo-bin

b) Ubuntu sau ngày 18.10:

apt-get cài đặt qemu-kvm libvirt-daemon-system libvirt-bin virtinst libosinfo-bin

* Ở đâu qemu-kvm- giám sát viên; libvirt-bin— thư viện điều khiển ảo hóa; trinh nữ— tiện ích quản lý máy ảo; libosinfo-bin— một tiện ích để xem danh sách các tùy chọn hệ điều hành có thể được sử dụng làm hệ điều hành khách.

Hãy cấu hình dịch vụ để bắt đầu tự động:

systemctl kích hoạt libvirtd

Hãy khởi chạy libvirtd:

systemctl bắt đầu libvirtd

Cấu hình mạng

Máy ảo có thể hoạt động phía sau NAT (là máy chủ KVM) hoặc nhận địa chỉ IP từ mạng cục bộ - để làm được điều này, bạn cần định cấu hình cầu nối mạng. Chúng tôi sẽ cấu hình cái sau.

Khi sử dụng kết nối từ xa, hãy kiểm tra cài đặt của bạn một cách cẩn thận. Nếu xảy ra lỗi, kết nối sẽ bị chấm dứt.

Cài đặt bridge-utils:

apt-get cài đặt cầu-utils

a) thiết lập mạng trong các phiên bản Ubuntu cũ hơn (/etc/network/interfaces).

Mở file cấu hình để cấu hình các giao diện mạng:

vi /etc/mạng/giao diện

Và hãy đặt nó ở dạng này:

#iface eth0 inet tĩnh
#địa chỉ 192.168.1.24
#mặt nạ mạng 255.255.255.0
#gateway 192.168.1.1
# dns-nameservers 192.168.1.1 192.168.1.2

Tự động br0
iface br0 inet tĩnh
địa chỉ 192.168.1.24
mặt nạ mạng 255.255.255.0
cổng 192.168.1.1
máy chủ tên dns 192.168.1.1 192.168.1.2
cầu_port eth0
cầu_fd 9
cầu_xin chào 2
cầu_maxage 12
tắt cầu_stp

* trong đó mọi thứ được nhận xét là cài đặt cũ của mạng của tôi; br0- tên giao diện của cây cầu được tạo; eth0- giao diện mạng hiện có mà qua đó cầu sẽ hoạt động.

Khởi động lại dịch vụ mạng:

systemctl khởi động lại mạng

b) thiết lập mạng trong các phiên bản Ubuntu mới (netplan).

vi /etc/netplan/01-netcfg.yaml

* tùy thuộc vào phiên bản hệ thống, tập tin cấu hình yaml có thể có tên khác.

Hãy đưa nó về dạng:

mạng:
phiên bản: 2
trình kết xuất: networkd
ethernet:
eth0:
dhcp4: sai
dhcp6: sai
Wakeonlan: đúng

Cầu:
anh0:
địa chỉ mac: 2c:6d:45:c3:55:a7
giao diện:
-eth0
địa chỉ:
- 192.168.1.24/24
cổng4: 192.168.1.1
số tiền: 1500
máy chủ tên:
địa chỉ:
- 192.168.1.1
- 192.168.1.2
thông số:
stp: đúng
độ trễ chuyển tiếp: 4
dhcp4: sai
dhcp6: sai

* trong ví dụ này chúng tôi đang tạo giao diện cầu nối ảo br0; chúng tôi sử dụng như một giao diện vật lý eth0.

Áp dụng cài đặt mạng:

Chúng tôi nhấn mạnh vào việc chuyển hướng lưu lượng truy cập mạng (để các máy ảo có giao diện mạng NAT có thể truy cập Internet):

vi /etc/sysctl.d/99-sysctl.conf

Thêm dòng:

net.ipv4.ip_forward=1

Áp dụng các cài đặt:

sysctl -p /etc/sysctl.d/99-sysctl.conf

Tạo một máy ảo

Để tạo máy ảo đầu tiên, hãy nhập lệnh sau:

virt-install -n VM1\
--tự động bắt đầu\
--noautoconsole\
--network=cầu:br0 \
--ram 2048 --arch=x86_64 \
--vcpus=2 --cpu máy chủ --check-cpu \
--đường dẫn đĩa=/kvm/vhdd/VM1-disk1.img,size=16 \
--cdrom /kvm/iso/ubuntu-18.04.3-server-amd64.iso \
--graphics vnc,listen=0.0.0.0,password=vnc_password \
--os-type linux --os-variant=ubuntu18.04 --boot cdrom,hd,menu=on

  • VM1 - tên của máy được tạo;
  • tự động bắt đầu - cho phép máy ảo tự động khởi động cùng với máy chủ KVM;
  • noautoconsole — không kết nối với bảng điều khiển máy ảo;
  • mạng - dạng kết nối. Trong ví dụ này, chúng tôi đang tạo một máy ảo có giao diện “cầu nối mạng”. Để tạo giao diện nội bộ với kiểu NAT, hãy nhập --network=mặc định,model=virtio;
  • đập - dung lượng RAM;
  • vcpus — số lượng bộ xử lý ảo;
  • đĩa -đĩa ảo: con đường -đường dẫn tới đĩa; kích cỡ - khối lượng của nó;
  • Ổ đĩa CD -ổ đĩa ảo có hình ảnh hệ thống;
  • đồ họa các tham số để kết nối với máy ảo bằng bảng điều khiển đồ họa (trong ví dụ này chúng tôi sử dụng vnc); Nghe - các yêu cầu vnc được nhận ở địa chỉ nào (trong ví dụ của chúng tôi là tất cả); mật khẩu - mật khẩu kết nối bằng vnc;
  • biến thể os - hệ điều hành khách (chúng tôi đã nhận được toàn bộ danh sách bằng lệnh truy vấn osinfo os, trong ví dụ này chúng tôi cài đặt Ubuntu 18.04).

Kết nối với máy ảo

Trên máy tính mà chúng tôi dự định làm việc với máy ảo, hãy tải xuống ứng dụng khách VNC, chẳng hạn như TightVNC và cài đặt nó.

Trên máy chủ, chúng tôi nhập:

virsh vncdisplay VM1

lệnh sẽ hiển thị cổng VNC nào đang chạy cho máy VM1. Tôi đã có:

* :1 nghĩa là bạn cần cộng 1 vào 5900 - 5900 + 1 = 5901.

Khởi chạy TightVNC Viewer mà chúng tôi đã cài đặt và nhập dữ liệu kết nối:

Bấm vào Kết nối. Khi được nhắc nhập mật khẩu, hãy nhập mật khẩu bạn đã chỉ định khi tạo VM ( vnc_password). Chúng tôi sẽ kết nối với máy ảo bằng bảng điều khiển từ xa.

Nếu không nhớ mật khẩu, chúng ta sẽ mở cài đặt máy ảo bằng lệnh:

Và chúng tôi tìm thấy dòng:



* trong ví dụ này, mật khẩu được sử dụng để truy cập vào máy ảo 12345678 .

Quản lý máy ảo từ dòng lệnh

Ví dụ về các lệnh có thể hữu ích khi làm việc với máy ảo.

1. Lấy danh sách máy đã tạo:

danh sách trinh nữ --tất cả

2. Kích hoạt máy ảo:

virsh bắt đầu VMname

* Ở đâu Tên VM- tên của máy được tạo.

3. Tắt máy ảo:

ubuntu-vm-builder là gói được Canonical phát triển để giúp tạo các máy ảo mới dễ dàng hơn.

Để cài đặt nó, hãy nhập:

cài đặt apt-get ubuntu-vm-builder