LVM-Based VM có một số ưu điểm hơn các image-based VM. Chúng không gây
nặng ổ cứng IO và dễ dàng sao lưu bằng cách sử dụng LVM snapshots.
Để có thể sử dụng LVM-based VM, bạn cần một nhóm volume có không gian hợp lý và chưa được phân bố cho bất kỳ volume vật lý nào. Ở đây chúng tôi dùng /dev/vg0 với kích thước khoảng 465GB.
Vgdisplay root@server1:~# vgdisplay --- Volume group --- VG Name vg0 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 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 24079 / 94.06 GiB Free PE / Size 95030 / 371.21 GiB
VG UUID NQOLhN-wBWi-pUdD-el7p-TADJ-fJGd-3ALJbf root@server1:~#
… có chứa khối vật lý /dev/vg0/root với kích thước khoảng 100GB và
/dev/vg0/swap_1 kích thước 1GB – phần còn lại không được phân bố và có thể sử
dụng cho các máy ảo:
Lvdisplay root@server1:~# lvdisplay --- Logical volume --- LV Name /dev/vg0/root VG Name vg0 LV UUID KHbV2K-QKet-b660-aerE-x03F-nGVB-iR028M LV Write Access read/write
LV Status available # open 1 LV Size 93.13 GiB Current LE 23841 Segments 1 Allocation inherit
Read ahead sectors auto - currently set to 256 Block device 252:0 --- Logical volume --- LV Name /dev/vg0/swap_1 VG Name vg0 LV UUID NfmS1J-nVcl-l0W0-vBVG-2sDO-Rwwc-bnl9Yo
LV Write Access read/write LV Status available # open 2 LV Size 952.00 MiB Current LE 238 Segments 1 Allocation inherit
Read ahead sectors auto - currently set to 256 Block device 252:1 root@server1:~#
Bây giờ chúng ta tạo máy ảo vm5 như một LVM-based VM. Chúng ta có thể dùng lại lệnh vmbuilder. Vmbuilder biết rõ tùy chọn --raw cho phép ghi máy ảo tới một thiết bị block (ví dụ /dev/vg0/vm5) – và không có lỗi nào xảy ra. Tuy nhiên bạn không thể khở động máy ảo trên, do đó cần tạo một vm5 như image-based VM đầu tiên và sau đó chuyển đổi sang LVM-based VM.
mkdir -p
/var/lib/libvirt/images/vm5/mytemplates/libvirt cp /etc/vmbuilder/libvirt/*
/var/lib/libvirt/images/vm5/mytemplates/libvirt/
Hãy chắn rằng bạn đã tạo toàn bộ phân vùng trong một file ảnh, vì vậy không cần sử dụng --- trong tập tin vmbuilder.partition:
vi /var/lib/libvirt/images/vm5/vmbuilder.partition root 8000
swap 2000
# This script will run the first time the virtual machine boots
# It is ran as root.
# Expire the user account passwd -e administrator
# Install openssh-server apt-get update
apt-get install -qqy --force-yes openssh-server
Như bạn thấy từ tập tin vmbuilder.partition, VM sẽ sử dụng tối đa 20GB, do đó chúng ta tạo một khối vật lý có tên /dev/vg0/vm5 có kích thước 20GB:
lvcreate -L20G -n vm5 vg0
Không tạo ra một hệ thống tập tin trong khối vật lý mới!
Sử dụng lệnh qemu-img để chuyển đổi hình ảnh sang LVM-based VM. Trước tiên hãy đi tới thư mục ubuntu-kvm/ của VM…
cd /var/lib/libvirt/images/vm5/ubuntu-kvm/ … và tìm tên của hình ảnh: s –l root@server1:/var/lib/libvirt/images/vm5/ubuntu-kvm# ls -l total 622732 -rw-r--r-- 1 root root 637796352 2011-11-16 12:49 tmpN27tbO.qcow2 root@server1:/var/lib/libvirt/images/vm5/ubuntu-kvm#
Sau khi xác được tên của ảnh (tmpN27tbO.qcow2), chúng ta có thể convert như sau:
qemu-img convert tmpN27tbO.qcow2 -O raw /dev/vg0/vm5 Và sau đó có thể xóa ảnh đĩa:
rm -f tmpN27tbO.qcow2
Tiếp theo chúng ta cần thay đổi cấu hình của VM: virsh edit vm5
Thay đổi những phần sau: [...]
<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/vm5/ubuntu- kvm/tmpN27tbO.qcow2'/>
<target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk> [...]
Để trở thành như thế này: [...]
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/dev/vg0/vm5'/> <target dev='hda' bus='ide'/>
<address type='drive' controller='0' bus='0' unit='0'/>
</disk>
[...]
Bạn có thể sử dụng virsh để quản trị VM: virsh --connect qemu:///system
Bởi vì chúng ta đã sửa đổi tập tin xml của VM, cho nên cần chạy lại lệnh define… define /etc/libvirt/qemu/vm5.xml
… trước khi khởi động VM: start vm5