Quản Trị Mạng - Từ lâu, KVM (Kernel-based Virtual Machine) được rất nhiều người biết đến là một cơ sở hạ tầng ảo hóa cho nhân Linux dành cho những CPU hỗ trợ công nghệ ảo hóa như Intel VT hoặc AMD-V... Trước đây chúng tôi đã từng hướng dẫn các bạn ảo hóa với KVM trên nền tảng Fedora 12 Server. Hôm nay chúng tôi sẽ tiếp tục giúp các bạn có thể cài đặt, sử dụng KVM để khởi tạo và chạy các máy ảo trên máy chủ CentOS 6.0.
1. Một số lưu ý
Phần minh họa sau chúng tôi sử dụng máy chủ CentOS 6.0 với hostname server1.example.com, địa chỉ IP của KVM host là 192.168.0.100.
SELinux cần được vô hiệu hóa trên hệ thống CentOS 6.0 để có thể làm việc tốt nhất (nếu bạn để SELinux ở chế độ on nó vẫn hoạt động nhưng chúng tôi không chắc chắn về những sự cố có thể xảy ra).
vi /etc/selinux/config
Set SELINUX=disabled
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
Sau đó khởi động lại:
reboot
Ngoài ra chúng ta cần hệ thống desktop được cài đặt virt-manager để kết nối tới giao diện điều khiển đồ họa của máy ảo mà chúng ta sẽ tạo. Ở đây sử dụng Fedora 15.
2. Cài đặt KVM
Trước khi tiến hành, bạn cần xác định xem CPU của mình có hỗ trợ ảo hóa phần cứng hay không:
egrep '(vmx|svm)' --color=always /proc/cpuinfo
Nếu màn hình hiển thị thông tin dạng như sau:
[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse [root@server1 ~]#
Như vậy là CPU của bạn có hỗ trợ, ngược lại nếu không hiển thị gì thì bạn hãy dừng lại ở đây.
Bây giờ chúng ta import các key GPG cho các gói phần mềm:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Tiến hành cài đặt KVM và virtinst (một công cụ để tạo máy ảo):
yum install kvm libvirt python-virtinst qemu-kvm
Sau đó khởi động libvirt daemon:
/etc/init.d/libvirtd start
Kiểm tra xem KVM đã cài đặt thành công hay chưa, chạy lệnh:
virsh -c qemu:///system list
Nếu màn hình hiển thị thông tin sau đây chứng tỏ bạn đã thành công:
[root@server1 ~]# virsh -c qemu:///system list
Id Name State
----------------------------------
[root@server1 ~]#
Ngược lại, bạn hãy thực hiện thêm lần nữa.
Tiếp theo chúng ta cần thiết lập một cầu nối cho mạng trên máy chủ (network bridge) để có thể truy cập máy ảo từ xa bằng các host khác nhau như hệ thống vật lý trong mạng.
Để làm điều này, cài đặt gói bridge-utils:
yum install bridge-utils
Và cấu hình một bridge. Tạo file /etc/sysconfig/network-scripts/ifcfg-br0 (hãy sử dụng các giá trị IPADDR, PREFIX, GATEWAY, DNS1 và DNS2 từ tập tin /etc/sysconfig/network-scripts/ifcfg-eth0); bạn cũng cần chắc chắn rằng mình đang dùng giá trị TYPE=Bridge, không phải TYPE=Ethernet:
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0" NM_CONTROLLED="yes" ONBOOT=yes TYPE=Bridge BOOTPROTO=none IPADDR=192.168.0.100 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System br0"
Chỉnh sửa /etc/sysconfig/network-scripts/ifcfg-eth0 như sau (các giá trị BOOTPROTO, IPADDR, PREFIX, GATEWAY, DNS1, DNS2 để ở dạng chú thích và thêm dòng BRIDGE=br0):
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" NM_CONTROLLED="yes" ONBOOT=yes HWADDR=00:1E:90:F3:F0:02 TYPE=Ethernet #BOOTPROTO=none #IPADDR=192.168.0.100 #PREFIX=24 #GATEWAY=192.168.0.1 #DNS1=8.8.8.8 #DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 BRIDGE=br0
Khởi động lại mạng:
/etc/init.d/network restart
Và chạy lệnh:
ifconfig
Network bridge (br0) sẽ hiển thị như sau:
[root@server1 ~]# ifconfig br0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02 inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:103 errors:0 dropped:0 overruns:0 frame:0 TX packets:79 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7434 (7.2 KiB) TX bytes:21398 (20.8 KiB) eth0 Link encap:Ethernet HWaddr 00:1E:90:F3:F0:02 inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:19511 errors:0 dropped:0 overruns:0 frame:0 TX packets:11592 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:25980124 (24.7 MiB) TX bytes:1104371 (1.0 MiB) Interrupt:28 Base address:0x6000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3608 (3.5 KiB) TX bytes:3608 (3.5 KiB) virbr0 Link encap:Ethernet HWaddr 6A:12:69:18:2B:05 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@server1 ~]#
3. Cài đặt virt-viewer hoặc virt-manager trên Fedora 15 Desktop
Tiếp theo chúng ta cần một phương tiện để kết nối tới giao diện điều khiển đồ họa của các guest. Ở đây sử dụng virt-manager cho Fedora 15.
Bắt đầu bằng sử dụng tài khoản root
su
Và chạy:
yum install virt-manager libvirt qemu-system-x86 openssh-askpass
Sau đó cài đặt virt-manager (trong trường hợp bạn đang dùng Ubuntu 11.04).
sudo apt-get install virt-manager
4. Tạo một Debian Squeeze Guest từ dòng lệnh
Bây giờ quay trở lại CentOS 6.0 KVM host.
Và xem:
man virt-install
Để tìm hiểu cách sử dụng virt-install.
Chúng ta sẽ tạo một máy ảo dựa trên hình ảnh trong thư mục /var/lib/libvirt/images/ đã được tạo ra khi cài đặt KVM ở phần 2.
Để tạo một Debian Squeeze guest (trong chế độ bridging) với tên vm10, dung lượng RAM 512MB, hai CPU ảo và file ảnh đĩa cứng /var/lib/libvirt/images/vm10.img (kích thước 12GB). Cho đĩa CD Debian Squeeze Netinstall vào ổ CD và chạy:
virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 --disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /dev/cdrom --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
Tất nhiên, bạn cũng có thể tạo file ảnh ISO của Debian Squeeze Netinstall CD (khuyến cáo nên tạo trong /var/lib/libvirt/images/ bởi khi tạo máy ảo thông qua virt-manager từ Fedora sẽ tìm kiếm file ISO trong thư mục này).
dd if=/dev/cdrom of=/var/lib/libvirt/images/debian-6.0.2.1-amd64-netinst.iso
Và sử dụng file ISO đó bằng lệnh virt-install:
virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 --disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /var/lib/libvirt/images/debian-6.0.2.1-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
Kết quả sẽ hiển thị như sau:
[root@server1 ~]# virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=2 --disk path=/var/lib/libvirt/images/vm10.img,size=12 -c /var/lib/libvirt/images/debian-6.0.2.1-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm Starting install... Allocating 'vm10.img' | 12 GB 00:00 Creating domain... | 0 B 00:00 Domain installation still in progress. You can reconnect to the console to complete the installation process. [root@server1 ~]#
5. Kết nối tới Guest
KVM guest sẽ khởi động từ Debian Squeeze Netinstall và bắt đầu cài đặt Debian – đó là lý do tại sao bạn cần kết nối tới giao diện điều khiển đồ họa của guest. Bạn có thể làm điều này với virt-manager trên Fedora 15 desktop.
Vào Applications > System Tools > Virtual Machine Manager để khởi động virt-manager:
Khi virt-manager được chạy lần đầu tiên, bạn sẽ nhận được thông báo lỗi “Unable to open a connection to the libvirt management daemon.” Hãy yên tâm và bỏ qua nó bởi chúng ta không muốn kết nối tới libvirt daemon cục bộ. Kích Close.
Vào File > Add Connection để kết nối vào CentOS 6.0 KVM host:
Tại mục Hypervisor chọn QEMU/KVM, đánh dấu tích vào Connect to remote host. Kích vào nút mũi tên cạnh mục Method để mở một danh sách mới, chọn SSH, phần Username bạn nhập root, phần hostname nhập server1.example.com hoặc địa chỉ IP 192.168.0.100 của CentOS 6.0 KVM host. Cuối cùng ấn Connect.
Nếu đây là lần đầu tiên kết nối tới máy chủ KVM từ xa, bạn cần gõ yes và ấn OK:
Sau đó nhập mật khẩu root của CentOS 6.0 KVM host:
Bạn sẽ thấy vm10 đang chạy. Đánh dấu vào guest đó và kích nút Open để mở giao diện điều khiển:
Nhập lại mật khẩu root cho KVM host lần nữa:
Bây giờ bạn sẽ được kết nối với giao diện điều khiển đồ họa của guest và xem trình cài đặt Debian:
Tiến hành cài đặt Debian như cách thông thường trên một hệ thống vật lý. Lưu ý ở phần cuối của quá trình cài đặt, Debian guest cần khởi động lại. Sau đó guest tự động dừng hoạt động, bạn cần khởi động lại nó. Đối với virt-manager hoặc CentOS 6.0 KVM host ta dùng lệnh sau:
irsh --connect qemu:///system
start vm10
quit
Như vậy bạn có thể kết nối tới guest lần nữa với virt-manager và cấu hình cho nó. Nếu bạn cài đặt OpenSSH (gói openssh-server) trong guest, bạn có thể kết nối tới nó qua SSH client (giống như PuTTY).
6. Tạo một Debian Squeeze Guest từ Desktop với virt-manager
Thay vì tạo Debian Squeeze Guest bằng dòng lệnh mà mục 4 đã trình bày, bạn có thể dễ dàng tạo ra nó trong Fedora desktop bằng cách sử dụng virt-manager (tuy nhiên, máy ảo sẽ được tạo trên CentOS 6.0 KVM host).
Để làm điều này, kích vào nút:
Cửa sổ New VM xuất hiện, nhập tên cho VM vào trường Name (ví dụ: vm11), chọn Local install media (ISO image or CDROM) và kích Forward:
Tiếp theo chọn Linux trong menu xổ xuống của mục OS type, chọn Debian Squeeze tại mục Version. Sau đó đánh dấu tích vào Use ISO image rồi ấn nút Browse...
Chọn file debian-6.0.2.1-amd64-netinst.iso mà bạn vừa tạo ở mục 4, ấn Choose Volume:
Ấn Forward:
Cấp phát bộ nhớ và số lượng CPU cho máy ảo, kích Forward:
Ở màn hình tiếp theo, đánh dấu vào Enable storage for this virtual machine, chọn Create a disk image on the computer's hard drive, xác định dung lượng của ổ cứng (ví dụ 12GB), đánh dấu vào Allocate entire disk now. Kích tiếp Forward:
Đến bước cuối cùng của hộp thoại New VM. Tại Advanced options chọn Host device vnet0 (Bridge 'br0'); - đây chính là tên của bridge chúng ta đã tạo ở mục 2. Kích Finish.
File ảnh của ổ đĩa cho VM sẽ được khởi tạo, sau đó VM sẽ khởi động. Nhập mật khẩu root của CentOS 6.0 KVM host:
Kết quả là bạn sẽ được kết nối tới giao diện điều khiển của guest và xem bộ cài đặt Debian:
Tiến hành cài đặt Debian như bình thường.
7. Quản lý một KVM Guest từ dòng lệnh
KVM guests có thể được quản lý thông qua lệnh virsh. Chức năng này gọi là virtual shell.
virsh --connect qemu:///system
Virtual shell sẽ được hiển thị như sau:
[root@server1 ~]# virsh --connect qemu:///system
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
Bạn có thể gõ lệnh:
help
Để liệt kê danh sách các lệnh có sẵn, chạy lệnh:
list
virsh # help Commands: help print help attach-device attach device from an XML file attach-disk attach disk device attach-interface attach network interface autostart autostart a domain capabilities capabilities cd change the current directory connect (re)connect to hypervisor console connect to the guest console cpu-baseline compute baseline CPU cpu-compare compare host CPU with a CPU described by an XML file create create a domain from an XML file start start a (previously defined) inactive domain destroy destroy a domain detach-device detach device from an XML file detach-disk detach disk device detach-interface detach network interface define define (but don't start) a domain from an XML file domid convert a domain name or UUID to domain id domuuid convert a domain name or id to domain UUID dominfo domain information domjobinfo domain job information domjobabort abort active domain job domname convert a domain id or UUID to domain name domstate domain state domblkstat get device block stats for a domain domifstat get network interface stats for a domain dommemstat get memory statistics for a domain domblkinfo domain block device size information domxml-from-native Convert native config to domain XML domxml-to-native Convert domain XML to native config dumpxml domain information in XML edit edit XML configuration for a domain find-storage-pool-sources discover potential storage pool sources find-storage-pool-sources-as find potential storage pool sources freecell NUMA free memory hostname print the hypervisor hostname list list domains migrate migrate domain to another host migrate-setmaxdowntime set maximum tolerable downtime net-autostart autostart a network net-create create a network from an XML file net-define define (but don't start) a network from an XML file net-destroy destroy a network net-dumpxml network information in XML net-edit edit XML configuration for a network net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine an inactive network net-uuid convert a network name to network UUID iface-list list physical host interfaces iface-name convert an interface MAC address to interface name iface-mac convert an interface name to interface MAC address iface-dumpxml interface information in XML iface-define define (but don't start) a physical host interface from an XML file iface-undefine undefine a physical host interface (remove it from configuration) iface-edit edit XML configuration for a physical host interface iface-start start a physical host interface (enable it / "if-up") iface-destroy destroy a physical host interface (disable it / "if-down") managedsave managed save of a domain state nodeinfo node information nodedev-list enumerate devices on this host nodedev-dumpxml node device details in XML nodedev-dettach dettach node device from its device driver nodedev-reattach reattach node device to its device driver nodedev-reset reset node device nodedev-create create a device defined by an XML file on the node nodedev-destroy destroy a device on the node nwfilter-define define or update a network filter from an XML file nwfilter-undefine undefine a network filter nwfilter-dumpxml network filter information in XML nwfilter-list list network filters nwfilter-edit edit XML configuration for a network filter pool-autostart autostart a pool pool-build build a pool pool-create create a pool from an XML file pool-create-as create a pool from a set of args pool-define define (but don't start) a pool from an XML file pool-define-as define a pool from a set of args pool-destroy destroy a pool pool-delete delete a pool pool-dumpxml pool information in XML pool-edit edit XML configuration for a storage pool pool-info storage pool information pool-list list pools pool-name convert a pool UUID to pool name pool-refresh refresh a pool pool-start start a (previously defined) inactive pool pool-undefine undefine an inactive pool pool-uuid convert a pool name to pool UUID secret-define define or modify a secret from an XML file secret-dumpxml secret attributes in XML secret-set-value set a secret value secret-get-value Output a secret value secret-undefine undefine a secret secret-list list secrets pwd print the current directory quit quit this interactive terminal exit quit this interactive terminal reboot reboot a domain restore restore a domain from a saved state in a file resume resume a domain save save a domain state to a file schedinfo show/set scheduler parameters dump dump the core of a domain to a file for analysis shutdown gracefully shutdown a domain setmem change memory allocation setmaxmem change maximum memory limit setvcpus change number of virtual CPUs suspend suspend a domain ttyconsole tty console undefine undefine an inactive domain update-device update device from an XML file uri print the hypervisor canonical URI vol-create create a vol from an XML file vol-create-from create a vol, using another volume as input vol-create-as create a volume from a set of args vol-clone clone a volume. vol-delete delete a vol vol-wipe wipe a vol vol-dumpxml vol information in XML vol-info storage vol information vol-list list vols vol-pool returns the storage pool for a given volume key or path vol-path returns the volume path for a given volume name or key vol-name returns the volume name for a given volume key or path vol-key returns the volume key for a given volume name or path vcpuinfo domain vcpu information vcpupin control domain vcpu affinity version show version vncdisplay vnc display snapshot-create Create a snapshot snapshot-current Get the current snapshot snapshot-delete Delete a domain snapshot snapshot-dumpxml Dump XML for a domain snapshot snapshot-list List snapshots for a domain snapshot-revert Revert a domain to a snapshot virsh #
Hiển thị toàn bộ các guest đang chạy:
list --all
Hiển thị toàn bộ guest đang chạy lẫn không hoạt động:
virsh # list --all
Id Name State
----------------------------------
3 vm11 running
- vm10 shut off
virsh #
Nếu bạn chỉnh sửa file xml của một guest (trong /etc/libvirt/qemu/), bạn cần định nghĩa lại guest đó:
define /etc/libvirt/qemu/vm10.xml
Lưu ý chung rằng bất cứ khi nào bạn chỉnh sửa file xml trong /etc/libvirt/qemu/ đều phải chạy lại lệnh define trên.
Để khởi động một guest:
start vm10
Để dừng một guest:
shutdown vm10
Để ngưng hoạt động một guest ngay lập tức (giống như việc rút dây nguồn):
destroy vm10
Đình chỉ một guest:
suspend vm10
Tiếp tục một guest:
resume vm10
Đó là những lệnh quan trọng nhất bạn cần ghi nhớ. Cuối cùng dùng lệnh:
quit
để thoát khỏi virtual shell.
8. Tạo LVM-Based Guest bằng dòng lệnh
Các LVM-based guest có một số ưu điểm so với guest dựa trên image của nó. Chúng không gây nặng nề cho bộ điều khiển IO của ổ cứng, và có thể dễ dàng sao lưu (sử dụng LVM snapshots).
Để sử dụng LVM-based guest, bạn cần một nhóm phân vùng có đủ dung lượng ổ cứng (không phân bổ cho các phân vùng logical khác). Trong ví dụ này, chúng tôi sử dụng nhóm /dev/vg_server1 với tổng kích thước 465GB:
vgdisplay
[root@server1 ~]# vgdisplay --- Volume group --- VG Name vg_server1 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 465.27 GiB PE Size 4.00 MiB Total PE 119109 Alloc PE / Size 24480 / 95.62 GiB Free PE / Size 94629 / 369.64 GiB VG UUID jk2N5a-pQdV-I49Y-UCR9-A0Js-jEe0-0y6Ipg [root@server1 ~]#
Có chứa dung lượng của /dev/vg_server1/lv_root với kích thước 50GB, /dev/vg_server1/lv_home là 40GB và /dev/vg_server1/lv_swap khoảng 6GB. Phần còn lại không được phân bổ và có thể sử dụng cho KVM guests:
lvdisplay
[root@server1 ~]# lvdisplay --- Logical volume --- LV Name /dev/vg_server1/lv_root VG Name vg_server1 LV UUID il99XH-Q7QV-R16x-Q51X-GOzp-8uq1-aMUb82 LV Write Access read/write LV Status available # open 1 LV Size 50.00 GiB Current LE 12800 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Name /dev/vg_server1/lv_home VG Name vg_server1 LV UUID 2OqWO9-4P91-UDzK-K6i3-zgJz-vJWN-9OMXpi LV Write Access read/write LV Status available # open 1 LV Size 40.00 GiB Current LE 10240 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 --- Logical volume --- LV Name /dev/vg_server1/lv_swap VG Name vg_server1 LV UUID f5e90C-DMt8-896t-MmNo-S2FM-7hSd-gtVGjy LV Write Access read/write LV Status available # open 1 LV Size 5.62 GiB Current LE 1440 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 [root@server1 ~]#
Bây giờ chúng ta tạo máy ảo có tên vm12 làm LVM-based guest. Vm12 sẽ có 20GB không gian đĩa trống, vì vậy tạo /dev/vg_server1/vm12 với 20GB:
lvcreate -L20G -n vm12 vg_server1
Sau đó sử dụng lại lệnh virt-install lần nữa để tạo guest:
virt-install --connect qemu:///system -n vm12 -r 512 --vcpus=2 --disk path=/dev/vg_server1/vm12 -c /var/lib/libvirt/images/debian-6.0.2.1-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
Lưu ý rằng, thay vì sử dụng --disk path=/var/lib/libvirt/images/vm12.img,size=20 chúng ta sẽ dùng --disk path=/dev/vg_server1/vm12, và không cần xác định không gian đĩa nữa vì nó đã được xác định bởi kích thước của phân vùng logical vm12 (20GB).
Thực hiện theo như mục 5 ở trên để cài đặt guest.
9. Chuyển đổi Image-Based Guests sang LVM-Based Guests
Nếu muốn chuyển đổi image-based guest vm10 sang LVM-based guest, chạy lệnh sau:
virsh --connect qemu:///system
shutdown vm10
quit
Sau đó tạo một phân vùng logical (ví dụ: /dev/vg_server1/vm10) có kích thước tương tự như file image (12GB):
lvcreate -L12G -n vm10 vg_server1
Giờ là lúc tiến hành chuyển đổi image:
qemu-img convert /var/lib/libvirt/images/vm10.img -O raw /dev/vg_server1/vm10
Sau đó bạn có thể xóa file ảnh trên đĩa:
rm -f /var/lib/libvirt/images/vm10.img
Bây giờ cần mở file cấu hình xml của guest /etc/libvirt/qemu/vm10.xml:
vi /etc/libvirt/qemu/vm10.xml
Thay đổi như dưới đây:
[...] <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/vm10.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> [...]
Để trở thành như sau:
[...] <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/vg_server1/vm10'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> [...]
Cuối cùng là định nghĩa lại guest:
virsh --connect qemu:///system
define /etc/libvirt/qemu/vm10.xml
Khi còn trên shell virsh, có thể khởi động guest:
start vm10
Và rời khởi shell virsh:
quit
Các link tham khảo trong bài:
KVM: http://www.linux-kvm.org/
CentOS: http://www.centos.org/
Fedora: http://fedoraproject.org/
Debian: http://www.debian.org/