Sử dụng Grub2 để tạo USB boot đa năng là cách dễ dàng nhất để tùy biến, đầy đủ chức năng và dễ dàng chia sẽ cho người khác.

Tạo USB boot đa năng

Nếu bạn đang dùng Ubuntu, Linux Mint hay Debian, hoặc để biết thêm chi tiết về Grub2 vui lòng tham khảo cách cài đặt Grub2 trên Ubuntu Linux.

Ở bài viết trước, mình đã hướng dẫn bạn cài đặt Grub2 trên Windows bằng lệnh grub-install. Ở bài viết này, mình sẽ hướng dẫn bạn sử dụng lệnh grub-mkimage để tự tạo usb boot đa năng theo cách của riêng mình. Bằng cách tạo các tập tin g2ldr, core.img, bootx64.efibootia32.efi, bạn sẽ dễ dàng tùy biến và chia sẽ sản phẩm của bạn cho người khác. Grub2 hỗ trợ cả hai chuẩn UEFI và Legacy, sử dụng Grub2 để tạo USB boot đa năng có lẽ là một lựa chọn thích hợp nhất.

Khi sử dụng lệnh grub-mkimage, bạn có thể tùy chỉnh đường dẫn /boot/grub của Grub2, tùy biến tập tin bootx64.efi và bootia32.efi.

Cách tạo USB boot đa năng với Grub2
Với Grub2, bạn có thể dễ dàng tạo USB boot đa năng, kể cả ổ cứng (HDD) và ổ cứng di động (HDDBox).

Xem video hướng dẫn cách tạo USB boot đa năng với Grub2 để chia sẽ cho người khác

Tải Grub2 cho Windows

Bạn cần phải chuẩn bị một số bước sau đây trước khi bắt đầu:

  1. Tải Grub2 phiên bản mới nhất dành cho Windows ở đây. Phiên bản mới nhất của Grub2 là grub-2.02nhưng trên Windows, chỉ có phiên bản grub-2.02~beta2 được hỗ trợ.
  2. Giải nén grub-2.02-for-windows.zip vào bất cứ thư mục nào mà bạn muốn, ví dụ C:\grub2.
  3. Mở Command Prompt bằng quyền Admin, sau đó di chuyển đến thư mục mà bạn đã giải nén tập tin Grub2 ở bước 2. Sử dụng lệnh sau để di chuyển đến thư mục đó:
    cd C:\grub2

    Bạn cần thay đổi tên thư mục phù hợp cho bạn. Vui lòng không đóng cửa sổ này để có thể tiếp tục sử dụng lệnh ở các bước sau.

Các tập tin hình ảnh

Không những Grub2 mà bất cứ một bootloader, hệ điều hành hay phần mềm nào cũng có các tập tin để thực hiện các công việc của nó. Đối với Grub2, các tập tin hình ảnh bao gồm: một loạt các hình ảnh khởi động để bắt đầu GRUB theo những cách khác nhau, một hình ảnh hạt nhân, và một tập hợp các mô-đun đó được kết hợp với hình ảnh hạt nhân để tạo thành một hình ảnh cốt lõi. Để biết thêm chi tiết về các tập tin trong Grub2, vui lòng xem bài viết về GRUB image files.

Trong bài viết này, mình chỉ đề cập tới các tập tin quan trọng như các tập tin mô-đun (.mod), boot.img, core.img, bootx64.efi và bootia32.efi.

Trên PC BIOS, Grub2  cần phải có hai tập tin boot.img và core.img được ghi trên ổ đĩa để nó có thể khởi động. Đối với chuẩn UEFI, Grub2 cần một tập tin EFI để có thể khởi động, mặc định là /EFI/BOOT/bootx64.efi (64bit) hoặc /EFI/BOOT/bootia32.efi (32bit). Các tập tin mô-đun cần phải tải trước khi Grub2 có thể thực hiện các tính năng tương ứng. Ví dụ, để đọc một ổ cứng kiểu GPT, mô-đun part_gpt cần phải tải trước. Vì vậy trong bài viết này mình sẽ hướng dẫn bạn tạo các tập tin ở trên.

Để biết thêm thông tin về lệnh grub-mkimage, sử dụng lệnh sau:

grub-mkimage --help

Nhúng tập tin cấu hình

Grub2 cho phép bạn nhúng một tập tin cấu hình vào trong các tập tin khởi động. Trong khi khởi động, Grub2 sẽ thực thi tập tin cấu hình này. Ở đây mình sẽ nhúng tập tin cấu hình này để thực hiện một số lệnh sau:

  1. Quét tất cả ổ cứng để tìm kiếm một tập tin được chỉ định sẵn và thiết lập phân vùng gốc (root) cho Grub2.
  2. Từ phân vùng gốc, chỉ định thư mục chứa Grub2 (prefix).

Ví dụ, bạn muốn phân vùng có chứa tập tin /AIO/sitecuatui.com.html làm phân vùng gốc (root) và thư mục chứa Grub2 (prefix) là /AIO/grub2. Bạn sẽ viết một tập tin cấu hình (ví dụ: load.cfg) có nội dung như sau:

search.file /AIO/sitecuatui.com.html root
set prefix=/AIO/grub2

Như vậy, bạn đã có một tập tin cấu hình có thể được nhúng vào các tập tin khởi động của Grub2 trong các bước tiếp theo.

Tạo tập tin core.img

Core.img là gì? Đây là tập tin cần thiết để Grub2 có thể khởi động trên chuẩn Legacy BIOS (i386-pc). Để tạp tập tin core.img, sử dụng lệnh sau:

grub-mkimage --prefix /AIO/grub2 --output core.img --format i386-pc --compression auto --config load.cfg biosdisk part_msdos ext2 fat ntfs search_fs_file

Sau khi hoàn thành, chép tập tin core.img vào thư mục i386-pc.

Tạo tập tin bootx64.efi

Bootx64.efi là gì? Đây là tập tin cần thiết để Grub2 có thể khởi động trên chuẩn UEFI 64bit (x86_64-efi). Để tạp tập tin bootx64.efi, sử dụng lệnh sau:

grub-mkimage --prefix /AIO/grub2 --output bootx64.efi --format x86_64-efi --compression auto --config load.cfg part_gpt part_msdos ext2 fat ntfs hfsplus search_fs_file

Sau khi hoàn thành, chép tập tin bootx64.efi vào thư mục /EFI/BOOT.

Tạo tập tin bootia32.efi

Bootia32.efi là gì? Đây là tập tin cần thiết để Grub2 có thể khởi động trên chuẩn UEFI 32bit (i386-efi). Để tạp tập tin bootia32.efi, sử dụng lệnh sau:

grub-mkimage --prefix /AIO/grub2 --output bootia32.efi --format i386-efi --compression auto --config load.cfg part_gpt part_msdos ext2 fat ntfs hfsplus search_fs_file

Sau khi hoàn thành, chép tập tin bootia32.efi vào thư mục /EFI/BOOT.

Giải thích các lệnh trên

  • –prefix: tên thư mục chứa Grub2. Giá trị của thông số này nên trùng với giá trị của set prefix trong tập tin cấu hình (load.cfg).
  • –output: tên tập tin sẽ được tạo ra.
  • –format: định dạng của tập tin.
  • –config: khai báo tên tập tin cấu hình mà bạn muốn nhúng vào tập tin khởi động. Ở đây là load.cfg, bạn có thể thay đổi tên tập tin tùy ý và khai báo cho phù hợp.

Tập tin mô-đun

Tùy thuộc vào chế độ mà Grub2 đã khởi động, nó sẽ sử dụng các tập tin mô-đun tương ứng với chế độ đó. Ở chuẩn Legacy BIOS, Grub2 sẽ sử dụng mô-đun trong thư mục i386-pc, ở chuẩn UEFI 64bit, Grub2 sẽ sử dụng mô-đun trong thư mục x86_64-efi và ở chế độ UEFI 32bit, Grub2 sẽ sử dụng mô-đun trong thư mục i386-efi.

Các mô-đun là cần thiết để Grub2 có thể hoạt động. Ví dụ trong tập tin cấu hình load.cfg, để lệnh search.file hoạt động, bạn cần nhúng mô-đun search_fs_file. Để có thể đọc được các ổ cứng kiểu GPT, MBR, phân vùng NTFS, FAT32, HFSPLUS, Ext4… thì bạn cần phải nhúng các mô-đun tương ứng là part_gpt, part_msdos, ext2, fat, ntfs, hfsplus….

Ở các lệnh trên, tên mô-đun được nhúng vào tập tin khởi động của Grub2 sẽ được khai báo ở cuối cùng, ví dụ ở trên, các mô-đun được khai báo ở phía sau thông số --config load.cfg.

Tập tin cấu hình

Grub2 có thể tiếp tục thực thi nhiều tập tin cấu hình khác nằm trên ổ đĩa của bạn. Mặc định là tập tin grub.cfg nằm trong thư mục prefix mà bạn đã khai báo, ví dụ ở trên là  /AIO/grub2/grub.cfg. Tại sao không nhúng nó vào tập tin khởi động? Vì để thuận tiện cho việc thêm, xóa và chỉnh sửa các cấu hình và menu.

Nếu bạn không biết tạo tập tin cấu hình, bạn có thể tải tập tin grub.cfg của AIO Boot và chép vào /AIO/grub2/grub.cfg. Sau đó tạo tập tin custom.cfg trong cùng thư mục và chép các menu của bạn vào đó.

Các tập tin khác

Grub2 còn có một số tập tin quan trọng khác. Nếu bạn muốn sử dụng tiếng Việt cho Grub2, bạn cần chép tập tin locale/vi/grub.mo đến locale/vi.mo và khai báo lệnh set lang=vi trong tập tin cấu hình. Các tập tin giao diện sẽ nằm trong thư mục themes và phông chữ mặc định của Grub2 là unicode.pf2.

Cấu trúc thư mục:

Sau khi đã có các tập tin, ở ví dụ trên thì Grub2 sẽ có cấu trúc của các thư mục và tập tin như sau:

/AIO/sitecuatui.com.html
/AIO/grub2/
	-- i386-efi
	-- i386-pc/
		-- boot.img
		-- core.img
	-- locale
	-- themes
	-- x86_64-efi
	-- unicode.pf2
/EFI/BOOT/
	-- bootx64.efi
	-- bootia32.efi

Như vậy là bạn đã có tất cả các tập tin cần thiết để tạo USB boot đa năng. Bước tiếp theo là sử dụng chúng.

Cài đặt Grub2

Sau khi đã có các tập tin khởi động, mô-đun và các tập tin cần thiết của Grub2, giờ là lúc bắt đầu sử dụng hoặc chia sẽ sản phẩm của bạn. Bạn chỉ cần thực hiện 2 bước sau đây là có thể sử dụng sản phẩm của bạn.

Chép tập tin

Để Grub2 có thể hoạt động, chép toàn bộ thư mục và tập tin theo cấu trúc thư mục ở trên vào bất cứ phân vùng nào mà bạn muốn. Bạn có thể chép vào USB, ổ cứng, ổ cứng di động hoặc thẻ nhớ…

Sau khi hoàn thành bước này, bạn sẽ khởi động được Grub2 ở chuẩn UEFI. Đối với chuẩn Legacy BIOS, bạn cần phải thực hiện bước tiếp theo.

Cài đặt boot

Để có thể khởi động Grub2 ở chuẩn Legacy BIOS, bạn cần sử dụng 2 tập tin boot.imgcore.img trong thư mục /AIO/grub2/i386-pc/.

Cách 1:

Nối 2 tập tin boot.imgcore.img lại thành 1 tên bất kỳ, ví dụ g2ldr:

F:
cd F:\AIO\grub2\i386-pc\
copy /b boot.img+core.img g2ldr

Thay đổi ổ đĩa F: ở lệnh trên cho phù hợp với bạn.

Sau khi đã có tập tin g2ldr, sử dụng BOOTICE để Restore MBR như hình dưới:

Restore MBR với BOOTICE
Tính năng này chỉ hoạt động trên ổ cứng kiểu MBR, không hoạt động trên ổ cứng kiểu GPT.

Cách 2:

Sử dụng gói grub-bios-setup.exe. Mở Command Prompt bằng quyền Admin và sử dụng lệnh sau:

grub-bios-setup.exe --directory=F:\AIO\grub2\i386-pc --boot-image=boot.img --core-image=core.img //./PHYSICALDRIVE1

Thay đổi ổ đĩa F: ở lệnh trên cho phù hợp với bạn.

  • Thông số của --directory= được tô màu đỏ là thư mục chứa 2 tập tin boot.img và core.img.
  • Số 1 trong //./PHYSICALDRIVE1 được tô màu xanh số thứ tự của ổ cứng. Số thứ tự của ổ cứng có thể xác định trong Disk Management như hình dưới.

    Disk Management trong Windows
    Các ổ cứng và USB sẽ được gắn số thứ tự. Bạn chỉ cần lấy con số này để tiếp tục.

Như vậy là bạn đã hoàn thành tất cả quá trình tạo USB boot đa năng với Grub2. Từ giờ bạn có thể tự làm usb boot và chia sẽ sản phẩm của bạn cho bạn bè nhé.

Bạn có thể lấy các tập tin cấu hình được viết sẵn của AIO Boot để sử dụng. Chúc thành công!

Tham gia cuộc thảo luận

12 Bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

  1. chào bạn, mình làm tương tự để tạo file .efi mà boot bị lỗi unaligned pointer khi boot.
    bạn cho mình hỏi aioboot dùng file .efi do bạn tự tạo trên môi trường windows hay linux, source tải từ link nào bạn. cảm ơn bạn nghen

      1. mình cũng tải source từ link trên, câu lệnh cũng xài y chang trên bài viết của bạn ngoại trừ thay đổi đường dẫn chút xíu. load được vào grub2 rồi nhưng khi configfile grub2.cfg toàn báo lỗi, thậm chí những lệnh cơ bản như loadfont nó cũng bảo k có command loadfont, gõ help hay echo, ls đều báo lỗi unaligned pointer.
        chắc do source cho bản windows còn bug, để mình thử build trên linux xem sao. cảm ơn bạn.

          1. ý mình là tạo file .efi trên môi trường windows á bạn, tạo .efi xong load vô grub2 được nhưng tiếp đến nó load file .cfg mà có mấy lệnh ls, echo là nó lỗi báo unaligned pointer

          2. bạn ơi, cho mình xin danh sách các module bạn nhúng vào file .efi đợc không. mình tập tành tạo .efi mà k rành cái nào nên nhúng. thấy của bạn đầy đủ nên xin tham khảo. cảm ơn bạn

          3. Bạn cần dùng mô-đun nào thì nhúng cái đó hoặc nhúng hết.
            Của mình:

            'chain' 'datetime' 'priority_queue' 'affs' 'afs' 'bfs' 'btrfs' 'cbfs' 'cpio' 'cpio_be' 'iso9660' 'minix' 'minix2' 'minix2_be' 'minix3' 'minix3_be' 'minix_be' 'newc' 'nilfs2' 'odc' 'procfs' 'reiserfs' 'romfs' 'sfs' 'squash4' 'lzopio' 'xzio' 'tar' 'archelp' 'udf' 'ufs1' 'ufs1_be' 'ufs2' 'probe' 'regexp' 'jfs' 'xfs' 'zfs' 'hfs' 'echo' 'minicmd' 'configfile' 'gfxterm_background' 'video_colors' 'bitmap_scale' 'png' 'bitmap' 'gfxterm' 'all_video' 'video_cirrus' 'video_bochs' 'efi_uga' 'efi_gop' 'video_fb' 'font' 'video' 'loadenv' 'disk' 'test' 'normal' 'gzio' 'bufio' 'gettext' 'terminal' 'crypto' 'extcmd' 'boot' 'search_fs_file' 'hfsplus' 'ntfs' 'fat' 'exfat' 'ext2' 'fshelp' 'part_msdos' 'part_gpt' 'cat' 'efifwsetup' 'efinet' 'gfxmenu' 'halt' 'jpeg' 'keystatus' 'loopback' 'linux' 'lsefi' 'lsefimmap' 'lsefisystab' 'lssal' 'memdisk' 'part_apple' 'password_pbkdf2' 'reboot' 'search' 'search_fs_uuid' 'search_label' 'sleep' 'true' 'zfscrypt' 'zfsinfo' 'ls' 'read' 'all_video' 'bsd' 'ntfscomp'