Sửa lỗi ‘The virtual machine is in use’: Cách xử lý file .lck để cứu máy ảo VMware

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Khi máy ảo bỗng dưng “đình công” giữa đêm

Kịch bản quen thuộc: Kim đồng hồ điểm 2 giờ sáng, bạn đang cày deadline hoặc cấu hình con web server trên VMware. Bất chợt, điện chập chờn hoặc Windows tự ý restart để update. Sau khi máy khởi động lại, bạn mở VMware với hy vọng tiếp tục công việc nhưng lại nhận ngay gáo nước lạnh: “The virtual machine is in use” hoặc “Taking ownership of this virtual machine failed”.

Khá là thốn! Bạn biết rõ chẳng có ai đang dùng máy ảo này cả, nhưng VMware vẫn khăng khăng nó đang bị khóa. Với kinh nghiệm vận hành cluster hơn 10 host ESXi và quản lý hàng trăm máy ảo, mình gặp tình huống này như cơm bữa. Lỗi này thực chất chỉ là một cơ chế tự bảo vệ của VMware, không hề đáng sợ nếu bạn nắm vững nguyên lý vận hành của nó.

Cơ chế File Locking: Tại sao máy ảo lại “tự khóa mình”?

Trước khi bắt tay vào sửa, hãy hiểu gốc rễ vấn đề. VMware sử dụng cơ chế File Locking để bảo vệ tính toàn vẹn dữ liệu. Khi bạn Power On một máy ảo (VM), hệ thống sẽ tạo ra các thư mục hoặc file đuôi .lck (Lock) ngay trong thư mục chứa máy ảo đó.

Đây là cách VMware “đánh dấu chủ quyền”. Nó ngăn việc hai tiến trình VMware khác nhau cùng ghi dữ liệu vào một file đĩa ảo (.vmdk). Nếu thiếu cơ chế này, dữ liệu sẽ bị ghi đè loạn xạ, dẫn đến hỏng sạch hệ điều hành (data corruption) chỉ trong tích tắc.

Bình thường, khi bạn Shutdown máy ảo đúng quy trình, VMware sẽ tự dọn dẹp các file .lck này. Tuy nhiên, nếu máy tính sập nguồn đột ngột hoặc tiến trình vmware-vmx.exe bị kill bất ngờ, các “tàn dư” này vẫn nằm chình lình ở đó. Khi bạn mở lại, VMware thấy file lock cũ và lầm tưởng máy ảo đang chạy ở đâu đó, dẫn đến việc từ chối truy cập.

Quy trình 4 bước xử lý file .lck an toàn

Đừng vội cài lại máy ảo hay ghost lại Windows cho mất công. Hãy bình tĩnh thực hiện theo quy trình thực chiến dưới đây.

Bước 1: Quét sạch các tiến trình treo

Đôi khi máy ảo không thực sự tắt mà vẫn chạy ngầm dưới dạng tiến trình lỗi. Trên Windows, nhấn Ctrl + Shift + Esc để mở Task Manager.

  1. Chuyển sang tab Details.
  2. Tìm và diệt các tiến trình: vmware.exe, vmware-vmx.exe, vmware-authd.exe.
  3. Chuột phải và chọn End Task để chắc chắn không còn gì đang giữ file.

Nếu bạn đang dùng Linux hoặc SSH vào host ESXi, hãy dùng lệnh “quyền lực” này:

# Tìm PID của máy ảo đang bị treo
ps aux | grep vmx

# Force kill tiến trình (thay PID bằng số thực tế, ví dụ: kill -9 1234)
kill -9 <PID>

Bước 2: Xác định chính xác “hiện trường”

Nếu không nhớ máy ảo lưu ở đâu, hãy nhìn vào đường dẫn trong thông báo lỗi. Thông thường, các file này nằm trong C:\Users\[Tên-User]\Documents\Virtual Machines\.... Hãy truy cập đúng thư mục đó bằng File Explorer.

Bước 3: Xóa bỏ các thư mục .lck

Vào thư mục máy ảo, bạn sẽ thấy vài thư mục có tên kết thúc bằng .lck. Ví dụ, với máy ảo Ubuntu-Dev, bạn sẽ thấy Ubuntu-Dev.vmdk.lck hoặc Ubuntu-Dev.vmx.lck.

Hành động: Chọn tất cả các thư mục có đuôi .lck và nhấn Shift + Delete.

Cảnh báo đỏ: Chỉ xóa thư mục/file có đuôi .lck. Tuyệt đối không đụng vào file .vmdk (ổ cứng ảo), .vmx (cấu hình) hay .vmsd (snapshot). Xóa nhầm file vmdk là coi như mất trắng dữ liệu, không có cách nào cứu vãn đâu nhé!

Bước 4: Kiểm chứng kết quả

Sau khi dọn dẹp xong, hãy mở lại VMware Workstation. Khởi động lại máy ảo. Đến 99% trường hợp máy sẽ lên mượt mà như chưa từng có cuộc chia ly.

Tuyệt chiêu cho môi trường ESXi Cluster

Trong môi trường Production, đôi khi vSphere Client không cho xóa file lock vì nó bị giữ bởi chính Kernel của Host. Lúc này, mình thường dùng lệnh vmfsfilelockinfo để truy tìm “kẻ thủ ác” (MAC address của host đang giữ lock):

vmfsfilelockinfo -p /vmfs/volumes/DATASTORE_NAME/VM_NAME/VM_NAME.vmdk

Khi đã biết host nào đang giữ file, bạn chỉ cần restart dịch vụ management trên host đó là xong, hoàn toàn không ảnh hưởng đến các máy ảo khác đang chạy:

/etc/init.d/hostd restart
/etc/init.d/vpxa restart

Kinh nghiệm xương máu để tránh lỗi

Thay vì nhấn nút X rồi chọn “Power Off” (giống như rút điện đột ngột), hãy tập thói quen Shutdown từ bên trong Guest OS. Cách này giúp VMware có đủ thời gian để đóng file descriptor và xóa file lock sạch sẽ.

Một nguyên nhân khác ít người để ý là Disk Full. Khi ổ cứng vật lý đầy, VMware không thể ghi file tạm, dẫn đến treo tiến trình và kẹt lock. Hãy luôn đảm bảo ổ cứng còn trống ít nhất 10-20GB để hệ thống “thở”.

Tạm kết

Lỗi “The virtual machine is in use” nghe có vẻ nghiêm trọng nhưng thực ra chỉ là một mẩu metadata còn sót lại. Chỉ cần nắm vững quy trình xóa file .lck, bạn sẽ làm chủ hoàn toàn máy ảo của mình. Hy vọng chút kinh nghiệm “trực đêm” này giúp anh em bớt đau đầu khi gặp sự cố.

Share: