- GRUB là trình quản lý khởi động GNU dùng để chọn và tải hệ điều hành, hỗ trợ BIOS/UEFI và Multiboot.
- GRUB 2 bổ sung các mô-đun, cải thiện hỗ trợ hệ thống tập tin, tìm kiếm UUID và menu/thiết bị đầu cuối đồ họa.
- Cấu hình được quản lý thông qua /etc/default/grub và 40_custom, tạo lại bằng lệnh update-grub hoặc grub2-mkconfig.
- Bảo mật: Bảo vệ GRUB bằng mật khẩu, sử dụng mã hóa LUKS và có chính sách mật khẩu mạnh.

Nếu bạn đã cài đặt GNU/Linux trên máy tính hoặc sử dụng nhiều hệ điều hành, có lẽ bạn đã từng nghe đến GRUB. Đó là chương trình nhỏ nhưng mạnh mẽ mà bạn thấy ngay trước khi hệ thống khởi động, cho phép bạn chọn những gì cần tải. Mặc dù thường không được chú ý, vai trò của nó rất quan trọng trong việc khởi động hệ điều hành và chuyển giao quyền điều khiển một cách suôn sẻ cho nhân hệ điều hành.
Trong thế giới khởi động máy tính cá nhân, GRUB đã trở thành tiêu chuẩn mặc định nhờ sức mạnh và tính linh hoạt của nó. Ra đời trong dự án GNU, hiện nay nó là trình quản lý khởi động được sử dụng rộng rãi nhất trong GNU/Linux , tương thích với nhiều kiến trúc và hệ thống tập tin, thân thiện với người dùng mới và đồng thời là công cụ đa năng cho những người muốn tinh chỉnh từng chi tiết của quá trình khởi động.
GNU GRUB là gì và nó dùng để làm gì?
GNU GRUB (GNU GRand Unified Bootloader) là một trình quản lý khởi động đa hệ điều hành: phần mềm mà firmware (BIOS hoặc UEFI) chạy khi máy tính được bật nguồn để chọn và tải hệ điều hành. Nó cho phép người dùng chọn các mục menu, truyền tham số cho nhân hệ điều hành, khởi động từ mạng và thậm chí tương tác với bảng điều khiển để khắc phục sự cố cụ thể.
Nó chủ yếu được sử dụng trong các bản phân phối GNU/Linux, mặc dù nó cũng đã được sử dụng bởi các hệ thống khác như Solaris trên x86. Trên các hệ thống UEFI hiện đại , phần mềm nhúng trực tiếp tải tệp thực thi GRUB nằm trong phân vùng hệ thống EFI (ESP) , với điều kiện nó được đăng ký trong NVRAM; trong BIOS/MBR, GRUB chiếm các sector ban đầu của đĩa và tiếp tục từ đó.
Ngoài menu thông thường, GRUB tuân thủ Đặc tả Multiboot, có nghĩa là nó có thể khởi động các nhân hệ điều hành tương thích một cách liền mạch . Và một khi nhân hệ điều hành đã nằm trong bộ nhớ, GRUB sẽ chuyển giao quyền điều khiển và hoàn thành nhiệm vụ của mình, đây là một thành tựu không hề nhỏ.

Bảng thông số kỹ thuật và dữ liệu dự án
GRUB là một phần của hệ sinh thái GNU và được phân phối dưới dạng phần mềm tự do theo giấy phép GNU GPL v3 hoặc phiên bản mới hơn . Quá trình phát triển của nó là mã nguồn mở, với kho lưu trữ chính thức, hệ thống theo dõi lỗi, trang web và một cộng đồng rất năng động.
Nó được viết chủ yếu bằng C và trình biên dịch, và chạy trên nhiều nền tảng: IA-32, x86-64 và PowerPC, trong số những cái khác. Nhánh hiện tại là GRUB 2 (một phiên bản tái triển khai của “GRUB Legacy” lịch sử). Phiên bản ổn định mới nhất được phát hành là 2.12 (Ngày 20 tháng 12 năm 2023). Nếu bạn muốn kiểm tra phiên bản cục bộ của mình, bạn có thể chạy: grub-install --version và bạn sẽ thấy chuỗi tương ứng.
Một chút về lịch sử và sự tiến hóa
GRUB bắt đầu như một sáng kiến của Erich Stefan Boleyn trong bối cảnh GNU Hurd và vi nhân Mach. Để giải quyết sự khác biệt trong các phương thức khởi động, Đặc tả Multiboot đã được tạo ra, giúp cho các bộ nạp khởi động và nhân hệ điều hành "nói cùng một ngôn ngữ". Năm 1999, Gordon Matzigkeit và Yoshinori Okuji đã tiên phong trong việc thông qua nó như một gói chính thức của Dự án GNU.
Khoảng năm 2002, một nhóm các nhà nghiên cứu Nhật Bản đã bắt đầu dự án PUPA (Preliminary Universal Programming Architecture) với mục tiêu viết lại GRUB để làm cho nó mạnh mẽ và có tính mô-đun hơn. Nỗ lực này đã dẫn đến sự ra đời của GRUB 2 , trong khi phiên bản trước đó được gọi là "GRUB Legacy" (phiên bản 0.97 được cập nhật lần cuối vào năm 2005). Từ năm 2007 trở đi, một số bản phân phối đã chuyển sang sử dụng GRUB 2, và đến cuối năm 2009, phần lớn các bản phân phối đều tích hợp nó theo mặc định.
Cách khởi động máy tính bằng GRUB (BIOS và UEFI)
Khi bạn bật PC, chương trình cơ sở sẽ thực hiện các kiểm tra (RAM, xung nhịp, thiết bị, thứ tự khởi động) và tìm kiếm trình nạp khởi động. Trên các hệ thống có BIOS/MBR, quyền điều khiển được chuyển cho Bản ghi khởi động chính (MBR), 512 byte đầu tiên của đĩaGRUB được chia thành các giai đoạn: Giai đoạn 1 (mã tối thiểu trong MBR), Giai đoạn 1.5 (ở các sector sau, bắc cầu để hiểu hệ thống tệp) và Giai đoạn 2 (menu và các chức năng nâng cao). Trong GRUB 2, "1.5" đó không còn tồn tại nữa; giờ đây có các hình ảnh cụ thể như boot.img, core.img và các mô-đun (*.mod) được kết hợp theo cài đặt.
Trong UEFI, quá trình này trực tiếp hơn: firmware thực thi tệp nhị phân GRUB EFI từ phân vùng EFI , với điều kiện nó được cài đặt và đăng ký đúng cách. Trong cả hai trường hợp, GRUB hiển thị một menu hoặc giao diện dòng lệnh, tải nhân hệ điều hành đã chọn, và sau đó chuyển quyền thực thi cho nhân đó.
Thông số kỹ thuật và khả năng tương thích của Multiboot
GRUB hỗ trợ Multiboot, cho phép khởi động các nhân hệ điều hành tương thích mà không cần các "thủ thuật" đặc biệt. Hơn nữa, đối với các hệ thống không hỗ trợ Multiboot (như Windows hoặc DOS ), nó cung cấp tính năng chainloading, nhắm mục tiêu vào sector đầu tiên của phân vùng nơi chứa các bootloader của hệ điều hành đó.
Khả năng tương thích hệ thống tệp của nó rất rộng: Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS , và nhiều hệ thống khác. Nó cũng có thể đọc từ các ổ đĩa LVM và mảng RAID, một lợi thế đáng kể khi cấu trúc lưu trữ phức tạp.
Các tính năng và chức năng nổi bật
- Giao diện menu Thiết bị đầu cuối tương tác có thể cấu hình và cực kỳ linh hoạt, với chức năng tự động hoàn thành Tab và các phím tắt theo kiểu Bash.
- Hỗ trợ cho LBA (Địa chỉ khối logic) để vượt qua giới hạn BIOS cổ điển và đọc được hơn 1024 xi-lanh.
- Công suất cho khởi động mạng (PXE/TFTP) và thiết bị đầu cuối từ xa, hữu ích trong các tình huống quản lý tập trung.
- Tự động giải nén và nhận dạng nhiều định dạng thực thi.
- Lưu trữ liên tục các biến với lưu_môi_trường/tải_môi_trường y
grub-editenv(khi nền tảng cho phép). - Tất cả phát hiện RAM, độc lập hình học đĩa và cơ chế tìm kiếm theo nhãn và UUID.
- Hỗ trợ đồ họa cho menu và hình nền, và thiết kế mô-đun duy trì core.img nhỏ và tải các mô-đun khi cần thiết.
Thuật ngữ chính: thiết bị, phân vùng và đường dẫn
GRUB đặt tên đĩa và phân vùng theo cách riêng của nó. Đĩa đầu tiên thường là (hd0), phân vùng đầu tiên (hd0,1) Trong GRUB 2 (hãy nhớ: trong GRUB 2, việc đánh số bắt đầu từ 1; trong Legacy, việc đánh số bắt đầu từ 0). Để tham chiếu đến toàn bộ ổ đĩa, phân vùng được bỏ qua: (hd0).
Để chỉ ra các tập tin, thiết bị được kết hợp với đường dẫn: (hd0,1)/ruta/al/archivo. Nó cũng hỗ trợ danh sách chặn (danh sách chặn) khi cần chỉ ra vị trí chính xác trên đĩa của một tệp không hiển thị như vậy trong hệ thống tệp, ví dụ (hd0,1)+1 cho sector đầu tiên của một phân vùng, hữu ích với chainloader +1.
"Hệ thống tệp gốc" trong GRUB không giống với "/" trong Linux. Nó chỉ đơn giản là phân vùng gốc mà GRUB sẽ đọc các tệp của nó ; một khi nhân Linux nắm quyền kiểm soát, nó sẽ định nghĩa thư mục gốc thực sự của riêng mình, và mọi thứ khác trong GRUB trở nên không còn liên quan.
Giao diện GRUB
GRUB cung cấp ba chế độ xem chính. Chế độ quen thuộc nhất là menu , với các mục được cấu hình sẵn; bạn có thể điều hướng bằng các phím mũi tên, khởi động bằng phím Enter, chỉnh sửa mục bằng phím "e" hoặc mở bảng điều khiển bằng phím "c".
Trình soạn thảo đầu vào cho phép bạn sửa đổi các dòng ngay lập tức (thêm bằng "o/O", chỉnh sửa bằng "e", xóa bằng "d") và, nếu mọi thứ đều ổn, khởi động bằng "b". Nó lý tưởng để kiểm tra các tham số kernel mà không cần chạm vào các tệp.
Chế độ dòng lệnh là chế độ mạnh mẽ nhất: nó hỗ trợ tự động hoàn thành theo ngữ cảnh, chỉnh sửa phím tắt và tất cả các lệnh nội bộ của GRUB để định vị ổ đĩa, tải kernel/initrd hoặc tải chuỗi. Nếu tệp cấu hình bị thiếu hoặc bị hỏng, GRUB sẽ đưa bạn đến đây để bạn có thể tự khắc phục sự cố.
Các thông báo lỗi thường gặp
Lỗi có thể xuất hiện ở giai đoạn ban đầu (hạn chế hơn) hoặc khi tải menu và mô-đun (mô tả chi tiết hơn). Dưới đây là tập hợp các mã lỗi tiêu biểu mà GRUB có thể hiển thị, được diễn giải lại cho dễ hiểu :
- 1: Đường dẫn không hợp lệ hoặc không tuyệt đối; 2: Loại tệp không hợp lệ (không phải tệp thông thường); 3–4: Dữ liệu/tiêu đề bị hỏng trong quá trình giải nén; 5: bảng phân vùng bị hỏng hoặc không hợp lệ.
- 6: Không tương thích Giai đoạn 1/Giai đoạn 2; 7: Không hỗ trợ tải dưới 1 MB; 8: Đã thử khởi động mà không tải hạt nhân; 9: Lỗi khởi động không xác định.
- 10: Tính năng khởi động đa hệ thống không được hỗ trợ; 11: Thiết bị không được nhận dạng; 12: Thiết bị không hợp lệ; 13: Định dạng thực thi không được hỗ trợ.
- 14: Hệ thống tập tin ngăn không cho toàn bộ tập tin được đọc; 15: không tìm thấy tệp; 16: Cấu trúc hệ thống tập tin không nhất quán.
- 17: Không thể gắn phân vùng đã chọn; 18: Xi lanh nằm ngoài phạm vi được BIOS hỗ trợ (thường gặp trên các ổ đĩa cũ); 19: Initrd trước kernel.
- 20: Các mô-đun trước hạt nhân đa khởi động; 21: Đĩa được chọn không tồn tại; 22: Phân vùng không tồn tại; 23: Lỗi khi diễn giải một số.
- 24: Truy cập vào khối bên ngoài phân vùng; 25: Lỗi đọc đĩa; 26: Quá nhiều liên kết tượng trưng; 27: Lệnh không xác định.
- 28: Mục không vừa với bộ nhớ; 29: Lỗi ghi đĩa; 30: Đối số không hợp lệ; 31: Tệp không được căn chỉnh theo sector (ReiserFS, sử dụng không có đuôi).
- 32: Yêu cầu xác thực; 33: Thiết bị nối tiếp không được cấu hình; 34: Không có sector trống cho Giai đoạn 1.5 sau MBR (xung đột với EZ-BIOS hoặc phân vùng bắt đầu quá sớm).
Các lệnh GRUB cơ bản
Trong bảng điều khiển, bạn có thể chạy các lệnh tương tác rất hữu ích. Ví dụ: boot bắt đầu tải lần cuối (kernel hoặc chainloader) và chainloader <archivo> tải một sector hoặc tệp từ một chuỗi; phím tắt thông thường cho Windows là chainloader +1.
displaymem hiển thị mức sử dụng bộ nhớ theo BIOS, rất tiện lợi nếu bạn không chắc chắn về RAM được phát hiện. Với initrd <archivo> bạn chỉ định ảnh đĩa RAM ban đầu cần thiết cho nhân.
Để cài đặt vào MBR từ bảng điều khiển GRUB Legacy, bạn đã sử dụng install với các tuyến đường đến giai đoạn1, giai đoạn2 và, tùy chọn, vào tệp cấu hình. Ngày nay trong GRUB 2, từ hệ thống, việc sử dụng grub-install và tạo lại menu với update-grub/grub2-mkconfig.
Lệnh kernel chỉ định nhị phân hạt nhân và các tham số của nó, ví dụ: kernel /vmlinuz root=/dev/sda5Nó thường được đi trước bởi root (hdX,Y) o rootnoverify để thiết lập phân vùng mà GRUB sẽ đọc.
Tệp cấu hình và chỉ thị
Trong GRUB Legacy, menu nằm ở /boot/grub/menu.lst o grub.conf, với các chỉ thị như color, default, fallback, hiddenmenu, password, timeout, splashimage và khối title với các đơn đặt hàng cho từng hệ thống.
Một ví dụ điển hình (diễn giải) sẽ bao gồm một phần Linux với root (hd0,2), kernel với anh ấy tham số gốc=/…, Và boot; và một cái khác dành cho Windows với rootnoverify (hd0,1) y chainloader +1.
Trong GRUB 2, tệp được tạo tự động là /boot/grub/grub.cfg. Không nên chỉnh sửa thủ công; thay vào đó, hãy điều chỉnh /etc/default/grub (các giá trị như GRUB_TIMEOUT, GRUB_DEFAULT, v.v.) và các mục tùy chỉnh được thêm vào /etc/grub.d/40_custom. Sau đó nó được thực hiện update-grub o grub2-mkconfig để tạo lại menu.
Sự khác biệt chính giữa GRUB Legacy và GRUB 2
- Tệp cấu hình đã đi từ
menu.lst/grub.confagrub.cfg, với cú pháp và lệnh được đổi mới và tự động tạo bằng phương tiệngrub-mkconfig. - Đánh số phân vùng bắt đầu vào năm 1 trong GRUB 2 (trong Legacy, nó bắt đầu từ 0).
- Sự tồn tại của các biến với
save_env/load_envtrong một số cấu hình. - Phát hiện tuyến đường tốt hơn và tìm kiếm theo UUID/thẻ; hỗ trợ nhiều hệ thống tập tin hơn.
- Đọc trực tiếp từ LVM và RAID.
- Đồ họa đầu cuối và menu, cùng hình ảnh được sắp xếp lại: Giai đoạn 1.5 đã không còn nữa;
boot.img,core.imgvà các mô-đun động (*.mod).
Bảo mật và tăng cường bảo mật với GRUB
Một trình quản lý khởi động được bảo mật kém giống như một cái sàng. Nếu ai đó có quyền truy cập vật lý có thể chỉnh sửa các tham số kernel hoặc khởi chạy một mục khác, điều đó sẽ vô hiệu hóa các biện pháp bảo mật của bạn . Đó là lý do tại sao nên bảo vệ GRUB bằng mật khẩu và áp dụng các biện pháp bảo mật tốt nhất.
Đặt một mật khẩu mạnh để hạn chế sửa đổi mục nhập hoặc truy cập bảng điều khiển. Trong GRUB 2, sử dụng tên người dùng và mật khẩu với grub-mkpasswd-pbkdf2 và cấu hình các quy tắc tương ứng trong các tập lệnh của /etc/grub.d/.
Nó cũng bao gồm mã hóa ổ đĩa bằng LUKS , để ngay cả khi ai đó đánh cắp máy tính, họ cũng không thể đọc được dữ liệu. Điều này cũng đảm bảo rằng các chính sách mật khẩu của hệ thống rất nghiêm ngặt để giảm thiểu các cuộc tấn công vét cạn.
Quản lý lịch sử nhật ký của bạn một cách khôn ngoan : những nhật ký cung cấp manh mối cho kẻ tấn công nên được giảm thiểu hoặc tập trung hóa bằng các biện pháp kiểm soát truy cập; những nhật ký giúp kiểm tra các nỗ lực độc hại nên được tổng hợp và phân tích tại một vị trí an toàn.
Để phát hiện các hệ thống được cài đặt khác và tự động tạo các mục nhập, hãy cài đặt os-proberNó sẽ giúp bạn tiết kiệm thời gian và tránh lỗi khi tạo lại menu.
Lắp đặt và bảo trì
Nếu bạn chưa cài đặt GRUB trong quá trình cài đặt bản phân phối, bạn có thể cài đặt sau. Trong GRUB 2, từ hệ thống, hãy chạy sudo grub-install /dev/sdX (thay thế bằng đĩa của bạn) và sau đó sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfgBạn sẽ thấy menu khi khởi động lần tiếp theo.
Từ bảng điều khiển GRUB Legacy, quy trình cổ điển là chỉ định root và chạy cài đặt: root (hd1,0) tiếp theo là setup (hd1,0) cho phân vùng đầu tiên của đĩa thứ hai, hoặc setup (hd1) nếu bạn trỏ đến MBR của đĩa thứ hai đó.
Chỉnh sửa trực tiếp /boot/grub/grub.cfg Đây không phải là ý tưởng hay trong GRUB 2, ngay cả khi về mặt kỹ thuật là có thể thực hiện được. Tuyến đường được đề xuất là để thay đổi /etc/default/grub, sử dụng /etc/grub.d/40_custom để có nội dung riêng và tái tạo.
Những câu hỏi thực tế và các phím tắt hữu ích
Làm sao để biết phân vùng khởi động trên /dev/sda là gì? Trên hệ thống BIOS/MBR: sudo fdisk -l /dev/sda (xem dấu hoa thị cho “Khởi động”). Trong GPT/UEFI: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT và tìm phân vùng EFI (FAT32, nhập EF00/flags esp). Ngoài ra sudo efibootmgr -v hiển thị các mục khởi động đã ghi lại.
Làm thế nào để lấy được UUID của một phân vùng? với blkid o lsblk -f. Ví dụ: sudo blkid /dev/sda2 trả lại của nó UUID và siêu dữ liệu khác.
Làm thế nào để GRUB 2 đợi 10 giây trước khi nhập mục mặc định? Điều chỉnh /etc/default/grub với GRUB_TIMEOUT=10 (và, nếu có thể áp dụng, GRUB_TIMEOUT_STYLE=menu) và thực hiện sudo update-grub o grub2-mkconfig.
Lệnh GRUB Legacy để cài đặt trên phân vùng đầu tiên của đĩa thứ hai? Mở bảng điều khiển và chạy: root (hd1,0) và sau đó setup (hd1,0). Nếu bạn muốn MBR, nó sẽ là setup (hd1).
Các bước để thay đổi cấu hình GRUB 2? 1) Chỉnh sửa /etc/default/grub (ví dụ., GRUB_DEFAULT, GRUB_TIMEOUT), 2) thêm các mục vào /etc/grub.d/40_custom nếu bạn cần chúng, 3) tái tạo với update-grub/grub2-mkconfig, 4) khởi động lại và kiểm tra.
Đặt menu tùy chỉnh ở đâu trong GRUB 2? En /etc/grub.d/40_custom (hoặc các tập tin riêng trong /etc/grub.d/ với các quyền thích hợp). Không bao giờ chỉnh sửa bằng tay /boot/grub/grub.cfg ngoại trừ trường hợp khẩn cấp.
Các mục nhập được lưu trữ ở đâu trong GRUB Legacy? En /boot/grub/menu.lst o grub.conf, theo sự phân phối.
Làm thế nào để truy cập vào giao diện GRUB từ menu? Trong GRUB 2 hoặc Legacy, nhấn phím "c". Để chỉnh sửa một mục cụ thể, nhấn phím "e". Cả hai phím tắt này đều rất hữu ích khi bạn cần chẩn đoán sự cố nhanh chóng.
Ví dụ về các tùy chọn phổ biến
Lựa chọn khởi động mặc định: GRUB_DEFAULT=0 hiệp đầu tiên bắt đầu; với GRUB_DEFAULT=saved ghi nhớ cấu hình đã sử dụng lần cuối. Sau khi thay đổi, hãy tạo lại cấu hình.
Thời gian chờ đợi: GRUB_TIMEOUT=4 điều chỉnh độ trễ của menu; với 0 bắt đầu mà không tạm dừng; trong một số trường hợp, bạn có thể ẩn menu bằng GRUB_TIMEOUT_STYLE=hidden để có khởi đầu sạch hơn.
Cập nhật menu: trên Debian/Ubuntu và các phiên bản phái sinh, sudo update-grub; trong những người khác, sudo grub2-mkconfig -o /boot/grub/grub.cfg. Hãy chắc chắn rằng bạn có os-prober được cài đặt nếu bạn muốn tự động phát hiện các hệ thống khác.
Mặc dù GRUB cũng xuất hiện trong các ngữ cảnh ngoài GNU/Linux, hãy nhớ rằng nó không phải là một dịch vụ hỗ trợ. Nếu vấn đề của bạn liên quan đến Windows, cách thiết thực nhất là truy cập các diễn đàn dành riêng cho hệ điều hành đó để nhận được sự trợ giúp cụ thể.
GRUB đã phát triển từ một menu khởi động đơn giản thành một môi trường tiền hệ thống thực sự, có khả năng khởi động nhiều hệ điều hành, quản lý các ổ đĩa phức tạp và giúp bạn khôi phục hệ thống chỉ với một vài lệnh. Với cấu hình phù hợp và một số biện pháp bảo mật (mật khẩu GRUB, mã hóa LUKS, chính sách khóa và nhật ký được quản lý tốt), bạn sẽ có một quy trình khởi động mạnh mẽ, linh hoạt và trên hết là được kiểm soát.
