Trong bài viết trước chúng ta đã thảo luận cách cài đặt hypervisor KVM và tạo máy ảo. Trong một bài viết chúng ta không thể bao quát quản lý máy ảo KVM chi tiết. Hôm nay chúng ta sẽ thử chỉ cách quản lý máy ảo từ dòng lệnh với virsh: cách thay đổi cài đặt VM, thêm thiết bị ảo bổ sung, và lệnh nào dùng để quản lý máy ảo KVM trên Linux.
Sử dụng lệnh Virsh (Virtual Shell) để quản lý máy ảo KVM
Hãy xem cách xem máy ảo KVM đã đăng ký, cách bắt đầu, dừng hoặc xóa chúng. Virsh (dựa trên libvirt API) có thể dùng để quản lý máy ảo KVM trong console Linux.
# virsh list – hiển thị danh sách VM đang chạy
# virsh list --all – hiển thị danh sách tất cả máy ảo đã đăng ký (kể cả tắt)

Như bạn thấy trên screenshot, trong trường hợp đầu tiên VM tắt không hiển thị.
# virsh shutdown <vm name> — tắt máy ảo
# virsh start <vm name> — bật máy ảo
# virsh suspend <vm name> — treo VM
# virsh resume <vm name> — tiếp tục máy ảo bị treo
# virsh reboot <vm name> — khởi động lại VM
# virsh destroy <vm name> — khởi động tắt ngay lập tức không graceful và dừng VM (dùng lệnh này khi guest VM không phản hồi)
# virsh undefine <vm name> — hủy đăng ký VM và xóa volume lưu trữ
# virsh vcpuinfo <vm name> — hiển thị thông tin vCPU của VM

Dưới đây là một số lệnh khác để lấy thông tin khác về máy ảo:
# virsh domid <vm name> — lấy ID máy ảo
# virsh domuuid <vm name> — hiển thị UUID máy ảo
# virsh dominfo <vm name> — hiển thị thông tin máy ảo
# virsh domstate <vm name> — xem trạng thái VM

# virsh dumpxml <vm name> — liệt kê file cấu hình máy ảo ở định dạng XML
Cách thêm bộ nhớ và vCPU cho máy ảo KVM?
Trong console KVM, bạn có thể thêm hoặc giảm tài nguyên CPU hoặc bộ nhớ gán cho VM theo hai cách:
- Dùng virsh
- Qua file cấu hình XML của VM
Nếu máy ảo đang chạy, tắt nó:
# virsh shutdown test-centos
Domain test-centos is being shutdown
Sau đó dùng virsh để thay đổi số CPU ảo (vCPU) thành 6:
# virsh setvcpus <vm name> <vcpu_count> --config
Ví dụ:
# virsh setvcpus test-centos 6 --config
Sau khi chạy lệnh, lỗi xuất hiện:
error: invalid argument: requested vcpus is greater than max allowable vcpus for the persistent domain: 6 > 4
Bạn không thể đặt số nhân lớn hơn số lượng tối đa. Để tăng số vCPU tối đa cho phép của VM, chạy lệnh này:
# virsh setvcpus test-centos 6 --config --maximum
Sau đó chạy lệnh trước và khởi động máy ảo:

Kiểm tra số vCPU trong cài đặt VM:
# virsh dumpxml test-centos
<domain type='kvm'> <name>test-centos</name> <uuid>3b223aa2-b322-1ff1-ab23-c1223abc1f01</uuid> <memory unit='KiB'>2097152</memory> <currentMemory unit='KiB'>2097152</currentMemory> <vcpu placement='static'>6</vcpu>
Cùng cách đó, bạn có thể thêm RAM cho máy ảo:
# virsh setmem <vm_name> <memsize> --config
Ví dụ:
# virsh setmem test-centos 4G --config
Lỗi xảy ra vì cùng lý do:
error: invalid argument: cannot set memory higher than max memory.
Tăng lượng bộ nhớ tối đa:
# virsh setmaxmem test-centos 6G --config
Sau đó bạn có thể thêm bộ nhớ cho VM.
Trước khi thay đổi, hãy chắc chắn tắt máy ảo rồi bật lại.
Cũng có thể thay đổi lượng tài nguyên VM KVM trong file XML cấu hình. Bạn có thể chỉnh sửa trực tuyến hoặc backup file XML VM, sửa đổi và áp dụng cho máy ảo.
Hãy chỉnh sửa file XML VM trực tuyến:
# virsh edit <vm_name>
Trong trình soạn thảo vi xuất hiện, làm thay đổi bạn muốn bằng cách nhấn Insert.
Thay đổi khối sau:
<domain type='kvm'> <name>test-centos</name> <uuid>3b223aa2-b322-1ff1-ab23-c1223abc1f01</uuid> <memory unit='KiB'>6291456</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>6</vcpu> <os>
Ví dụ, cấp phát 2 nhân bộ vi xử lý và 1 GB bộ nhớ cho VM:

Lưu ý kích thước bộ nhớ hiển thị tính bằng kilobyte.
Lưu thay đổi trong file và reboot VM:
# virsh reboot <vm_name>
Bạn có thể làm tương tự nếu backup file XML:
# virsh dumpxml <vm_name> > /root/test.xml
# vi /root/test.xml
Thay đổi cài đặt bạn muốn, lưu file và áp dụng cho máy ảo:
# virsh shutdown test-centos
Domain test-centos is being shutdown
# virsh define /root/test.xml
Domain test-centos defined from /root/test.xml
# virsh start test-centos
Domain test-centos started
Đôi khi khi thay đổi file cấu hình VM trực tuyến, tài nguyên được gán bị reset sau reboot. Trong trường hợp này, dừng máy ảo rồi chỉ cần bật lại.
Thêm ổ đĩa vào KVM VM hiện có
Trong một bài viết trước chúng ta đã mô tả cách mở rộng hoặc giảm kích thước ổ đĩa máy ảo KVM. Nhưng chúng ta không nói cách thêm ổ đĩa bổ sung.
Trước hết, tạo file ổ đĩa mới cho máy ảo:
# qemu-img create -f qcow2 -o size=20G /vz/disk/test.img
Thay vì qcow2, bạn có thể dùng định dạng ổ đĩa bạn muốn. Cũng chỉ định đường dẫn file. Kho ổ đĩa của tôi ở /vz/disk/.
Sau đó bạn có thể thêm thiết bị ổ cứng ảo vào VM:
# virsh attach-disk <vm_name> /vz/disk/test.img vdb --type disk --persistent
Tắt và khởi động lại VM, sau đó xem kết quả:
# virsh shutdown test-centos
Domain test-centos is being shutdown
# virsh start test-centos
Domain test-centos started
# virsh dumpxml test-centos
<domain type='kvm' id='14'>
<name>test-centos</name>
<uuid>3b223aa2-b322-1ff1-ab23-c1223abc1f01</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>6</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
<bootmenu enable='yes'/>
</os>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/vz/disk/test.img'/>
<backingStore/>
<target dev='vdb' bus='virtio'/>
<alias name='virtio-disk1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>
Như bạn thấy, ổ đĩa đã được thêm.
Cách thêm NIC thứ hai cho máy ảo KVM?
Hãy thử thêm giao diện mạng khác vào VM. Trước hết, kiểm tra giao diện mạng trên máy chủ Linux:
# brctl show

Tôi có một máy ảo với một giao diện mạng trên máy chủ KVM. Tôi muốn thêm giao diện mạng ảo khác vào br0. Chạy các lệnh:
# virsh shutdown test-centos
# virsh attach-interface test-centos --type bridge --source br0 --persistent
# virsh start test-centos
Đảm bảo giao diện mạng khác xuất hiện trong VM:

<interface type='bridge'> <mac address='52:54:00:7e:c1:9f'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <interface type='bridge'> <mac address='52:54:00:2f:23:79'/> <source bridge='br0'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> </interface>
Cũng có thể thay đổi cài đặt mạng máy ảo trực tiếp qua file XML:
# virsh edit test-centos
Sau giao diện mạng đầu tiên, thêm các dòng:
<interface type='bridge'> <source bridge='br0'/> </interface>
Lưu file và khởi động VM. KVM sẽ tự thêm phần cấu hình còn lại (địa chỉ MAC, v.v.).
Trong bài viết này chúng ta đã bao quát những điều chính bạn có thể cần để quản lý máy ảo KVM từ console máy chủ Linux. Trong bài tiếp theo chúng ta sẽ chỉ cách quản lý máy ảo qua GUI virt-manager.