Chạy Linux từ VHD trên UEFI và cách boot từ USB hoặc ổ nội bộ

Chạy Linux từ VHD trên UEFI và cách boot từ USB hoặc ổ nội bộ
Bài viết này hướng dẫn từng bước cách tạo VHD trên Windows, cài Linux vào VHD bằng VM UEFI, làm cho VHD boot được bằng Ventoy, và hai phương án để boot Linux VHD trên máy thực: qua USB với Ventoy hoặc boot trực tiếp từ ổ nội bộ bằng Grub2Win. Thực hiện trên máy dự phòng hoặc sao lưu trước khi thao tác trên hệ thật.
Chuẩn bị và yêu cầu
Hệ điều hành chủ: Windows với quyền quản trị.
Phần mềm ảo hóa: VMware hoặc VirtualBox hỗ trợ UEFI.
Bộ cài Linux: ISO của bản phân phối Linux tương thích với UEFI.
Công cụ: Ventoy, script Ventoy để đăng ký VHD; Grub2Win; VLink hoặc công cụ tương đương để tạo file .vlink; các gói grub cần thiết.
Lưu trữ: không gian trống cho file VHD và USB để cài Ventoy.
Sao lưu: sao lưu dữ liệu quan trọng trước khi thay đổi phân vùng hoặc EFI.
Tạo VHD trên Windows
Mở Disk Management bằng quyền Administrator.
Chọn Action > Create VHD và cấu hình: VHDX hoặc VHD, dung lượng (ví dụ 40G), kiểu cố định hoặc động, đường dẫn lưu.
Sau khi tạo, Initialize Disk, tạo bảng phân vùng GPT và tạo phân vùng EFI + phân vùng root Linux nếu muốn.
Nếu cần, detach VHD để VM có thể gắn file VHD trực tiếp.
Gắn VHD vào VM và cài Linux qua UEFI
Tạo VM mới với firmware UEFI bật.
Gắn ISO cài đặt Linux vào CD-ROM và gắn file VHD làm ổ đĩa mục tiêu.
Boot VM từ ISO ở chế độ UEFI và chạy trình cài đặt.
Khi phân vùng, chọn đúng thiết bị VHD và tạo ESP (EFI System Partition) trên VHD nếu trình cài đặt không tự tạo.
Cài Linux vào VHD và tối ưu
Không tạo phân vùng swap trên VHD nếu muốn di động hoặc dùng swap của host.
Tắt atime để giảm ghi: thêm mount option noatime trong /etc/fstab cho root.
Đảm bảo GRUB-EFI được cài lên phân vùng EFI của VHD, không để hệ cài đặt ghi đè EFI của host. Nếu cần chroot sau cài để cài grub-efi vào VHD.
Ví dụ /etc/fstab:
LABEL=root / ext4 defaults,noatime 0 1
Chuẩn bị để VHD boot bằng Ventoy và hỗ trợ MBR
Trên hệ Linux trong VM, chạy script Ventoy VHD helper lên file VHD để tạo file .vlink metadata cho Ventoy.
Cài các gói cần thiết tạo GRUB cho hệ MBR nếu cần hỗ trợ MBR: ví dụ grub-pc-bin hoặc các gói grub-mkimage.
Tạo ảnh GRUB cho MBR nếu cần:
grub-mkstandalone -O i386-pc -o /boot/grub/grub-mbr.img "boot/grub/grub.cfg=/boot/grub/grub.cfg"
- Sao chép file VHD và file .vlink tương ứng vào USB Ventoy hoặc đặt .vlink trên USB trỏ tới VHD nằm trên ổ nội bộ.
Linux VHD trên ổ nội bộ nhưng boot từ USB Ventoy
Cài VLink trong Linux nếu VHD để trên ổ nội bộ và bạn muốn boot bằng Ventoy USB. VLink tạo file .vlink mô tả vị trí VHD để Ventoy có thể khởi động.
Chuẩn bị USB: cài Ventoy lên USB, đặt file .vlink lên thư mục gốc USB hoặc copy VHD sang USB tùy chọn.
Boot: khởi động máy từ USB Ventoy, chọn mục VHD đã cấu hình trên menu Ventoy để nạp Linux từ VHD trên ổ nội bộ.
Linux VHD trên ổ nội bộ và boot trực tiếp từ ổ nội bộ bằng Grub2Win
Cài Grub2Win trên Windows để quản lý menu boot.
Grub2Win không chainload file .vlink trực tiếp, cần cấu hình để chainload file .vhd hoặc chainload GRUB EFI nằm trên phân vùng EFI.
Dùng chế độ debug của GRUB để kiểm tra: nhấn
cvào prompt để vào command line, dùnglsđể liệt kê phân vùng và xác định đường dẫn tới file VHD.Ví dụ thao tác debug và loopback trong GRUB:
# vào command line GRUB
ls
set root=(hd0,gpt2)
loopback loop (hd0,gpt2)/linux.vhd
ls (loop)/
- Tạo entry chainload trong Grub2Win trỏ tới file VHD hoặc tới GRUB-EFI bên trong VHD. Nếu cần truyền parameter vlink, dùng phương pháp chainload tới EFI/GRUB trong VHD rồi cho GRUB bên trong xử lý.
Ví dụ entry mẫu trong grub khi loopback:
menuentry "Linux VHD" {
set root=(hd0,gpt2)
loopback loop (hd0,gpt2)/linux.vhd
set root=(loop)
linux /vmlinuz root=/dev/mapper/cryptroot ro
initrd /initrd.img
boot
}
Gỡ lỗi và kiểm tra
Dùng các lệnh GRUB
ls,set,insmod,loopbackđể xác minh phân vùng, đường dẫn và nội dung VHD.Kiểm tra tồn tại của EFI loader trong VHD:
/EFI/BOOT/BOOTX64.EFIhoặc/EFI/<distro>/shimx64.efi.Nếu kernel dừng sớm, kiểm tra kernel cmdline và initramfs, bổ sung driver cần thiết cho nhiều bộ điều khiển phần cứng nếu định chạy trên nhiều máy.
Bảo mật và tính di động
Mã hóa VHD bằng LUKS nếu chứa dữ liệu nhạy cảm.
Đảm bảo initramfs của Linux chứa driver cho nhiều trình điều khiển để tăng khả năng boot trên phần cứng khác nhau.
Kiểm tra checksum khi di chuyển VHD giữa các thiết bị.
Kết luận
Tạo Linux trên VHD và boot ở chế độ UEFI thực hiện được khi bạn cài Linux vào VHD có phân vùng EFI và cấu hình GRUB đúng. Giải pháp tiện nhất để di động là dùng Ventoy + .vlink trên USB. Boot trực tiếp từ ổ nội bộ yêu cầu Grub2Win và thao tác loopback/chainload cẩn thận để đảm bảo khởi động ổn định.




