Khi vSphere Client bất lực
Datastore cán mốc 98% lúc nửa đêm. Máy ảo đột ngột đứng hình vì khóa file đĩa. Trên màn hình vCenter lúc đó chỉ hiện một dòng báo lỗi mơ hồ: “An error occurred while communicating with the remote host”. Nếu từng gặp cảnh này, bạn sẽ hiểu cảm giác bất lực trước giao diện đồ họa. Web GUI rất tiện cho công việc cấu hình thường nhật. Dù vậy, khi hệ thống lỗi đĩa nặng hoặc vCenter mất kết nối, CLI của ESXi mới là nơi duy nhất giúp bạn gỡ rối an toàn.
Tại cụm 8 host ESXi mình đang vận hành, sự cố storage xảy ra khá thường xuyên. Tình huống phổ biến nhất là cấp nhầm Thick Provisioning làm cạn LUN lưu trữ, hoặc máy ảo bị gãy chuỗi snapshot sau khi sao lưu. Trong các pha xử lý khẩn cấp qua SSH, công cụ đầu tiên mình luôn gọi ra chính là vmkfstools.
Giải mã cấu trúc ổ đĩa VMDK và vai trò của vmkfstools
vmkfstools là tiện ích dòng lệnh cấp thấp chạy trực tiếp trong nhân VMkernel. Lệnh này can thiệp thẳng vào hệ thống tập tin VMFS và thiết bị lưu trữ khối (Block Storage) mà không cần thông qua tầng trung gian của vCenter.
Một ổ đĩa VMDK thực tế gồm những gì?
Nhiều bạn quen dùng Hyper-V hay KVM thường nghĩ file .vmdk là một khối dữ liệu đóng gói duy nhất, giống .vhdx hay .qcow2. Trên hệ thống VMFS của ESXi, cấu trúc đĩa ảo lại tách thành hai file riêng biệt:
- Descriptor File (
vm-name.vmdk): File text ASCII cực nhẹ, dung lượng chưa tới 1 KB. Nó lưu thông số hình học đĩa (cylinders, heads, sectors), loại adapter SCSI/NVMe, phiên bản virtual hardware và con trỏ dẫn tới file dữ liệu. - Flat File (
vm-name-flat.vmdk): File nhị phân chứa toàn bộ dữ liệu thực tế của hệ điều hành. Giao diện Web tự động ẩn hậu tố-flatđể gom gọn cho dễ nhìn. Tuy nhiên, khi gõ lệnh trong CLI, bạn sẽ thấy rõ hai file này nằm tách biệt.
Tại sao không nên dùng lệnh cp thông thường?
Một thói quen nguy hiểm của nhiều bạn mới làm quen với ESXi là dùng lệnh cp disk1.vmdk disk2.vmdk. Thao tác này rất dễ gây lỗi vì hai lý do:
- Không hiểu cơ chế Sparse file: Lệnh
cptiêu chuẩn của Linux sẽ biến một ổ Thin 100 GB (thực dùng mới 10 GB) thành một file ngốn trọn 100 GB dung lượng thực trên Datastore. - Làm gãy liên kết file:
cpthường chỉ copy file descriptor và bỏ quên file-flat.vmdk, hoặc copy sai lệch con trỏ bên trong.
vmkfstools giải quyết vấn đề này bằng cơ chế đọc ghi theo block. Nó bảo toàn thuộc tính cấp phát động và giữ nguyên cấu trúc đĩa ảo.
Ba định dạng đĩa ảo cần phân biệt
Mỗi khi khởi tạo hoặc chuyển đổi đĩa qua vmkfstools, bạn sẽ lựa chọn giữa ba định dạng:
- thin: Cấp phát theo nhu cầu thực tế. Ban đầu file VMDK chỉ chiếm vài chục MB rồi phình dần trong quá trình ghi dữ liệu, giúp tối ưu dung lượng lưu trữ tốt nhất.
- zeroedthick (Lazy Zeroed): Chiếm toàn bộ dung lượng được cấp ngay từ đầu. ESXi chỉ ghi đè số 0 lên từng block khi máy ảo bắt đầu ghi dữ liệu lần đầu vào block đó.
- eagerzeroedthick (Eager Zeroed): Cấp phát và xóa sạch toàn bộ block bằng số 0 ngay lúc khởi tạo. Thời gian tạo đĩa lâu hơn, nhưng đổi lại hiệu năng I/O ổn định nhất. Đây là định dạng bắt buộc cho cụm Microsoft WSFC hoặc tính năng VMware Fault Tolerance (FT).
Thao tác thực tế với vmkfstools
Bước chuẩn bị: Mở cổng SSH và vào đúng thư mục
Theo mặc định, ESXi tắt SSH để đảm bảo an toàn. Bạn truy cập ESXi Host Client, vào mục Manage > Services, nhấp chuột phải vào TSM-SSH rồi chọn Start. Tiếp đó, dùng PuTTY hoặc Terminal SSH vào host bằng tài khoản root.
Di chuyển vào thư mục chứa máy ảo trên Datastore:
# Xem danh sách datastore hiện có
cd /vmfs/volumes/
ls -l
# Đi vào thư mục của máy ảo gặp sự cố
cd /vmfs/volumes/datastore1/Database-Server/
ls -lh *.vmdk
1. Ép đĩa Thick về Thin để thu hồi dung lượng trống
Đây là tình huống mình xử lý nhiều nhất trên thực tế. Một máy ảo database được cấp nhầm 500 GB Thick, trong khi dữ liệu thực tế chỉ dùng 80 GB. Hơn 400 GB dung lượng ảo đang khóa chết Datastore. Đầu tiên, hãy tắt nguồn máy ảo (Power Off).
# Cú pháp: vmkfstools -i [đĩa-nguồn] [đĩa-đích] -d thin
vmkfstools -i Database-Server.vmdk Database-Server-Thin.vmdk -d thin
Hệ thống sẽ cập nhật tiến độ theo từng bước: Clone: 10% done., Clone: 20% done.… Sau khi clone hoàn tất, bạn vào phần Edit Settings của VM, trỏ ổ cứng sang file Database-Server-Thin.vmdk mới tạo. Datastore lập tức lấy lại ngay 420 GB dung lượng trống.
2. Mở rộng kích thước đĩa (Extend Disk) trong vài giây
Nếu bạn muốn nới rộng ổ đĩa mà không muốn chờ đợi giao diện vCenter xoay vòng tải, tham số -X sẽ xử lý tức thì:
# Mở rộng đĩa lên mức dung lượng tổng là 150GB
vmkfstools -X 150G Database-Server.vmdk
Lưu ý con số 150G là dung lượng đích sau khi nới, không phải phần dung lượng cộng thêm. Nếu đĩa hiện tại là 100 GB và bạn muốn thêm 50 GB, giá trị truyền vào phải là 150G.
Với đĩa định dạng eagerzeroedthick, bạn thêm cờ chỉ định để hệ thống định dạng sẵn các block mở rộng:
vmkfstools -X 150G -d eagerzeroedthick Database-Server.vmdk
3. Khởi tạo ổ đĩa ảo độc lập từ dòng lệnh
Khi bạn cần dựng sẵn đĩa phụ cho file server hoặc chuẩn bị disk group cho cơ sở dữ liệu mà chưa muốn gắn ngay vào máy ảo:
# Tạo ổ đĩa 100GB định dạng Thin dùng controller SCSI LSI Logic
vmkfstools -c 100G -d thin -a lsilogic DataDisk_01.vmdk
4. Khôi phục file Descriptor bị xóa nhầm
Trong một ca dọn dẹp thư mục máy ảo, quản trị viên lỡ tay xóa mất file Database-Server.vmdk. Máy ảo lập tức từ chối khởi động và quăng lỗi “File not found”. May mắn là file dữ liệu gốc Database-Server-flat.vmdk vẫn còn nguyên. Bạn có thể dựng lại descriptor theo 3 bước sau:
Trước hết, lấy chính xác kích thước tính theo từng byte của file flat:
ls -l Database-Server-flat.vmdk
# Kết quả mẫu: 53687091200 bytes (tương đương 50GB)
Tiếp theo, dùng vmkfstools tạo một ổ đĩa tạm có cùng kích thước byte và adapter type:
vmkfstools -c 53687091200 -a lsilogic -d thin temp.vmdk
Mở file temp.vmdk vừa sinh ra bằng trình soạn thảo vi:
vi temp.vmdk
Tìm dòng khai báo flat file (số sector 104857600 được tính tự động từ 53687091200 / 512) và sửa lại đúng tên file flat của bạn:
# Dòng gốc:
RW 104857600 VMFS "temp-flat.vmdk"
# Đổi thành tên file flat thật:
RW 104857600 VMFS "Database-Server-flat.vmdk"
Lưu file lại, đổi tên temp.vmdk thành tên file descriptor cũ và xóa file flat tạm:
mv temp.vmdk Database-Server.vmdk
rm -f temp-flat.vmdk
Bật lại máy ảo từ vSphere Client. Hệ điều hành và toàn bộ dịch vụ sẽ khởi động lại bình thường, không mất mát bất kỳ byte dữ liệu nào.
5. Kiểm tra tính toàn vẹn của chuỗi đĩa snapshot
Trước khi gộp (consolidate) snapshot hoặc sao chép các máy ảo quan trọng, bạn nên chạy lệnh kiểm tra liên kết file để tránh lỗi giữa chừng:
vmkfstools -e Database-Server.vmdk
Nếu terminal trả về Disk chain is consistent, cấu trúc chuỗi snapshot và đĩa gốc hoàn toàn ổn định để bạn thực hiện các bước bảo trì tiếp theo.
Lời kết
Nắm vững vmkfstools giúp bạn luôn giữ thế chủ động khi hạ tầng gặp sự cố lưu trữ. Các tùy chọn chuyển đổi -i, nới đĩa -X cùng mẹo dựng lại descriptor là kỹ năng gỡ rối bắt buộc cho mọi sysadmin quản trị VMware. Thay vì chờ đợi hay hoang mang trước các thông báo lỗi chung chung của Web GUI, vài dòng lệnh chuẩn xác qua SSH sẽ giúp bạn giải cứu hệ thống kịp thời.

