Rút Gọn File QCOW2 An Toàn Trên KVM/Proxmox: Tối Ưu Dung Lượng Ảo Hóa

7 Tháng 6, 2025

✅ Giới thiệu

Bạn đang quản lý hệ thống máy ảo bằng KVM hoặc Proxmox và gặp tình trạng file ổ đĩa ảo .qcow2 quá lớn, gây tốn tài nguyên lưu trữ? Script dưới đây giúp bạn rút gọn file QCOW2 an toàn, thu nhỏ phân vùng và hệ thống tập tin bên trong, đồng thời tạo lại file nhẹ hơn — hoàn toàn tự động chỉ với vài bước.


🛠️ Chức năng của script

Script thực hiện quy trình sau:

  1. Gắn file QCOW2 vào thiết bị NBD (/dev/nbd0)
  2. Kiểm tra hệ thống tập tin bằng e2fsck
  3. Thu nhỏ filesystem bằng resize2fs
  4. Resize phân vùng bằng parted
  5. Ngắt kết nối thiết bị NBD
  6. Tạo file QCOW2 mới đã rút gọn bằng qemu-img convert

💡 Ví dụ cấu hình

INPUT_FILE="vm-100-disk-0.qcow2"
OUTPUT_FILE="vm-small.qcow2"
FS_SHRINK_SIZE="120G"
PARTITION_SIZE="150GB"

⚙️ Yêu cầu trước khi chạy

Để chạy script này, bạn cần đảm bảo máy chủ có sẵn các công cụ sau:

➤ Đối với Ubuntu/Debian

sudo apt update
sudo apt install -y qemu-utils qemu-kvm libguestfs-tools parted e2fsprogs

➤ Đối với CentOS/AlmaLinux/RHEL

sudo yum install -y qemu-img qemu-kvm libguestfs-tools parted e2fsprogs

➤ Tải kernel module NBD

sudo modprobe nbd max_part=8

Script cần chạy với quyền root hoặc sudo.

Sau khi chạy xong, bạn sẽ có file mới vm-small.qcow2 với dung lượng đã tối ưu.


📦 Ứng dụng thực tế

  • Tối ưu máy ảo Proxmox hoặc KVM để tiết kiệm ổ cứng
  • Chuẩn bị image nhỏ gọn để backup hoặc migrate
  • Tự động hóa quá trình quản lý dung lượng hệ thống ảo hóa

⚠️ Lưu ý an toàn

  • Luôn backup file QCOW2 gốc trước khi thực hiện
  • Script chỉ áp dụng cho filesystem dạng ext4
  • Không sử dụng cho ổ đĩa có LVM hoặc phân vùng phức tạp mà chưa kiểm tra kỹ

📜 Mã nguồn script đầy đủ

#!/bin/bash

# === CẤU HÌNH ===
INPUT_FILE="vm-100-disk-0.qcow2"   # File gốc cần rút gọn
OUTPUT_FILE="vm-small.qcow2"       # File đích sau khi resize
MOUNT_DEV="/dev/nbd0"              # Thiết bị nbd
FS_SHRINK_SIZE="120G"              # Dung lượng hệ thống tập tin bên trong
PARTITION_SIZE="150GB"             # Dung lượng phân vùng thực tế

# === BẮT ĐẦU ===
echo "[1] 🧩 Tải kernel module nbd..."
modprobe nbd max_part=8 || { echo "❌ Không thể load nbd"; exit 1; }

echo "[2] 🔗 Gắn file QCOW2: $INPUT_FILE..."
qemu-nbd --connect=$MOUNT_DEV "$INPUT_FILE" || { echo "❌ Gắn thất bại"; exit 1; }

sleep 2
partprobe $MOUNT_DEV

echo "[3] 🧹 Kiểm tra lỗi hệ thống tập tin..."
e2fsck -f ${MOUNT_DEV}p1 || { echo "❌ Lỗi khi kiểm tra hệ thống tập tin"; qemu-nbd --disconnect $MOUNT_DEV; exit 1; }

echo "[4] ✂️ Thu nhỏ filesystem về $FS_SHRINK_SIZE..."
resize2fs ${MOUNT_DEV}p1 $FS_SHRINK_SIZE || { echo "❌ Thu nhỏ filesystem thất bại"; qemu-nbd --disconnect $MOUNT_DEV; exit 1; }

echo "[5] 📐 Resize phân vùng về $PARTITION_SIZE..."
parted $MOUNT_DEV ---pretend-input-tty <<EOF
resizepart 1 $PARTITION_SIZE
Yes
quit
EOF

echo "[6] 🔌 Ngắt kết nối NBD..."
qemu-nbd --disconnect $MOUNT_DEV

echo "[7] 📦 Tạo lại file QCOW2 mới: $OUTPUT_FILE..."
qemu-img convert -O qcow2 "$INPUT_FILE" "$OUTPUT_FILE" || { echo "❌ Convert thất bại"; exit 1; }

echo "[✅] Đã tạo file: $OUTPUT_FILE với partition $PARTITION_SIZE và filesystem $FS_SHRINK_SIZE"

Blog ..

Hướng dẫn dịch vụ ..

Sản phẩm nổi bật

dịch vụ chất lượng khách hàng tin tưởng

NVMe VPS

Tốc độ cao và bảo mật

Xem thêm

SSD VPS

Hiệu năng và tối ưu chi phí

Xem thêm

Proxy

Ẩn danh và mượt mà

Xem thêm

NVMe Hosting

Ổn định và tiện dụng

Xem thêm