Hướng dẫn sửa lỗi ổ đĩa QCOW2 bằng qemu-img: Cứu dữ liệu Proxmox/KVM sau khi crash

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Tại sao vận hành máy ảo phải biết dùng qemu-img?

Anh em chạy server hay homelab chắc không lạ gì cảnh đang làm việc thì cúp điện đột ngột hoặc host bị treo cứng (kernel panic). Cảm giác bật lại server mà máy ảo (VM) báo lỗi I/O, treo màn hình boot là một cơn ác mộng thực sự.

Tôi đang vận hành một cụm homelab Proxmox với 12 VM. Có lần, ổ SSD cũ trên con server Dell dở chứng đúng lúc nhảy aptomat. Kết quả là file .qcow2 của con database nặng 200GB bị “corrupt” (hỏng cấu trúc). Nếu không biết dùng qemu-img, tôi đã phải chấp nhận mất dữ liệu của cả tuần vì bản backup gần nhất đã quá cũ.

Định dạng QCOW2 (QEMU Copy-On-Write) rất phổ biến trên KVM và Proxmox nhờ tính năng snapshot linh hoạt. Tuy nhiên, do lưu trữ theo cơ chế phân tầng, chỉ cần một vài bit bị ghi sai khi hệ thống crash, toàn bộ file đĩa ảo sẽ trở nên không ổn định. Lúc này, bộ công cụ qemu-img chính là “dao mổ” để bạn cứu vãn tình hình.

Cài đặt công cụ qemu-img

Hầu hết các distro Linux chuyên ảo hóa như Ubuntu Server, Debian hay Proxmox đều tích hợp sẵn công cụ này. Nếu bạn dùng một máy trạm khác để cứu dữ liệu, hãy cài gói qemu-utils.

Trên Ubuntu/Debian hoặc Proxmox:

sudo apt update && sudo apt install qemu-utils -y

Trên CentOS/RHEL/AlmaLinux:

sudo yum install qemu-img -y

Kiểm tra nhanh bằng lệnh qemu-img --version. Các bản mới thường hỗ trợ thuật toán nén và sửa lỗi hiệu quả hơn.

Quy trình kiểm tra và sửa lỗi ổ đĩa QCOW2

Khi VM không khởi động được, sai lầm lớn nhất là cố gắng bật đi bật lại nhiều lần. Hành động này chỉ khiến dữ liệu hỏng nặng thêm. Hãy tắt hẳn VM và thực hiện các bước chẩn đoán dưới đây.

1. Khám bệnh cho file đĩa

Đầu tiên, chúng ta cần xem tình trạng tổng quát của file. Lệnh info sẽ cho biết file có đang bị khóa (locked) hay chứa snapshot nào không.

qemu-img info /var/lib/vz/images/100/vm-100-disk-0.qcow2

Nếu thấy dòng corrupt: true xuất hiện, chắc chắn bạn phải bắt tay vào sửa lỗi ngay.

2. Chẩn đoán chi tiết với lệnh check

Đây là bước quan trọng nhất để xác định mức độ hư hại. Lệnh này sẽ quét qua bảng chỉ mục (L1/L2 table) của file QCOW2. Với ổ đĩa khoảng 100GB trên SSD, quá trình này mất tầm 1-2 phút.

qemu-img check /var/lib/vz/images/100/vm-100-disk-0.qcow2

Kết quả thường rơi vào hai kịch bản:

  • Leaked clusters: Lỗi nhẹ. Các khối dữ liệu bị bỏ hoang, gây tốn dung lượng nhưng chưa làm chết VM.
  • Invalid cluster/Internal errors: Lỗi nặng. Bảng chỉ mục bị sai lệch khiến hệ điều hành không thể đọc dữ liệu.

3. Tiến hành sửa lỗi tự động

Đối với lỗi leaked clusters, bạn có thể dùng tham số -r leaks để xử lý an toàn. Nếu gặp lỗi nặng hơn, hãy dùng -r all. Lưu ý: Luôn copy ra một bản dự phòng trước khi chạy lệnh sửa. Việc vá lỗi đôi khi sẽ cắt bỏ những block dữ liệu không thể phục hồi.

# Sửa lỗi rò rỉ dữ liệu (An toàn)
qemu-img check -r leaks /path/to/disk.qcow2

# Sửa toàn bộ lỗi cấu trúc (Cần cẩn trọng)
qemu-img check -r all /path/to/disk.qcow2

4. Tuyệt chiêu cuối: Rebuild bằng lệnh Convert

Nếu check -r all vẫn thất bại, hãy thử dùng lệnh convert. Cách này sẽ đọc mọi dữ liệu còn sót lại và ghi sang một file mới với cấu trúc bảng chỉ mục hoàn hảo.

qemu-img convert -p -f qcow2 -O qcow2 vm-100-disk-0.qcow2 vm-100-disk-0_fixed.qcow2

Giải thích các tham số:

  • -p: Hiển thị tiến độ theo phần trăm.
  • -f qcow2: Định dạng file nguồn bị hỏng.
  • -O qcow2: Định dạng file đích cần tạo.

Kinh nghiệm thực tế cho thấy 90% trường hợp file mới sẽ hoạt động trơn tru. qemu-img đã tự động loại bỏ các block lỗi và sắp xếp lại dữ liệu logic trong quá trình convert.

Kiểm tra sau xử lý và cách phòng tránh

Sau khi sửa hoặc convert, đừng vội mừng. Hãy chạy lại lệnh kiểm tra một lần cuối trên file mới.

qemu-img check /var/lib/vz/images/100/vm-100-disk-0_fixed.qcow2

Nếu nhận thông báo No errors were found on the image, bạn đã có thể thở phào. Lúc này, hãy thay thế file cũ bằng file mới và khởi động VM.

Làm sao để không phải “cứu hộ” lần nữa?

Phòng bệnh luôn rẻ hơn chữa bệnh. Để bảo vệ ổ đĩa ảo, anh em nên lưu ý 3 điểm sau:

  • Sắm UPS (Bộ lưu điện): Đây là khoản đầu tư xứng đáng nhất. Hầu hết các ca hỏng file QCOW2 tôi từng xử lý đều do mất điện đột ngột.
  • Chọn Cache Mode phù hợp: Trong Proxmox, mode Write back cho hiệu năng cao nhưng rủi ro lớn. Với database, hãy ưu tiên Write through hoặc Direct sync.
  • Đừng chỉ tin vào Snapshot: Snapshot nằm ngay trong file QCOW2. Nếu file hỏng, snapshot cũng mất. Hãy dùng Proxmox Backup Server để đẩy bản backup ra ổ cứng ngoài hoặc cloud.

Làm chủ qemu-img không chỉ giúp bạn cứu dữ liệu trong gang tấc mà còn giúp hiểu sâu hơn về hệ thống ảo hóa. Nếu gặp khó khăn trong quá trình thực hiện, anh em cứ để lại comment, tôi sẽ hỗ trợ giải đáp.

Share: