Dạo gần đây, do cần test trên dữ liệu lớn nên mình có chạy batch để tạo data trên mysql. Hậu quả là làm đầy bộ nhớ máy ảo, khiến cho mysql bị đứng không thể nào chạy được. Sau khi tìm hiểu thì mình đã tìm ra cách để thêm bộ nhớ cho máy. Ở đây mình sử dụng Virtualbox cùng với Vagrant

Nguyên nhân

  • Trong lúc thực hiện test ở server, mình đã tạo khá nhiều dump data cho MySQL, dẫn tới việc bộ nhớ máy ảo bị đầy, làm đứng server.

Giải pháp

  • Để giải quyết vấn đề này, cách đơn giản nhất là mở rộng bộ nhớ được cấp phát cho máy ảo sử dụng.
  • Ở trong nội dung bài viết này, mình sẽ sử dụng Vagrant với Virtualbox, trên hệ điều hành CentOs 6.5

Các Bước Thực Hiện

Bước 1: Chuyển đổi định dạng

  • Thông thường, định dạng của ổ nhớ máy ảo là định dạng *.vmdk . Tuy nhiên, để có thể mở rộng bộ nhớ máy, ta cần phải chuyển nó về định dạng *.vdi
  • Chúng ta có thể sử dụng chương trình VBoxManage do Virtualbox cung cấp để convert định dạng bộ nhớ.
  • Chương trình VBoxManage nằm chung vị trí nơi chúng ta cài đặt Virtualbox, ở đây ví dụ là:
C:\Program Files\Oracle\VirtualBox
  • Tiếp theo, ta tiến hành convert file .vmdk định dạng thành file .vdi theo câu lệnh sau:
VBoxManage clonehd "Path_to_source_vmdk_file" "Path_to_destination_vdi_file" --format vdi
  • Tiếp theo, ta tiến hành định dạng lại bộ nhớ có thể được sử dụng cho đĩa ảo với câu lệnh sau, trong đó con số cuối cùng chính là dung lượng bộ nhớ mà chúng ta muốn có (tính theo MB):
VBoxManage modifyhd "Path_to_vdi_file" --resize 21480
  • Cuối cùng, chúng ta chuyển đổi lại file .vdi thành định dạng .vmdk
VBoxManage clonehd "Path_to_modified_vdi_file" "Path_to_destination_vmdk_file" --format vmdk

Bước 2: Setup bộ nhớ đã extend vào máy ảo

  • Sau khi đã định dạng lại bộ nhớ. Tiếp theo, chúng ta cần add bộ nhớ mới đã định dạng vào máy ảo đang chạy.
  • Mở Virtualbox, vào Setting của máy ảo mà chúng ta cần mở rộng.
  • Ta xóa đi ổ đĩa mà máy ảo đang sử dụng và thay bằng ổ đĩa ảo mới mà ta đã format lại bộ nhớ ở trên.

Bước 3: Extend bộ nhớ trên máy ảo

  • Tiếp theo, ta cần mở rộng bộ nhớ thực tế của ổ đĩa bằng công cụ format ổ đĩa. Ở đây, mình sẽ sử dụng GParted để làm việc này. (Download tại đây)
  • Sau đó, ta mount đĩa ảo mới download về vào ổ đĩa quang của máy ảo cần thay đổi.

  • Sau đó , ta mở máy ảo bằng Virtualbox để khởi động máy ảo, vào Boot Menu để chạy GParted
  • Sau đó, ta tiến hành extend ổ đĩa được cấp phát.

Bước 4: Update bộ nhớ trên máy ảo

  • Sau khi hoàn tất mọi bước trên, ta khởi động lại máy ảo bằng vagrant.
  • Ta thực hiện câu lệnh sau để mở rộng sử dụng bộ nhớ đã extend ( Thực thi trên quyền root):
lvextend --size +22.13GB -r /dev/mapper/centos-root 
  • Vậy là cuối cùng chúng ta đã mở rộng thành công bộ nhớ cho máy ảo

Kết luận

  • Với cách làm đơn giản như trên, chúng ta có thể dễ dàng mở rộng bộ nhớ máy ảo một cách dễ dàng.
  • Các thao tác trên cũng có thể dùng để thực hiện việc thu nhỏ lại bộ nhớ máy ảo. Tuy nhiên, việc thu nhỏ lại kèm theo rủi ro về mất dữ liệu khá lớn.
  • Bộ nhớ máy ảo chỉ chiếm dung lượng thực sự trên máy thật khi dữ liệu thật sự được lưu. Do đó, chúng ta có thể thoải mái cấp phát bộ nhớ mà không lo lắng về việc nó sẽ chiếm 1 phần cố định bộ nhớ trên máy thật.