GRUB

GNU GRUB (viết tắt của GNU GRand Unified Bootloader) là một chương trình khởi động máy tính được phát triển bởi dự án GNU. GRUB là một cài đặt mẫu của Multiboot Specification của Quỹ Phần mềm Tự do (FSF) , cung cấp cho người dùng một lựa chọn  cho phép khởi động một trong nhiều hệ điều hành được cài trên một máy tính hoặc lựa chọn một cấu hình hạt nhân cụ thể có sẵn trên các phân vùng của một hệ điều hành cụ thể.
GNU GRUB được phát triển từ một gói phần mềm được gọi là Grand Unified Bootloader (dựa trên Lý thuyết thống nhất lớn). nó được sử dụng chủ yếu cho các hệ thống tương tự Unix. Các hệ điều hành GNU sử dụng GNU GRUB làm trình khởi động mặc định, cũng như hầu hết các bản phân phối Linux. Hệ điều hành Solaris cũng đã dùng GRUB làm trình khởi động trên các hệ thống x86, bắt đầu từ phiên bản Solaris 10 1/06.

Tính năng

Người dùng có thể tự động cấu hình các hệ thống con GRUB. GRUB nạp cấu hình của nó lúc khởi động, cho phép thay đổi thời gian khởi động, chẳng hạn như việc lựa chọn hạt nhân khác nhau hoặc đĩa RAM ban đầu. Để kết thúc, GRUB cung cấp một giao diện dòng lệnh đơn giản, tương tự bash,cho phép người dùng viết các trình tự khởi động mới một cách nhanh chóng, ngoài các danh sách thực đơn bình thường.
GRUB có tính cơ động cao. Nó hỗ trợ nhiều định dạng thực thi. Nó hỗ trợ tất cả các hệ thống tập tin Unix thường được sử dụng, hệ thống tập tin FAT và NTFS của Windows, và logical block addressing (LBA, hay dịch theo tiếng Việt là phép gán mác khối dữ liệu). GRUB cho phép người dùng xem nội dung của tập tin trên bất kỳ hệ thống tập tin được hỗ trợ.
GRUB có thể tải ảnh khởi động của hệ điều hành từ mạng, do đó nó hỗ trợ các hệ thống không có ổ cứng.  Nó cũng hỗ trợ giải nén tự động của các hình ảnh khởi động trước khi khởi động chúng. GRUB hỗ trợ các hệ điều hành mà không hỗ trợ đa khởi động, bằng cách sử dụng chuỗi tải. Nó sử dụng hai hoặc ba dòng của chuỗi lệnh để khởi động bất kỳ hệ thống DOS, Windows, Linux, BSD hay Solaris, làm cho nó rất dễ dàng để làm việc với nó. Chuỗi tải hỗ trợ các hệ điều hành tương tự Unix cũng đã tích hợp trong GRUB.
GRUB có thể được sử dụng với nhiều giao diện người dùng. Hầu hết các bản phân phối Linux tận dụng sự hỗ trợ của GRUB cho một giao diện đồ họa để cung cấp một trình đơn khởi động tùy chỉnh với một hình ảnh nền. Một sửa đổi giao diện văn bản của GRUB có thể sử dụng một liên kết nối tiếp để một thiết bị đầu cuối từ xa có thể truy cập vào các bộ nạp khởi động.
GRUB dùng một màn hình cuộn để lựa chọn hệ điều hành khởi động.  Điều này có nghĩa là 150 hoặc nhiều sự lựa chọn khởi động hơn có thể dễ dàng kiểm soát bởi GRUB bằng cách thêm chúng vào tập tin cấu hình grub.cfg .  Các phím mũi tên được sử dụng để chọn hệ điều hành để khởi động. Ngoài giao diện menu bình thường, GRUB cũng cung cấp một giao diện dòng lệnh tương tự bash cung cấp nhiều tập lệnh để người dùng có thể xem hoặc sửa đổi bất kỳ một phần nào của quá trình khởi động. Với công cụ này ai cũng có thể mà không cần nhiều kiến thức về những thành phần được cài trên máy tính, dùng GRUB từ một số thiết bị mở rộng như đĩa mềm, USB hay một đĩa CD-ROM để khởi động và cài đặt hệ điều hành

Khởi động

Khi một máy tính được bật, BIOS của máy tính sẽ tìm thiết bị được cấu hình khởi động chính (thường là ổ cứng) tải và thực thi chương trình bootstrap đầu tiên từ master boot record (MBR). MBR là những sector đầu tiên của ổ cứng, với số 0 là offset của nó(các sector bắt đầu đếm từ 0). Trong một thời gian dài, kích thước của sector là 512 byte, nhưng từ năm 2009 có nhiều ổ cứng có kích thước một sector là 4096 byte, được gọi là ổ cứng Advanced Format.   Tính đến tháng 10/2013, những ổ cứng như thế vẫn được truy cập những sector 512-byte, bằng cách sử dung mô phỏng 512e.
Boot record MBR legacy hỗ trợ tối đa 4 phân vùng primary và chiếm 64 byte. Cùng với tùy chọn chữ ký đĩa (4 byte) và nhãn đĩa (6 byte), chuỗi dữ liệu này chiếm từ 434 đến 446 byte mã máy của boot loader. Mặc dù một kích thước nhỏ có thể chứa đủ một boot loader đơn giản, nó không đủ lớn để chứa một boot loader hỗ trợ một hệ thống tập tin lớn và phức tạp, menu điều khiển các lựa chọn khởi động hệ thống là ví dụ.  Boot loader với footprints lớn hơn do đó được chia thành nhiều phần, nơi những phần nhỏ nhất được tích hợp bên trong MBR, trong khi những phần lớn hơn chứa trong các khu vực khác (ví dụ,trong một sector trống ở giữa MBR phân vùng đầu tiên) và được gọi đến bởi mã MBR của boot loader.
Ảnh nhân hệ điều hành trong phần lớn các trường hợp các tập tin nằm trên hệ thống tập tin thích hợp, nhưng các khái niệm về một hệ thống tập tin là không biết đến BIOS.  Vì vậy,trong các hệ thống dựa trên BIOS,nhiệm vụ của boot loader là để truy cập vào nội dung của các tập tin, vì vậy nó có thể đọc từ đĩa cứng, nạp vào bộ nhớ RAM và thực hiện.
Một trong những phương pháp tiếp cận có thể cho boot loader là tải trực tiếp các ảnh của hạt nhân từ các sector ổ cứng đang sử dụng bởi hình ảnh thực tế hạt nhân, mà không có sự hiểu biết cơ bản hệ thống tập tin.  Thông thường, cấp bổ sung gián tiếp là cần thiết, ở dạng bản đồ hoặc các bản đồ tập tin – các file phụ trợ có chứa một danh sách các sector vật lý đang sử dụng bởi ảnh hạt nhân, cung cấp thông tin cho boot loader về nơi có thể tìm thấy những sector cơ sở của nhân hệ thống.  Các bản đồ này cần được cập nhật mỗi lần nhân hệ thống bị thay đổi, ví dụ như nâng cấp hạt nhân hệ thống giải phân mảnh hệ thống file.  Cũng như vậy, trong các trường hợp bản đồ thay đổi trên ổ đĩa vật lý, vị trí của chúng cũng cần được cập nhật vào mã MBR của boot loader, vì vậy các cơ chế khu vực gián tiếp tiếp tục làm việc. Điều này không phức tạp, nhưng nó yêu cầu phải sửa đổi bằng tay trong trường hợp bị sai trong ki cập nhật hệ thống.
Một cách khác là tạo một boot loader nhận biết được hệ thống file bên dưới, Hạt nhân như vậy được cấu hình và truy cập thông qua đường dẫn thực tế. Điều này yêu cầu boot loader cần chứa một trình điều khiển hệ thống file cho mỗi hệ thống file mà nó hỗ trợ, như vậy trình khởi động sẽ có thể nhận biết và tiếp cận dữ liệu. Cách tiếp cận này cho phép loại bỏ các phần lập trình nhúng không cần thiết vào sector và cả sự cần thiết của việc phân địa chỉ tập tin, và MBR (tức Master Boot Record) sẽ không cần phải cập nhật lại mỗi khi ảnh hạt nhân hệ điều hành được thêm vào trình khởi động hoặc được gỡ ra.
GNU GRUB sử dụng phương pháp thứ hai, bằng cách tìm hiểu các hệ thống tập tin cơ bản. Boot loader tự chia thành nhiều phần, cho phép nó phù hợp với các chương trình khởi động MBR.
Có hai phiên bản của GRUB đang được sử dụng phổ biến. GRUB phiên bản 2, được gọi là GRUB 2, được viết lại từ đầu và có ý định thay thế phiên bản tiền nhiệm của nó GRUB 1, và hiện nay nó được sử dụng bởi đa số các bản phân phối Linux.  GRUB phiên bản 1, được gọi là GRUB legacy,chỉ phổ biến ở các phiên bản cũ của các bản phân phối Linux, trong đó một số vẫn còn đang được sử dụng và hỗ trợ, ví dụ như trong CentOS 5.

GRUB Phiên bản 1 (GRUB legacy)

Master boot record (MBR) thường chứa GRUB giai stage 1, nhưng có thể chứa bootloader khác có thể gọi đến GRUB stage 1 từ một boot sector giống như bản ghi kích thước khởi động của phân vùng.  
Với kích thước nhỏ của một boot sector (512 Byte), stage 1 có thể làm ít hơn so với tải các giai đoạn tiếp theo của GRUB bằng cách tải một vài sector từ một vùng cố định  gần điểm đầu đĩa cứng (trong 1024 cylinder đầu tiên).
Stage 1 có thể tải stage 2 trực tiếp, nhưng nó thường được thiết lập để tải stage 1.5. GRUB stage 1.5 ở khu vực 30 KiB đầu tiên của ổ cứng ngay sau MBR và trước phân vùng đầu tiên. Trong trường hợp vị trí này không có sẵn(bảng phân vùng bất thường,  trình điều khiển đĩa đặc biệt, đĩa GPT hoặc LVM) các cài đặt của stage 1.5 sẽ bị lỗi. Stage 1.5 chứa trình điều khiển hệ thống tập tin. điều này cho phép stage 1.5 tải trực tiếp stage 2 từ bất kỳ vị trí nào trên hệ thống file, ví dụ từ/boot/grub. Stage 2 sẽ tải file cấu hình mặc định và các module cần thiết khác.