Sau đợt cập nhật Grub trên EndeavourOS bị lỗi không thể khởi động máy hồi cuối tháng 8, mình bắt đầu cảm thấy lo lắng mỗi lần cập nhật hệ thống bằng lệnh yay
. Chẳng biết máy sẽ khởi động bình yên hay sẽ gặp lỗi trở lại. Do đó, mình đã tìm cách thay thế Grub bằng một giải pháp khác an toàn và ổn định hơn.
Theo tìm hiểu, mình có thể thay thế Grub bằng systemd-boot hoặc rEFInd. Cả hai đều là trình quản lý khởi động (boot manager) dành cho hệ thống UEFI. Giờ máy tính nào cũng dùng UEFI nên yên tâm dùng anh nào cũng được.
Mình có tìm thấy hướng dẫn cài đặt systemd-boot thay thế cho Grub trên EndeavourOS ở đây: [Tutorial] Convert to systemd-boot. Nhưng mới bấm vô xem đã thấy chóng mặt nhức đầu vì quá phức tạp.
Ngược lại, cách cài đặt rEFInd lại cực kỳ đơn giản. Chỉ cần 2 dòng lệnh là xong. Dưới đây là hướng dẫn cách đặt rEFInd trên EndeavourOS để thay thế cho Grub.
Mục Lục
1. Cài đặt rEFInd
Cài đặt package rEFInd vào hệ thống
yay -S refind
Code language: Nginx (nginx)
Kích hoạt refind làm Boot Loader mặc định
sudo refind-install
Code language: Nginx (nginx)
Vậy là xong rEFInd đẫ được cấu hình làm bootloader mặc định của máy tính. Bạn có thể khởi động lại máy và thấy rEFInd hiện ra với giao diện tương tự như sau
rEFInd sẽ tự động phát hiện ra các hệ điều hành đang cài đặt trên máy để hiện ra lựa chọn khi khởi động.
2. Xóa Grub khỏi hệ thống
Mặc dù rEFInd đã trở thành trình boot manager mặc định của máy, nhưng khi chọn khởi động vào EndeavourOS, Grub vẫn hiện ra xen vào giữa.
Mình sẽ xóa sạch Grub khỏi hệ thống bằng lệnh sau
sudo pacman -Rs grub-tools
sudo pacman -Rs grub2-theme-endeavouros
sudo pacman -Rs grub
Code language: Nginx (nginx)
Tiếp theo, xóa các thư mục của grub trong /boot
sudo rm -rf /boot/grub
sudo rm -rf /boot/efi/EFI/endeavour*
Code language: Nginx (nginx)
Và xóa grub khỏi EFI Boot Manager
sudo efibootmgr
Code language: Nginx (nginx)
Tìm dòng tương ứng với Grub Loader của EndeavourOS và xóa bằng lệnh sau.
sudo efibootmgr -b 0001 -B
Code language: Nginx (nginx)
Chú ý: Bạn cần thay thế 0001
bằng con số XXXX
tương ứng của dòng BootXXXX
: EndeavourOS
Giờ khởi động lại, chọn vào mục Linux. Bạn sẽ thấy máy khởi động thẳng vào EndeavourOS, không còn bị Grub can thiệp nữa.
3. Chỉnh sửa cấu hình
Bước này không bắt buộc, mình thao tác thêm để giúp tinh gọn giao diện của rEFInd.
Chỉnh sửa file cấu hình refind.conf
sudo nano /boot/efi/EFI/refind/refind.conf
Code language: Nginx (nginx)
Mình xóa hết tất cả, thay bằng nội dung sau và lưu lại.
# Chỉnh sửa thời gian chờ
timeout 2
# Hiển thị thêm nút Shutdown, Reboot
showtools shutdown,reboot
# Thiết lập cho rEFInd chỉ tìm thiết bị khởi động từ ổ đĩa quang, ổ cứng ngoài và danh mục khai báo
scanfor manual,external,optical
# Danh mục khởi động của EndeavourOS
menuentry "EndeavourOS" {
icon EFI/refind/icons/os_endeavourOS.png
volume "root"
loader /boot/vmlinuz-linux
initrd /boot/initramfs-linux.img
options "ro root=UUID=ce0fb873-89a6-4304-9eec-011e390489fc"
}
# Danh mục khởi động của Windows 10
menuentry "Windows 10" {
loader \EFI\Microsoft\Boot\bootmgfw.efi
#disabled
}
Code language: Nginx (nginx)
Bạn cần thay thế đoạn UUID=ce0fb873-89a6-4304-9eec-011e390489fc
bằng UUID=<UUID-của-phân-vùng-cài-EndeavourOS>
. Tìm UUID bằng lệnh sudo blkid
.
/dev/nvme0n1p5: UUID="ce0fb873-89a6-4304-9eec-011e390489fc" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="root" PARTUUID="6968a96d-514d-714e-9933-0857fcee9f59"
/dev/nvme0n1p3: BLOCK_SIZE="512" UUID="AA5E4D215E4CE821" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="0d2afad1-7cbc-4f57-8f75-a1858d1ae448"
/dev/nvme0n1p1: UUID="C847-0E25" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="62285a16-5dd2-4d78-9127-b2304b80b5fe"
/dev/nvme0n1p4: BLOCK_SIZE="512" UUID="180E60130E5FE870" TYPE="ntfs" PARTUUID="c2e8d3ed-c1ab-49a0-865d-6b71a5718dca"
/dev/nvme0n1p2: PARTLABEL="Microsoft reserved partition" PARTUUID="eab43a5d-e1cc-4d19-accd-45638ddbb0ae"
Code language: JavaScript (javascript)
Copy icon của EndeavourOS vào thư mục icons của rEFInd. Icon này sẽ hiển thị trong Boot Loader khi khởi động máy.
sudo cp /usr/share/endeavouros/EndeavourOS-icon.png /boot/efi/EFI/refind/icons/os_endeavourOS.png
Code language: Nginx (nginx)
4. Chỉnh sửa giao diện
Muc này cũng không bắt buộc, mình làm thêm để hiển thị Boot manager cho đẹp.
Mình dùng theme rEFInd-minimal ở đây: https://github.com/evanpurkhiser/rEFInd-minimal
Tạo thư muc themes và truy cập vào đó
sudo mkdir /boot/efi/EFI/refind/themes
cd /boot/efi/EFI/refind/themes
Code language: Bash (bash)
Tải themes rEFInd-minimal về thư mục này
sudo git clone https://github.com/evanpurkhiser/rEFInd-minimal.git
Code language: PHP (php)
Chỉnh sửa lại file refind.conf
, thêm dòng này vào cuối cùng
include themes/rEFInd-minimal/theme.conf
Code language: PHP (php)
Đồn thời sửa lại icon của menuentry sử dụng icon của theme. Do theme này không có icon cho EndeavourOS nên mình dùng icon của Arch.
menuentry "EndeavourOS" {
icon /EFI/refind/themes/rEFInd-minimal/icons/os_arch.png
volume "root"
loader /boot/vmlinuz-linux
initrd /boot/initramfs-linux.img
options "ro root=UUID=ce0fb873-89a6-4304-9eec-011e390489fc"
}
menuentry "Windows 10" {
icon /EFI/refind/themes/rEFInd-minimal/icons/os_win.png
loader \EFI\Microsoft\Boot\bootmgfw.efi
#disabled
}
Code language: Nginx (nginx)
Khởi động lai máy và tận hưởng thành quả.
Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!