Vượt qua giới hạn 2 máy ảo macOS trên chip Apple Silicon

11 tháng 4, 2026·3 phút đọc

Theo mặc định, macOS trên chip Apple Silicon chỉ cho phép chạy tối đa 2 máy ảo cùng lúc. Tuy nhiên, bằng cách sử dụng Kernel Collection dành cho nhà phát triển và chỉnh sửa các tham số khởi động (boot-args), chúng ta có thể bỏ qua giới hạn này để chạy nhiều máy ảo hơn. Bài viết sẽ hướng dẫn chi tiết quy trình kỹ thuật đằng sau việc "đá lố" giới hạn phần mềm của Apple.

Vượt qua giới hạn 2 máy ảo macOS trên chip Apple Silicon

Là một người làm việc sâu với macOS Virtual Machines, tôi nhận thấy một giới hạn khá khó chịu trên các máy Mac dùng chip Apple Silicon: chỉ có thể chạy tối đa 2 máy ảo macOS cùng một lúc. Điều này xuất phát từ Thỏa thuận cấp phép phần mềm (SLA) của Apple, nhưng tôi tò mò xem liệu có thể vượt qua giới hạn này ở cấp độ hệ thống hay không.

Nghiên cứu sâu về nội bộ macOS

Ban đầu, tôi nghi ngờ giới hạn này nằm ở không gian người dùng (userspace) trong thư viện Virtualization.framework. Tuy nhiên, sau nhiều giờ phân tích mã máy, tôi không tìm thấy bất kỳ mã cứng nào về con số 2 ở đó. Một gợi ý từ cộng đồng đã chỉ tôi sang nhân XNU (nhân của macOS), nơi chứa mã nguồn đóng của Apple. So sánh nhân Intel và Apple Silicon, tôi phát hiện stack máy ảo nằm dưới các hàm hv_vm_*.

Mã khởi tạo hv_init trong IDAMã khởi tạo hv_init trong IDA

Khi phân tích nhân phát triển (development kernel) của macOS Sonoma, tôi tìm thấy mã khởi tạo hv_init(). Apple sử dụng biến hv_apple_isa_vm_quota để đếm số lượng máy ảo đang chạy. Đặc biệt hơn, tôi phát hiện hai tham số khởi động (boot-args) thú vị: hypervisor=hv_apple_isa_vm_quota=. Tham số sau cho phép ghi đè giới hạn số lượng máy ảo ngay trong nhân hệ thống.

Hàm tạo máy ảo trong nhân XNUHàm tạo máy ảo trong nhân XNU

Tuy nhiên, trên nhân phát hành chính thức (release kernel), Apple đã thay đổi logic kiểm tra này bằng một rào cản AppleInternal thông qua System Integrity Protection (SIP). Để vượt qua, chúng ta cần xây dựng và sử dụng một Kernel Collection dành cho nhà phát triển.

Cấu hình máy Mac để vượt qua giới hạn

Quy trình cấu hình khá phức tạp và yêu cầu quyền quản trị cao. Trước tiên, bạn cần tắt System Integrity Protection (SIP) và cho phép truyền các tham số khởi động tùy chỉnh. Sau đó, chúng ta sẽ cấu hình máy Mac để khởi động vào Kernel Collection tùy chỉnh và thiết lập các tham số boot-args cụ thể trong NVRAM.

Các lệnh terminal cần thiết bao gồm:

  • csrutil disable: Tắt SIP.
  • bputil --disable-boot-args-restriction: Cho phép boot-args tùy chỉnh.
  • kmutil configure-boot ...: Cấu hình boot vào Kernel Collection phát triển.
  • nvram ...: Thiết lập các tham số kcsuffix=development, hypervisor=0x1 và quan trọng nhất là hv_apple_isa_vm_quota=0xFF (để đặt giới hạn lên 255 máy ảo).

Thiết lập tham số trong TerminalThiết lập tham số trong Terminal

Chạy thử nghiệm nhiều máy ảo

Sau khi khởi động lại với cấu hình mới, bạn có thể sử dụng các phần mềm ảo hóa như UTM, Parallels hoặc Viable. Kết quả thật ấn tượng: tôi đã chạy thành công 9 máy ảo macOS cùng lúc trên chiếc MacBook Pro M2 Pro của mình và máy vẫn hoạt động ổn định để thử nghiệm.

Chạy 9 máy ảo cùng lúc trên UTMChạy 9 máy ảo cùng lúc trên UTM

Lưu ý khi cập nhật hệ điều hành

Một lưu ý quan trọng là khi sử dụng Kernel Collection tùy chỉnh trên Apple Silicon, quy trình cập nhật hệ điều hành sẽ gặp lỗi. Để cập nhật, bạn cần hoàn tác về Kernel Collection gốc thông qua Recovery OS bằng công cụ bputil.

Kết luận

Đây là một hành trình nghiên cứu thú vị, cho thấy cách Apple thực hiện các giới hạn phần mềm. Mặc dù không được hỗ trợ chính thức, nhưng thật tuyệt khi đội ngũ CoreOS vẫn để lại "cánh cửa hậu" cho những người đam mê công nghệ muốn khai thác tối đa khả năng của phần cứng.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗