Hình ảnh qcow2 là một định dạng đĩa ảo được hỗ trợ bởi Qemu. Định dạng này cho phép sử dụng một tệp để mô phỏng thiết bị khối có kích thước cố định và cung cấp nhiều lợi ích so với định dạng raw, bao gồm:
- Kích thước tệp nhỏ hơn, ngay cả trên các hệ thống không hỗ trợ tệp thưa.
- Hỗ trợ cơ chế Copy-on-Write (COW).
- Khả năng tạo nhiều bản chụp nhanh của trạng thái đĩa.
- Nén dữ liệu bằng thuật toán zlib.
- Mã hóa AES.
Cài đặt môi trường tạo hình ảnh qcow2
Đầu tiên, chúng ta cần chuẩn bị hệ điều hành CentOS 7.5 như môi trường làm việc.
1. Cài đặt phần mềm cần thiết
# yum install -y qemu-kvm qemu-img libvirt virt-install bridge-utils
Sau khi cài đặt xong, khởi động dịch vụ libvirtd và cấu hình tự khởi động:
# systemctl start libvirtd
# systemctl enable libvirtd
Kiểm tra xem KVM đã được cài đặt đúng hay chưa:
# lsmod | grep kvm
2. Cấu hình mạng
Tạo giao diện cầu (bridge) để máy ảo có thể truy cập internet:
# nano /etc/sysconfig/network-scripts/ifcfg-enp1s0
TYPE=Ethernet
BRIDGE=br0
BOOTPROTO=none
NAME=enp1s0
DEVICE=enp1s0
# nano /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
Tạo hình ảnh qcow2
Dưới đây là một kịch bản Python đơn giản để tự động hóa quá trình tạo hình ảnh:
#!/usr/bin/env python3
import os
import subprocess
import sys
from random import choice
from string import ascii_letters, digits
def generate_password(length=12):
return ''.join(choice(ascii_letters + digits) for _ in range(length))
def create_qcow_image(iso_path, mac_suffix):
config = {
'name': os.path.basename(iso_path).split('.')[0],
'mac_address': f"52:54:00:00:00:{mac_suffix.zfill(2)}",
'vnc_port': f"59{mac_suffix}",
'disk_name': f"{os.path.basename(iso_path).split('.')[0]}.qcow2",
'ram': 4096,
'vcpus': 2,
'disk_size': '300G',
'iso_path': iso_path,
'vnc_password': generate_password()
}
print("Configuring VM with:", config)
# Tạo tệp qcow2
subprocess.run(f"qemu-img create -f qcow2 /var/lib/libvirt/images/{config['disk_name']} {config['disk_size']}", shell=True)
# Khởi tạo máy ảo
subprocess.run(
f"virt-install --name={config['name']} "
f"--memory={config['ram']} --vcpus={config['vcpus']} "
f"--cdrom={config['iso_path']} --network bridge=br0,model=virtio "
f"--graphics vnc,password={config['vnc_password']},listen=0.0.0.0,port={config['vnc_port']} "
f"--disk path=/var/lib/libvirt/images/{config['disk_name']},format=qcow2 "
f"--os-type=linux --os-variant=rhel7 --noautoconsole", shell=True)
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: python3 create_qcow.py [ISO_PATH] [MAC_SUFFIX]")
sys.exit(1)
iso_path = sys.argv[1]
mac_suffix = sys.argv[2]
create_qcow_image(iso_path, mac_suffix)
Chạy tập lệnh với lệnh sau:
# chmod +x create_qcow.py
# ./create_qcow.py myimage.iso 12
Sau khi cài đặt hoàn tất qua VNC, bạn có thể chỉnh sửa tệp cấu hình GRUB để đảm bảo tên giao diện mạng phù hợp:
# vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
# grub2-mkconfig -o /boot/grub2/grub.cfg
Tìm hình ảnh qcow2 tại thư mục đã chỉ định:
# ls -lh /var/lib/libvirt/images/myimage.qcow2