GRUB là gì: Hướng dẫn đầy đủ về Trình quản lý khởi động GNU

Cập nhật lần cuối: 14 Tháng Mười 2025
  • 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.

Minh họa chung về GRUB

Nếu bạn đã cài đặt GNU/Linux trên máy tính hoặc sử dụng nhiều hệ thống, có lẽ bạn đã nghe nói đến GRUB. Đây là chương trình nhỏ gọn tuyệt vời 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ù nó không được chú ý, Vai trò của nó là chìa khóa để khởi chạy hệ điều hành và trao quyền kiểm soát cho hạt nhân mà không có sự kịch tính.

Trong thế giới khởi động máy tính, GRUB đã trở thành tiêu chuẩn thực tế nhờ sức mạnh và tính linh hoạt của nó. Nó được ra đời trong dự án GNU và ngày nay, Đây 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ụ đắc lực cho những ai tinh chỉnh từng chi tiết của máy tính.

GNU GRUB là gì và nó dùng để làm gì?

GNU GRUB (GNU GRand Unified Bootloader) Đây là trình quản lý khởi động đa hệ thống: một phần mềm mà firmware (BIOS hoặc UEFI) chạy khi máy tính được bật để chọn và tải hệ điều hành. Nó cho phép bạn chọn các mục menu, truyền tham số cho kernel, 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 máy tính hiện đại có UEFI, Phần mềm trực tiếp tải tệp thực thi GRUB nằm trên phân vùng hệ thống EFI (ESP), miễn là nó được đăng ký trong NVRAM; trong BIOS/MBR, GRUB chiếm các sector đầu tiên của đĩa và tiếp tục từ đó.

Ngoài menu thông thường, GRUB tuân thủ Thông số kỹ thuật Multiboot, nghĩa là nó có thể khởi động các hạt nhân tương thích một cách đồng nhất. Và khi hạt nhân nằm trong bộ nhớ, GRUB sẽ chuyển giao quyền điều khiển và công việc của nó hoàn tất, đây không phải là một nhiệm vụ dễ dàng.

Màn hình tùy chọn khởi động GRUB

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 miễn phí được cấp phép theo GNU GPL v3 hoặc phiên bản mới hơnQuá trình phát triển mở, có kho lưu trữ chính thức, trình theo dõi lỗi, trang web và cộng đồng rất năng động xung quanh.

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à nhân vi mô Mach. Để giải quyết sự khác biệt trong phương thức khởi động, Đặc tả Đa khởi động (Multiboot Specification) đã được tạo ra, giúp trình quản lý khởi động và nhân dễ dàng "nói cùng một ngôn ngữ". Năm 1999, Gordon Matzigkeit và Yoshinori Okuji Họ thúc đẩy việc áp dụng 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 đã khởi động PUPA (Kiến trúc Lập trình Phổ quát Sơ bộ) với mục tiêu viết lại GRUB để nó mạnh mẽ và có tính mô-đun hơn. Nỗ lực đó đã được kết tinh trong GRUB 2, trong khi dòng trước đó được đổi tên thành “GRUB Legacy” (phiên bản 0.97 được cập nhật lần cuối vào năm 2005). Bắt đầu từ năm 2007, một số bản phân phối đã chuyển sang GRUB 2, và vào cuối năm 2009, Phần lớn bao gồm nó theo mặc định.

Sơ đồ quá trình khởi động GRUB

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.

  UEFI Bootkit: Bootkitty trên Linux và di sản của BlackLotus

Trong UEFI, luồng này trực tiếp hơn: Phần mềm chạy tệp nhị phân GRUB EFI từ phân vùng EFI, nếu được cài đặt và đăng ký đúng cách. Trong cả hai trường hợp, GRUB đều hiển thị menu hoặc bảng điều khiển, tải kernel đã chọn và chuyển giao quyền thực thi cho kernel đó.

Thông số kỹ thuật và khả năng tương thích của Multiboot

GRUB triển khai Multiboot, cho phép khởi động các kernel tương thích mà không cần bất kỳ thủ thuật cụ thể nào. Ngoài ra, đối với các hệ thống không hỗ trợ tính năng này (chẳng hạn như Windows hoặc DOS), cung cấp tính năng tải chuỗi, nhắm mục tiêu vào khu vực đầu tiên của phân vùng nơi chứa trình tải của riêng nó.

Khả năng tương thích hệ thống tập tin của nó rất lớn: Btrfs, ext2/3/4, FAT12/16/32, exFAT, HFS/HFS+, ISO9660, Nilfs2, NTFS, ReiserFS, ZFS, ROMFS, JFS, XFS, trong số những tính năng khác. Nó cũng có thể đọc từ các ổ đĩa LVM và mảng RAID, một điểm cộng 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 tin 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 tin của nó; một khi hạt nhân Linux nắm quyền kiểm soát, nó sẽ tự định nghĩa gốc thực sự của mình và phần còn lại của GRUB không còn quan trọng nữa.

Giao diện GRUB

GRUB cung cấp ba chế độ xem chính. Chế độ xem nổi tiếng nhất là thực đơn, với các đầu vào được cấu hình sẵn; bạn có thể di chuyển bằng các mũi tên, bắt đầu bằng Enter, chỉnh sửa mục nhập 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 mục nhập cho phép bạn chỉnh sửa 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 khớp, hãy bắt đầu bằng “b”. Nó lý tưởng để thử nghiệm các thông số từ hạt nhân mà không cần chạm vào tập tin.

Bảng điều khiển là chế độ mạnh mẽ nhất: nó hỗ trợ tự động hoàn thành theo ngữ cảnh, phím tắt chỉnh sửa và tất cả các Lệnh nội bộ GRUB để định vị đĩa, tải kernel/initrd hoặc chainload. Nếu tệp cấu hình bị thiếu hoặc không chính xác, GRUB sẽ chỉ bạn đến đây để bạn có thể tự giải quyết vấn đề.

Các thông báo lỗi thường gặp

Lỗi có thể xuất hiện sớm (hạn chế hơn) hoặc khi tải menu và mô-đun (miêu tả chi tiết hơn). Dưới đây là tóm tắt các mã đại diện mà GRUB có thể hiển thị: diễn giải lại cho rõ ràng hơn:

  • 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).
  Ubuntu: Yêu cầu và Tính năng

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.conf a grub.cfg, với cú pháp và lệnh được đổi mới và tự động tạo bằng phương tiện grub-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_env trong 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.img và các mô-đun động (*.mod).

Bảo mật và tăng cường bảo mật với GRUB

Một bộ nạp khởi động được bảo vệ kém là một cái bẫy. Nếu ai đó có quyền truy cập vật lý có thể chỉnh sửa các tham số hạt nhân hoặc khởi chạy một mục nhập khác, vô hiệu hóa hiệu quả các biện pháp bảo mật của bạn. Đó là lý do tại sao bạn nên bảo vệ GRUB bằng mật khẩu và áp dụng các biện pháp tố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/.

Bổ sung với mã hóa đĩa bằng LUKS, để ngay cả khi ai đó đánh cắp thiết bị, họ cũng không thể đọc được dữ liệu. Nó cũng đảm bảo rằng các chính sách mật khẩu hệ thống được thiết lập chặt chẽ để giảm thiểu các cuộc tấn công dò mật khẩu.

Quản lý lịch sử của khúc gỗ có đầuNhững thông tin cung cấp manh mối cho kẻ tấn công nên được giảm thiểu hoặc tập trung bằng biện pháp kiểm soát truy cập; những thông tin giúp kiểm tra các nỗ lực gây hại nên được tập hợp và phân tích ở 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.

  Sử dụng Flyoobe 2.0 để cài đặt Windows 11 trên các máy tính không được hỗ trợ

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 để vào bảng điều khiển GRUB từ menu? Nhấn phím "c" trong GRUB 2 hoặc Legacy. Để chỉnh sửa một mục cụ thể, nhấn "e". Cả hai phím tắt đều rất hữu ích khi chơi chẩn đoán ngay lập tức.

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 bên ngoài GNU/Linux, hãy nhớ rằng nó không phải là dịch vụ hỗ trợ. Nếu vấn đề của bạn chỉ liên quan đến Windows, cách thực tế nhất là liên hệ với diễn đàn dành riêng cho hệ thống đó để có được sự giúp đỡ có mục tiêu.

GRUB đã phát triển từ "menu khởi động" 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ỉ bằng một vài lệnh. Với một cấu hình và một số cải tiến (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 hệ thống khởi động mạnh mẽ, linh hoạt và trên hết là được kiểm soát.

Bộ khởi động UEFI
Bài viết liên quan:
UEFI Bootkit: Bootkitty trên Linux và di sản của BlackLotus