Mục tiêu
Tạo một thiết bị USB có khả năng khởi động chứa nhiều bản phân phối Linux.
Yêu cầu
● Một thiết bị USB có dung lượng đủ để chứa nhiều file ISO
● Quyền root để sửa đổi các phân vùng của thiết bị và cài đặt grub
Độ khó
Trung bình
Giới thiệu
Khả năng chạy một hệ điều hành trực tiếp từ phương tiện cài đặt mang lại nhiều lợi ích, như việc thử nghiệm các bản phân phối, sử dụng nó để sao lưu hoặc sửa chữa một hệ thống hiện có. Thông thường, để tạo phương tiện khởi động, người dùng sẽ ghi một image hệ thống lên đó bằng lệnh dd hoặc các công cụ chuyên dụng. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo một thiết bị USB đa khởi động, cho phép chứa nhiều image của các bản phân phối khác nhau, mang đến sự linh hoạt tối đa khi cần sử dụng nhiều hệ điều hành từ một thiết bị duy nhất.
Để tạo USB đa khởi động với Linux, bạn cần chuẩn bị kỹ lưỡng và chọn công cụ phù hợp. Nếu bạn muốn tối ưu hiệu suất cho các dự án công nghệ, hãy khám phá dịch vụ VPS Việt Nam tại DataOnline.vn để trải nghiệm máy chủ mạnh mẽ, ổn định.
Một vài điều về BIOS vs UEFI
UEFI (Unified Extensible Firmware Interface) là firmware hiện đại được tạo ra để thay thế cho BIOS cũ (Basic Input Output System). Phần lớn các bản phân phối Linux mới đây có thể khởi động ở cả hai chế độ mà không gặp vấn đề: trình cài đặt sẽ tự động điều chỉnh hành vi của nó cho phù hợp.
Hai loại firmware này, theo tiêu chuẩn, được liên kết với một kiểu bố trí bảng phân vùng cụ thể: UEFI đi kèm với GPT, trong khi BIOS đi kèm với msdos. Tuy nhiên, các liên kết này không phải là bắt buộc tuyệt đối, vì, ít nhất về lý thuyết, firmware UEFI có thể bắt đầu quá trình khởi động từ bảng phân vùng msdos và hệ thống BIOS truyền thống cũng có thể làm điều tương tự từ một ổ đĩa được phân vùng theo GPT.
Trong trường hợp đầu tiên, phân vùng EFI phải là phân vùng đầu tiên trên ổ đĩa và được định dạng với hệ thống tập tin fat32; trong trường hợp thứ hai, phải có một phân vùng khởi động BIOS không có hệ thống tập tin nào trên đó, cần để chứa grub stage 1.5, vì trên bố trí GPT khoảng cách giữa master boot record và phân vùng đầu tiên không tồn tại (đây là nơi grub stage thường được cài đặt).
Chúng ta sẽ chuẩn bị thiết bị của mình bằng cách sử dụng bố trí msdos truyền thống, cài đặt bootloader grub ở cả chế độ EFI và legacy để có thể khởi động các bản phân phối ở cả chế độ UEFI và BIOS.
Chuẩn bị thiết bị
Điều đầu tiên chúng ta cần làm là chuẩn bị thiết bị của mình. Chúng ta sẽ tạo hai phân vùng, theo thứ tự:
● Một phân vùng EFI
● Một phân vùng dữ liệu
Phân vùng đầu tiên cần thiết để khởi động ở chế độ UEFI, vì đây là nơi cài đặt grub-efi. Phân vùng này phải được định dạng với hệ thống tập tin fat32. Lý thuyết cho rằng, cài đặt này có thể hoạt động chỉ với phân vùng này, vì chúng ta cũng có thể sử dụng nó để lưu trữ image của các bản phân phối muốn sử dụng. Tuy nhiên, trong trường hợp đó chúng ta sẽ bị giới hạn, vì fat32 không hỗ trợ file lớn hơn 4GB, và một số file ISO có thể vượt quá kích thước này.
Phân vùng thứ hai sẽ được định dạng với hệ thống tập tin được grub hỗ trợ, và sẽ chứa các image cũng như các file cấu hình của grub.
Với mục đích của hướng dẫn này, tôi giả định rằng thiết bị cần chuẩn bị là /dev/sdb.
Bảng phân vùng và phân vùng EFI
Điều đầu tiên cần làm là tạo bảng phân vùng msdos trên thiết bị:
Sau bước này, chúng ta có thể tạo phân vùng EFI và định dạng nó với hệ thống tập tin fat32. Kích thước khuyến nghị cho phân vùng này là 550 MiB: trên các phân vùng nhỏ hơn, chúng ta có thể nhận được lỗi như “not enough clusters for 32 bit FAT”:
Chúng ta sau đó sẽ tiến hành kích hoạt các cờ esp và boot:
Cuối cùng, chúng ta phải tạo hệ thống tập tin fat32:
Phân vùng dữ liệu
Phân vùng còn lại chúng ta cần tạo là phân vùng dữ liệu, nơi sẽ chứa các file ISO của các bản phân phối và các file cấu hình grub. Chúng ta có thể điều chỉnh kích thước của phân vùng này theo nhu cầu: càng lớn thì có thể chứa càng nhiều image. Ở đây, chúng ta sẽ sử dụng toàn bộ không gian còn lại trên thiết bị:
Chúng ta có thể định dạng phân vùng này với một trong các hệ thống tập tin mà grub hỗ trợ. Trong trường hợp này, tôi sẽ sử dụng ext4:
Tạo điểm gắn kết và gắn các phân vùng
Bước tiếp theo là gắn phân vùng EFI và phân vùng dữ liệu vào một vị trí nào đó trong hệ thống của chúng ta để có thể tạo các thư mục cần thiết trên đó, cài đặt grub và đặt các file ISO vào vị trí thích hợp:
Tạo điểm gắn kết
Cài đặt bootloader grub
Để thiết bị của chúng ta có thể hoạt động ở cả chế độ legacy và UEFI, chúng ta cần cài đặt grub và grub cho EFI. Trên Fedora, binary của grub được gọi là grub2 và để tạo cấu hình tùy chỉnh trên hệ thống UEFI, việc cài đặt gói grub2-efi-modules cũng cần thiết. Trên một số bản phân phối khác, tên của binary chỉ là “grub”:
Cài đặt grub2 cho chế độ legacy
Cài đặt grub cho EFI
Như bạn có thể thấy, trong cả hai trường hợp, chúng ta sử dụng /media/data/boot làm thư mục khởi động của grub. Thư mục này sẽ được tạo tự động khi các lệnh trên được thực thi và sẽ chứa các file cấu hình của grub.
Sao chép các image và tạo file grub.cfg
Để tạo hoặc cập nhật cấu hình grub trên một hệ thống Linux hiện đại, chúng ta thường chạy lệnh grub2-mkconfig, hoặc, trên các bản phân phối dựa trên Debian, là script bao bọc update-grub. Các công cụ này sẽ thực hiện các thao tác cần thiết một cách tự động.
Trong trường hợp của chúng ta, tuy nhiên, chúng ta sẽ tự tay tạo cấu hình một cách thủ công. Không phải tất cả các bản phân phối đều yêu cầu cùng một tập hợp chỉ thị, nhưng dưới đây chúng ta sẽ xem một số ví dụ chung. Đầu tiên, chúng ta nên tạo thư mục sẽ chứa các image của các bản phân phối:
Tùy chọn, chúng ta có thể muốn thay đổi quyền sở hữu của thư mục này để có thể di chuyển các image vào đó dễ dàng hơn. Giả sử uid và gid là 1000, chúng ta chạy:
Bây giờ, giả sử chúng ta muốn bao gồm image cài đặt netinstall của Fedora mới nhất vào hệ thống của mình. Đầu tiên, ta phải tải image về vào thư mục /media/data/boot/iso:
Sau khi tải xong, chúng ta phải thêm một mục cho nó vào file grub.cfg trong thư mục /media/data/boot/grub2. Vì đây là mục đầu tiên, nên file này cần được tạo mới:
Cấu trúc của mục khá đơn giản: ta đã định nghĩa biến isofile với giá trị là đường dẫn đến image của chúng ta. Grub có khả năng khởi động trực tiếp từ một file ISO, và đó là chức năng của lệnh loopback: trong ví dụ trên, image hệ thống sẽ được gắn và sẵn sàng trên thiết bị loop.
Dòng bắt đầu với linux chứa đường dẫn đến file vmlinuz (là file thực thi kernel), cùng với các chỉ thị khởi động khác. Trong đó, bạn có thể chú ý đến iso-scan/filename cần thiết để tìm file ISO trên ổ đĩa sử dụng đường dẫn đã chỉ định.
Cuối cùng, dòng bắt đầu với initrd chỉ định đường dẫn đến file initrd. Tất cả các đường dẫn này, rõ ràng, đều là tương đối so với thiết bị loop, do đó chúng được tiền tố bằng ký hiệu (loop).
Làm sao để biết các chỉ thị cần sử dụng trong trường hợp cụ thể?
Một cách là gắn image vào một vị trí nào đó trong hệ thống của bạn và kiểm tra các file trong thư mục isolinux. Tuy nhiên, các cấu hình có sẵn cũng đã được viết sẵn và dễ tìm trên mạng.
Ví dụ khác, bây giờ: chúng ta sẽ thêm image của bản phát hành Ubuntu mới nhất vào thiết bị khởi động của mình:
Bây giờ, chúng ta thêm mục vào file cấu hình:
Dưới đây là hình dạng của menu đa khởi động (multiboot menu) của chúng ta ở thời điểm này:
Kết luận
Trong bài hướng dẫn này, chúng ta đã tìm hiểu cách tạo một thiết bị USB đa khởi động, cho phép chứa nhiều image của các bản phân phối khác nhau. Cấu hình này hỗ trợ cả chế độ khởi động legacy và UEFI, giúp người dùng dễ dàng lựa chọn image hệ điều hành muốn khởi động thông qua menu GRUB.
Cấu hình grub.cfg
mà chúng tôi trình bày ở đây khá cơ bản và có thể được tùy chỉnh để thêm nhiều module hoặc điều chỉnh các thiết lập khác, chẳng hạn như thời gian chờ của GRUB. Để mở rộng và tìm hiểu thêm các khả năng của GRUB, việc tham khảo tài liệu chính thức của GRUB là một cách tuyệt vời để nắm bắt các tính năng nâng cao.
Khi tạo USB khởi động, việc chọn phần mềm như Ventoy hoặc Rufus rất quan trọng. Để chạy Linux mượt mà hơn trên môi trường chuyên nghiệp, hãy cân nhắc thuê máy chủ VPS chất lượng cao tại DataOnline.vn, đảm bảo tốc độ và bảo mật tối ưu.