![]()
Khi hệ thống multi-boot gặp trục trặc, một trong những vấn đề phổ biến nhất là grub menu not showing (menu GRUB không hiển thị). Sự cố này thường xảy ra khi người dùng cài đặt các bản phân phối Linux như Endeavour OS bên cạnh các hệ điều hành khác, đặc biệt khi sử dụng các hệ thống tập tin phức tạp như btrfs và công cụ quản lý ảnh chụp nhanh như snapper. Nếu bạn đang sử dụng trình quản lý khởi động bên thứ ba như rEFInd, việc chẩn đoán nguyên nhân lại càng trở nên khó khăn. Bài viết này sẽ cung cấp hướng dẫn chuyên sâu để xác định và giải quyết triệt để vấn đề này, đảm bảo bạn có thể truy cập đầy đủ các tùy chọn khởi động, bao gồm cả việc boot từ các ảnh chụp nhanh hệ thống.
![]()
Hiểu Rõ Nguyên Nhân: Tại Sao GRUB Bị Ẩn Khi Khởi Động?
Việc menu GRUB không xuất hiện có thể bắt nguồn từ nhiều nguyên nhân. Chủ yếu là do thiết lập thời gian chờ hoặc xung đột với trình quản lý khởi động cấp cao hơn. Trong môi trường đa hệ điều hành (multi-boot), luồng khởi động được phân cấp rõ ràng.
Luồng khởi động thông thường bắt đầu từ BIOS/UEFI. Sau đó nó chuyển quyền điều khiển sang trình quản lý khởi động chính. Trong trường hợp của bạn, đó là rEFInd.
rEFInd chịu trách nhiệm nhận dạng và hiển thị tất cả các hệ điều hành/bootloader con. Khi bạn chọn Endeavour OS từ rEFInd, rEFInd sẽ chuyển quyền điều khiển sang bootloader của Endeavour OS, tức là GRUB.
Vấn đề là GRUB được thiết lập để bỏ qua bước hiển thị menu. Nó tự động boot vào mục mặc định sau một khoảng thời gian chờ rất ngắn.
Cấu Hình Mặc Định Khiến Menu GRUB Bị Ẩn
Các bản phân phối Linux hiện đại thường ưu tiên khởi động nhanh. Do đó, các thiết lập mặc định trong /etc/default/grub có thể ẩn menu. Các tham số chính cần xem xét là GRUB_TIMEOUT và GRUB_TIMEOUT_STYLE.
Nếu GRUB_TIMEOUT=0 hoặc GRUB_TIMEOUT_STYLE=hidden (hoặc countdown), menu sẽ chỉ hiển thị khi người dùng nhấn một phím cụ thể. Điều này giúp rút ngắn thời gian boot. Tuy nhiên, nó lại làm mất khả năng chọn các mục nâng cao, như boot từ snapper snapshots.
Xung Đột Giữa rEFInd Và GRUB
Trong kịch bản multi-boot, việc bạn đã sử dụng rEFInd càng làm phức tạp vấn đề. rEFInd đã hoạt động đúng vai trò của nó khi nhận diện được GRUB. Sự cố nằm ở cách GRUB được cấu hình để thực thi sau khi được rEFInd gọi.
Nếu rEFInd gọi trực tiếp kernel (bỏ qua GRUB), bạn sẽ thấy thông báo “Starting arch kernel…” ngay lập tức. Nếu rEFInd gọi tệp grubx64.efi nhưng GRUB vẫn không hiện, lỗi nằm chắc chắn trong cấu hình GRUB.
Chẩn Đoán Hệ Thống: Kiểm Tra Cấu Hình Cơ Bản
Trước khi can thiệp sâu, cần xác minh trạng thái của tệp cấu hình GRUB. Để làm điều này, bạn cần truy cập vào hệ thống Endeavour OS. Nếu bạn không thể boot vào, hãy sử dụng USB Live Environment (môi trường Live CD) và thực hiện chroot.
Bước 1: Kiểm Tra Cấu Hình /etc/default/grub
Mở terminal và sử dụng trình soạn thảo văn bản để xem tệp cấu hình chính.
sudo nano /etc/default/grubTìm kiếm và xác minh các dòng sau:
GRUB_TIMEOUT: Đây là thời gian (tính bằng giây) menu GRUB sẽ hiển thị.- Giá trị nên là một số nguyên dương, ví dụ:
GRUB_TIMEOUT=5.
- Giá trị nên là một số nguyên dương, ví dụ:
GRUB_TIMEOUT_STYLE: Kiểm soát cách timeout được xử lý.- Nếu là
hiddenhoặccountdown, GRUB sẽ cố gắng ẩn menu. - Hãy đặt thành:
GRUB_TIMEOUT_STYLE=menu.
- Nếu là
GRUB_DEFAULT: Xác định mục khởi động mặc định. Thường là0hoặcsaved.
Đảm bảo rằng thiết lập của bạn cho phép hiển thị menu:
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"Bước 2: Tái Tạo Cấu Hình GRUB
Sau khi chỉnh sửa /etc/default/grub, bạn phải tạo lại tệp cấu hình khởi động chính:
sudo grub-mkconfig -o /boot/grub/grub.cfgLệnh này đọc các thiết lập mới và tạo ra tệp /boot/grub/grub.cfg. Tệp này chứa tất cả các mục khởi động, bao gồm cả các mục đặc biệt từ snapper (nếu cấu hình snap-pac và btrfs-grub hoạt động đúng).
Kiểm Tra Đầu Ra Của grub-mkconfig
Quan sát đầu ra của lệnh grub-mkconfig. Đảm bảo rằng nó nhận diện được các ảnh chụp nhanh (snapshots) của btrfs. Nếu đầu ra hiển thị các mục menu cho snapshots, điều đó xác nhận rằng hệ thống snapper-support của bạn đang hoạt động về mặt logic.
Found snapshot entry 'snapshot_name' for Endeavour OSNếu các mục này xuất hiện, vấn đề không phải do thiếu mục, mà do menu không được hiển thị.
Giải Pháp 1: Buộc Hiển Thị Menu GRUB Bất Kể Thiết Lập
Trong nhiều trường hợp, việc chỉnh sửa /etc/default/grub là đủ. Tuy nhiên, nếu hệ thống vẫn boot thẳng vào Display Manager (LightDM), có thể có một thiết lập ẩn khác đang ghi đè.
Điều Chỉnh Thông Số GRUB_DISABLE_OS_PROBER
Một số hệ thống hiện đại tắt os-prober theo mặc định. Mặc dù điều này không trực tiếp gây ẩn menu GRUB của hệ điều hành hiện tại, nó có thể ảnh hưởng đến cách GRUB tương tác với các bootloader khác. Đảm bảo nó không được thiết lập để vô hiệu hóa:
GRUB_DISABLE_OS_PROBER=falseSử Dụng Phím Tắt Buộc Hiện Menu
Nếu bạn đã đặt GRUB_TIMEOUT=5 và GRUB_TIMEOUT_STYLE=menu, nhưng vẫn thấy màn hình đen với dòng “Starting Arch kernel…”, hãy thử nhấn và giữ phím SHIFT hoặc phím ESC ngay sau khi rEFInd chuyển quyền điều khiển. Việc này có thể buộc GRUB hiển thị menu trước khi hết thời gian chờ.
Giải Pháp 2: Xử Lý Tương Tác Giữa rEFInd và GRUB
Trong môi trường multi-boot, đặc biệt trên iMac cũ, việc sử dụng rEFInd là cần thiết. Tuy nhiên, cần đảm bảo rEFInd gọi đúng tệp grubx64.efi và không gọi trực tiếp kernel Linux.
Xác Định Cách rEFInd Gọi Endeavour OS
Nếu rEFInd được cấu hình để gọi trực tiếp kernel của Arch/Endeavour OS (thường được thực hiện thông qua tệp refind_linux.conf), nó sẽ hoàn toàn bỏ qua GRUB. Đây là lý do bạn thấy thông báo “Starting arch kernel…” và sau đó là LightDM.
Bạn cần xác minh rằng mục khởi động Endeavour OS trong rEFInd đang gọi tệp EFI của GRUB. Tệp này thường nằm trong phân vùng EFI của Endeavour OS (hoặc phân vùng EFI của Mac, tùy thuộc vào cách cài đặt):
/EFI/EndeavourOS/grubx64.efiNếu rEFInd tạo ra nhiều mục cho Endeavour OS, hãy chọn mục có nhãn rõ ràng là “Boot using GRUB” hoặc tương tự.
Để kiểm tra cấu hình rEFInd, bạn có thể chỉnh sửa tệp refind.conf (thường nằm trên phân vùng EFI của Mac) hoặc kiểm tra các mục tự động phát hiện.
Đảm bảo rằng rEFInd không sử dụng các tùy chọn scanfor để tìm kiếm kernel trực tiếp (mà chỉ tìm kiếm bootloaders).
Tăng Độ Trễ Khởi Động (Hack EFI)
Đôi khi, GRUB khởi động quá nhanh sau khi được rEFInd gọi, khiến màn hình không kịp nhận lệnh hiển thị menu. Một giải pháp tạm thời nhưng hiệu quả là thêm một độ trễ nhỏ vào tập lệnh khởi động (script) được rEFInd sử dụng để gọi GRUB.
Tuy nhiên, cách sạch sẽ nhất là đảm bảo GRUB được cấu hình để chờ người dùng (như đã mô tả ở Giải Pháp 1).
Trong quá trình xây dựng nội dung này, chúng tôi đã tham khảo hàng loạt cấu hình hệ thống từ các diễn đàn chuyên ngành. Nếu bạn cần thêm thông tin về các địa điểm công nghệ hoặc các dịch vụ liên quan tại Hà Nội, bạn có thể truy cập hanoidep.vn để tìm kiếm các bài đánh giá chi tiết và cập nhật.
Trường Hợp Đặc Biệt: Snapper, Btrfs và Các Ảnh Chụp Nhanh
Bạn đã đề cập đến việc sử dụng btrfs, snapper-support, và snap-pac. Đây là một cấu hình tuyệt vời cho khả năng phục hồi hệ thống, nhưng nó đòi hỏi GRUB phải hiển thị menu con (submenu) chứa các ảnh chụp nhanh (snapshots).
Đảm Bảo Menu Con Được Kích Hoạt
Khi snap-pac tạo một ảnh chụp nhanh, nó sử dụng hook để chạy grub-mkconfig. Các mục snapshots sẽ nằm trong một menu con.
Nếu menu GRUB chính bị ẩn, hiển nhiên bạn không thể thấy menu con.
Để giải quyết, bạn cần buộc GRUB luôn hiển thị menu chính, ngay cả khi nó chỉ có một vài mục (mục khởi động chính và mục cài đặt nâng cao).
Sử Dụng GRUB_FORCE_DEFAULT_SUBMENU (Nếu Có)
Một số bản phân phối dựa trên Arch, bao gồm Endeavour OS, có thể thiết lập GRUB_FORCE_DEFAULT_SUBMENU trong /etc/default/grub.
Nếu tham số này được sử dụng, GRUB sẽ tự động vào menu con nếu mục mặc định (ví dụ: mục kernel mới nhất) là một submenu (thường là trường hợp của Btrfs/Snapper).
Để tránh điều này và buộc menu chính hiển thị trước:
- Đảm bảo bạn đã đặt
GRUB_TIMEOUT_STYLE=menu. - Kiểm tra và xóa hoặc comment dòng
GRUB_FORCE_DEFAULT_SUBMENUnếu nó tồn tại và được thiết lập làtrue.
Sau khi chỉnh sửa, luôn nhớ chạy:
sudo grub-mkconfig -o /boot/grub/grub.cfgCác Bước Khắc Phục Nâng Cao (Sử Dụng Chroot)
Nếu các giải pháp trên không hiệu quả và bạn không thể khởi động vào hệ thống Linux của mình, bạn cần sử dụng phương pháp chroot để sửa chữa. Phương pháp này đặc biệt quan trọng nếu cấu hình EFI của bạn bị hỏng hoặc tệp GRUB EFI bị ghi đè.
Bước 1: Khởi Động Bằng Live USB và Mount Các Phân Vùng
Khởi động hệ thống của bạn bằng USB Live Environment (ví dụ: Endeavour OS Live USB).
Xác định phân vùng root (/) và phân vùng EFI (/boot/efi) của Endeavour OS. (Giả sử phân vùng root là /dev/sdaX và EFI là /dev/sdaY).
sudo mount /dev/sdaX /mnt # Mount phân vùng root
sudo mkdir /mnt/boot/efi # Tạo điểm mount cho EFI
sudo mount /dev/sdaY /mnt/boot/efi # Mount phân vùng EFILưu ý: Nếu bạn sử dụng btrfs, bạn cần mount phân vùng btrfs vào /mnt và sau đó mount subvolume root (thường là @) vào /mnt.
Bước 2: Thực Hiện Chroot
Bây giờ, bạn sẽ chuyển môi trường làm việc sang hệ điều hành đã cài đặt.
sudo arch-chroot /mntBạn đang ở trong môi trường Endeavour OS bị lỗi. Bây giờ bạn có thể thực hiện tất cả các lệnh sửa chữa.
Bước 3: Sửa Chữa Cấu Hình GRUB
Trong môi trường chroot, bạn có thể lặp lại các bước chỉnh sửa /etc/default/grub và chạy grub-mkconfig.
nano /etc/default/grub # Chỉnh sửa như hướng dẫn ở trên
grub-mkconfig -o /boot/grub/grub.cfgBước 4: Tái Cài Đặt GRUB vào EFI
Nếu tệp bootloader EFI bị hỏng, bạn cần cài đặt lại GRUB vào phân vùng EFI. Điều này đặc biệt quan trọng trong môi trường multi-boot.
Trước tiên, xác định ổ đĩa vật lý của bạn (ví dụ: /dev/sda). Không chỉ định số phân vùng.
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=EndeavourOS --recheckLệnh này sẽ ghi lại tệp EFI của Endeavour OS vào /boot/efi/EFI/EndeavourOS/grubx64.efi.
Bước 5: Cập Nhật efibootmgr (Tùy chọn)
Mặc dù bạn đã sử dụng rEFInd, việc kiểm tra xem efibootmgr có nhận diện được mục khởi động mới của Endeavour OS không là điều cần thiết.
efibootmgr -vĐảm bảo rằng mục EndeavourOS tồn tại và trỏ đến tệp EFI đã cài đặt.
Nếu tất cả các bước trên đã hoàn thành, thoát khỏi chroot và khởi động lại:
exit
rebootBây giờ, khi bạn chọn Endeavour OS từ menu rEFInd, GRUB sẽ có đủ thời gian để hiển thị menu khởi động, cho phép bạn truy cập vào các tùy chọn nâng cao và boot từ snapper snapshots.
Tóm Tắt Các Điểm Kiểm Tra Quan Trọng
Việc menu GRUB không hiển thị (grub menu not showing) trong môi trường multi-boot phức tạp thường là do sự kết hợp của thiết lập thời gian chờ quá ngắn và xung đột giữa các trình quản lý khởi động. Nguyên tắc cơ bản là buộc GRUB hiển thị menu bằng cách chỉnh sửa tham số GRUB_TIMEOUT=5 và GRUB_TIMEOUT_STYLE=menu trong tệp /etc/default/grub. Bạn phải đảm bảo rằng grub-mkconfig được chạy sau mỗi lần thay đổi để cập nhật tệp /boot/grub/grub.cfg. Cuối cùng, nếu sử dụng rEFInd, hãy xác nhận rằng rEFInd đang gọi đúng bootloader EFI của GRUB chứ không phải trực tiếp gọi kernel, từ đó giữ được tính năng boot từ các ảnh chụp nhanh của snapper qua giao diện GRUB.
Ngày Cập Nhật: Tháng 11 17, 2025 by Ngô Hồng Thái