SỬ DỤNG GRUB

Lâm Vĩnh Niên, nien at vnlinux dot org

Phiên bản: v1.2 (040115)
Các phiên bản:
  • v1.2 (040115): bổ sung và sửa chữa
  • v1.0 (030731): phiên bản đầu tiên


Tài liệu này hướng dẫn cách sử dụng GRUB, một trình khởi động mạnh và linh hoạt dùng cho PC.


Nội dung

1. Giới thiệu về GRUB
1.1. Tổng quát
1.2. Tính năng
2. Cài đặt GRUB
2.1. Nơi tải GRUB xuống
2.2. Cài đặt GRUB trong môi trường Linux
3. Sử dụng GRUB
3.1. Chuẩn bị các tập tin cần thiết
3.2. Thuật ngữ dùng trong GRUB
3.2.1. Xác định thiết bị
3.2.2. Xác định tập tin
3.3. Các tập tin hình ảnh của GRUB
3.4. Cơ chế khởi động dùng trong GRUB
3.5. Tạo ổ đĩa mềm khởi động GRUB
3.6. Cài GRUB trong môi trường nguyên thuỷ của GRUB
3.6.1. Cài GRUB dùng lệnh setup
3.6.2. Cài GRUB dùng lệnh install
3.7. Cài GRUB trong môi trường hệ điều hành giống Unix
3.7.1. Cài GRUB dùng lệnh grub-install
3.7.2. Cài GRUB trong shell grub
3.7.3. Ánh xạ giữa các ổ đĩa BIOS và các thiết bị hệ điều hành
3.8. Khởi động hệ thống với GRUB
3.8.1. Khởi động hệ điều hành trực tiếp
3.8.2. Tải trình nạp khởi động khác
3.8.3. Một số thí dụ
3.8.3.1. Linux
3.8.3.2. FreeBSD
3.8.3.3. NetBSD
3.8.3.4. OpenBSD
3.8.3.5. DOS/Windows
3.9. Cấu hình
3.10. Bảo mật cho GRUB
3.11. Giao diện người dùng của GRUB
3.11.1. Giao diện dòng lệnh
3.11.2. Giao diện thực đơn
3.12. Một số lệnh trong GRUB
3.12.1. Các lệnh chỉ dùng cho thực đơn
3.12.2. Các lệnh chung
3.12.3. Các lệnh dùng ở dòng lệnh và đề mục thực đơn
4. Một số ứng dụng cụ thể và vấn đề thường gặp
4.1. Tạo đĩa mềm khởi động GRUB với giao diện thực đơn
4.2. Khởi động đĩa mềm có nhân Linux
4.3. Tạo đĩa CD khởi động với GRUB
4.4. Khởi động Windows từ đĩa cứng thứ hai
4.5. Khởi động nhiều bản Windows cài đặt trên một đĩa cứng
4.6. Khởi động GRUB từ ntldr
4.7. Khởi động ổ CD
4.8. Khởi động vào các runlevel khác nhau của nhân Linux
4.9. Một số vấn đề khác
5. Tài liệu tham khảo

1. Giới thiệu về GRUB

1.1. Tổng quát

GRUB là trình khởi động máy tính – nó có nhiệm vụ tải nhân và khởi động hệ thống Linux cũng như một số hệ điều hành khác: FreeBSD, NetBSD, OpenBSD, GNU HURD, DOS, Windows 95, 98, Me, NT, 2000 và XP...

Năm 1995, Erich Boley thiết kế GRUB. Năm 1999, Gordon Matzigkeit và Yoshinori K. Okuji kế thừa GRUB thành gói phần mềm GNU chính thức.

1.2. Tính năng

  • GRUB hỗ trợ nhiều hệ điều hành – bằng cách khởi động trực tiếp nhân hệ điều hành hoặc bằng cách nạp chuỗi (chain-loading).
  • GRUB hỗ trợ nhiều hệ thống tập tin: BSD FFS, DOS FAT16 và FAT32, Minix fs, Linux ext2fs và ext3fs, ReiserFS, JSF, XFS, và VSTa fs.
  • GRUB cung cấp giao diện dòng lệnh linh hoạt lẫn giao diện thực đơn, đồng thời cũng hỗ trợ tập tin cấu hình.

2. Cài đặt GRUB

2.1. Nơi tải GRUB xuống

GRUB có sẵn ở ftp://alpha.gnu.org/gnu/grub hoặc các mirror của nó. Tên gói GRUB có dạng grub-version.tar.gz, thí dụ grub-0.93.tar.gz.

Ngoài ra, phiên bản mới nhất của GRUB cũng có thể được tải về qua CVS với kho là :pserver:anoncvs@subversions.gnu.org:/cvsroot/grub và mô-đun là grub, không cần password cho anoncvs. Do đó có thể làm như sau:

cvs -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/grub login
Password: <ENTER>
cvs -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/grub co grub
cvs -d :pserver:anoncvs@subversions.gnu.org:/cvsroot/grub logout

Một số hệ điều hành cung cấp GRUB dưới dạng đóng gói riêng, chẳng hạn như dạng rpm (có thể tìm thấy trong các bản phân phối Red Hat, SUSE...), dạng deb (trong bản phân phối Debian).

2.2. Cài đặt GRUB trong môi trường Linux

Cần phân biệt 2 bước của cài đặt GRUB: (i) cài đặt trong môi trường hệ điều hành để có thể sử dụng được GRUB và, (ii) cài đặt GRUB để GRUB làm trình khởi động máy tính. Bước 2 sẽ được đề cập trong chương Sử dụng GRUB.

Sau khi tải về một thư mục thích hợp, giải nén bằng lệnh

tar xzvf grub-0.93.tar.gz

Sau đó:

cd  grub-0.93.tar.gz
./configure

(Để liệt kê các tuỳ chọn khi biên dịch:

./configure --help | more

)

Tiếp theo:

make
make install

Quá trình này sẽ cài đặt shell grub, chương trình kiểm tra multiboot mbchk, các hình ảnh GRUB (thông thường được cài vào thư mục /usr/share/grub/i386-pc), tài liệu hướng dẫn sử dụng và trang man của GRUB.

3. Sử dụng GRUB

3.1 Chuẩn bị các tập tin cần thiết

Có hai cách cài đặt GRUB làm trình khởi động máy tính: dùng môi trường nguyên thuỷ của GRUB (cách này được khuyên dùng) hoặc dùng môi trường hệ điều hành giống Unix. Để cài đặt GRUB trong môi trường nguyên thuỷ của GRUB, cần tạo đĩa mềm khởi động GRUB. Cài đặt GRUB trong môi trường hệ điều hành giống Unix dùng công cụ grub-install hoặc shell grub, tuy nhiên chúng có thể thăm dò sai BIOS.

Trước khi cài GRUB làm trình khởi động cần chép các tập tin stage1, stage2*stage1_5 từ thư mục /usr/share/grub/i386-pc (thư mục hình ảnh) vào thư mục /boot/grub (thư mục khởi động). Trong số các tập tin *stage1_5 có thể chỉ cần chép tập tin thích hợp với hệ thống tập tin của /boot/grub, chẳng hạn chép tập tin e2fs_stage1_5 nếu thư mục này nằm trên ext2 hoặc ext3. Ngoải ra có thể chép tập tin splash.xpm.gz vào thư mục /boot/grub.

3.2. Thuật ngữ dùng trong GRUB

3.2.1. Xác định thiết bị

(thiết-bị[,số-thứ-tự-phân-vùng][,chữ-cái-tiểu-phân-vùng-bsd])

  • []: thông số tuỳ chọn
  • thiết-bị: fd (ổ đĩa mềm) hoặc hd (ổ đĩa cứng, GRUB không phân biệt IDE hay SCSI hay RAID) theo sau bởi một con số biểu thị số của thiết bị theo BIOS và bắt đầu với 0, ví dụ ổ đĩa cứng IDE sơ cấp được đánh số 0, còn ổ đĩa cứng IDE thứ cấp được đánh số 1. Thứ tự này tương đối tương đương với cách nhân Linux sắp xếp các thiết bị theo chữ cái (a tương ứng với 0, b tương ứng với 1, v.v...). Cũng có thể thiết lập thiết-bị ở dạng thập lục phân hoặc thập phân, thí dụ
    (hd0)
    (0x80)
    (128)
    là tương đương nhau.
  • số-thứ-tự-phân-vùng: là số thứ tự của phân vùng trên ổ đĩa, cũng bắt đầu với 0, phân vùng mở rộng bắt đầu bằng 4, bất kể số phân vùng sơ cấp thực có trên ổ đĩa.
  • chữ-cái-tiểu-phân-vùng-bsd: đại diện cho tiểu phân vùng của BSD, như a hay e.

Cú pháp tắt gọi tiểu phân vùng BSD là (thiết-bị[,chữ-cái-tiểu-phân-vùng-bsd]), trong trường hợp này GRUB sẽ tìm phân vùng PC đầu tiên chứa nhãn đĩa BSD, rồi tìm tiểu phân vùng đưọc yêu cầu.

Thí dụ:

  • (hd0): toàn bộ ổ đĩa thứ nhất (hoặc MBR khi cài đặt GRUB)
  • (hd0,0): phân vùng thứ nhất trên ổ đĩa cứng thứ nhất (hoặc sector khởi động của phân vùng này khi cài GRUB)
  • (hd0,4): phân vùng mở rộng thứ nhất trên ổ đĩa cứng thứ nhất
  • (hd1,a): phân vùng BSD a trên ổ đĩa cứng thứ hai; nếu cần xác định cụ thể số PC slice nào được dùng, sử dụng cú pháp như (hd1,0,a), nếu bỏ trống số PC slice, GRUB tìm PC slice đầu tiên có phân vùng BSD a
  • (fd0): ổ đĩa mềm thứ nhất

Ở hệ thống có 2 đĩa cứng IDE và 2 đĩa cứng SCSI, trình tự khởi động trong BIOS được thiết lập là "IDE trước SCSI", GRUB sẽ dùng các nhãn sau:

  • (hd0) Đĩa cứng IDE thứ nhất
  • (hd1) Đĩa cứng IDE thứ hai
  • (hd2) Đĩa cứng SCSI thứ nhất
  • (hd3) Đĩa cứng SCSI thứ hai

Ngoài ra còn có thiết bị ổ đĩa mạng (nd) nếu khi cài đặt GRUB có bật tính năng hỗ trợ mạng. Có thể dùng chức năng hoàn thành dòng lệnh của GRUB, ví dụ gõ root ( rồi <TAB>, GRUB sẽ liệt kê các ổ đĩa, phân vùng, hay tên tập tin.

3.2.2. Xác định tập tin

Có 2 cách xác định tập tin, bằng tên tập tin tuyệt đối hoặc bằng danh sách khối.

  • Tên tập tin tuyệt đối của GRUB giống với tên tập tin tuyệt đối Unix, dùng / làm dấu phân cách thư mục. Ví dụ:
    (hd0,0)/boot/grub/menu.lst
    có nghĩa là tập tin (hd0,0)/boot/grub/menu.lst nằm ở phân vùng đầu tiên của ổ đĩa cứng thứ nhất. Nếu bỏ qua tên thiết bị trong tên tập tin tuyệt đối, GRUB dùng thiết bị root ngầm định. Thí dụ nếu đã thiết lập thiết bị root, chẳng hạn như (hd1,0), bằng lệnh root thì /boot/kernel có nghĩa là (hd0,1)/boot/kernel.

  • Danh sách khối (block list) dùng để xác định tập tin không xuất hiện trong hệ thống tập tin, chẳng hạn như một trình nạp chuỗi (chainloader). Cú pháp:

    [offset]+độ-dài[,offset]+độ-dài]...

    Thí dụ

    0+100,200+1,300+300
    GRUB đọc các khối 0 đến 99, khối 200 và khối 300 đến 599.

    Nếu bỏ qua offset, GRUB sẽ lấy offset là 0.

    Cũng như trong cú pháp tên tập tin, nếu danh sách khối không chứa tên thiết bị thì GRUB sẽ dùng thiết bị root của GRUB. Thí dụ +1 khi thiết bị root là (hd0,1) tương ứng với (hd0,1)+1.

    Lệnh blocklist liệt kê danh sách khối của tập tin, ví dụ:

    grub> blocklist (hd1,0)/vmlinuz
    (hd1,0)1322144+96,1322248+1227
    có nghĩa là tập tin vmlinux, nằm ở phân vùng thứ nhất của đĩa cứng thứ hai, chiếm 96 khối kể từ khối 1322144 và 1227 khối kể từ khối 1322248 – có thể thấy rằng tập tin này hơi bị phân mảnh.

3.3. Các tập tin hình ảnh của GRUB

GRUB bao gồm một số hình ảnh: 2 giai đoạn chính, các giai đoạn tuỳ chọn gọi là Giai đoạn 1.5, và 2 hình ảnh khởi động mạng.

stage1
Giai đoạn 1, là một hình ảnh chính dùng đề khởi động GRUB, kích thước 512 byte.
stage2
Giai đoạn 2, là hình ảnh cốt lõi của GRUB.
e2fs_stage1_5
fat_stage1_5
ffs_stage1_5
jfs_stage1_5
minix_stage1_5
reiserfs_stage1_5
vstafs_stage1_5
xfs_stage1_5
Tất cả các hình ảnh này được gọi là Giai đoạn 1.5.
nbrub
pxebrub
Là các hình ảnh khởi động mạng.

3.4. Cơ chế khởi động dùng trong GRUB

Trên sector thứ nhất của đĩa cứng chứa, ngoài bảng phân vùng, một đoạn mã thực thi được là giai đoạn đầu tiên của quá trình khởi động máy tính, hoặc đoạn mã IPL (initial program load). Đoạn mã chuẩn này là cái mà lệnh fdisk /mbr trên DOS tạo ra. Khi thiết lập trong BIOS quy định khởi động từ đĩa cứng đó, BIOS sẽ trao quyền điều khiển cho IPL hoặc đoạn mã giai đoạn một. Khi đoạn mã chuẩn được nạp, nó sẽ quyết định phân vùng nào là chủ động (active) và trao quyền điều khiển cho đoạn mã thực thi được nằm ở trong hoặc gần sector thứ nhất của phân vùng chủ động. Những gì xảy ra tiếp theo phụ thuộc vào hệ điều hành. Ở các hệ điều hành DOS cũ, phần cốt lõi thi hành được của hệ điều hành nằm ngay tại vị trí đầu tiên của đĩa và được khởi động trực tiếp từ giai đoạn một. Trong các trường hợp điển hình hơn, một chương trình khởi động giai đoạn hai sẽ được nạp và đến lượt nó sẽ biết nơi nào để tìm nhân hoặc các thành phần cốt lõi của hệ điều hành và khởi động chúng. Khi GRUB hoặc một trình khởi động được cài đặt, đoạn mã của trình khởi động đó sẽ thay thế đoạn mã IPL chuẩn. Nó phải vừa vặn trong 512 byte và còn phải chia sẻ chung với bảng phân vùng. Khác biệt chính giữa một trình khởi động và đoạn mã IPL chuẩn là quyền điều khiển sẽ đi đâu tiếp sau đó. Trong trường hợp của GRUB, quyền điều khiển sẽ được trao cho trình Giai đoạn 2 (hoặc Giai đoạn 1.5).

Giai đoạn 1 được cài vào MBR hoặc vào sector khởi động của phân vùng, còn Giai đoạn 2 được đặt trên một hệ thống tập tin. Giai đoạn 1.5 có thể được cài trong một hệ thống tập tin (chẳng hạn như ở phân vùng /boot), trong vùng khởi động của FFS hoặc ReiserFS, và trong các sector ngay sau MBR vì Giai đoạn 1.5 đủ nhỏ và các sector ngay sau MBR thường không được sử dụng. Kích thước của vùng này là số sector cho mỗi head trừ đi 1. Giai đoạn 1.5 hoặc Giai đoạn 2 có thể được đặt ở bất cứ nơi đâu, và Giai đoạn 2 có thể nạp tập tin cấu hình từ bất cứ nơi đâu trên đĩa cứng (tập tin cấu hình không cần phải được đặt trong một hệ thống tập tin).

Vì vậy tất cả công việc mà Giai đoạn 1 phải làm là tải Giai đoạn 2 hoặc Giai đoạn 1.5. Giai đoạn 1 mã hoá vị trí của Giai đoạn 2 (hay Giai đoạn 1.5) ở dạng danh sách khối, nên nó không hiểu bất cứ cấu trúc hệ thống tập tin nào. Vì GRUB hỗ trợ cả chế độ CHS lẫn LBA nên Giai đoạn 1 trong GRUB, sau khi thăm dò thông số và chế độ truy cập của đĩa cứng, chỉ tải sector đầu tiên của Giai đoạn 2 (hoặc Giai đoạn 1.5) và Giai đoạn 2 tự nó tải phần còn lại (tức là tải từ địa chỉ bắt đầu của nó cộng thêm 512 byte).

Giai đoạn 1.5 là cầu nối giữa stage1stage2, nghĩa là Giai đoạn 1.5 được Giai đoạn 1 nạp và Giai đoạn 1.5 nạp Giai đoạn 2. stage1 không hiểu bất kì hệ thông tập tin nào nhưng *_stage1_5 hiểu một hệ thống tập tin (chẳng hạn e2fs_stage1_5 hiểu ext2fs. Giai đoạn 1.5 cho phép Giai đoạn 2 có thể được nạp từ một hệ thống tập tin bằng đường dẫn thông thường mà không cần phải dùng danh sách khối. Vì vậy có thể an toàn di chuyển vị trí của stage2 đến một nơi khác (chẳng hạn như khi giải phân mảnh hệ thống tập tin), ngay cả sau khi GRUB đã được cài đặt. Gai đoạn 1 nạp Giai đoạn 1.5 vào bộ nhớ nếu cần. Một số phần cứng cần bước trung gian để nạp Giai đoạn 2, chẳng hạn như khi phân vùng /boot nằm ở vị trí quá 1024 cylinder đầu của ổ cứng hoặc khi sử dụng chế độ LBA.

3.5. Tạo ổ đĩa mềm khởi động GRUB

Là quá trình chép các tập tin stage1stage2 từ thư mục hình ảnh vào block thứ nhất và thứ hai trên đĩa mềm. Quá trình này sẽ phá huỷ dữ liệu hiện đang lưu trữ trên đĩa mềm.

Các lệnh để thực hiện điều này trên một hệ điều hành giống UNIX:

# cd /usr/share/grub/i386-pc
# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records out
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
153+1 records in
153+1 records out
#

3.6. Cài GRUB trong môi trường nguyên thuỷ của GRUB

3.6.1. Cài GRUB dùng lệnh setup

Cài stage1 của GRUB theo cách này sẽ xoá sector khởi động đang được một hệ điều hành sử dụng. Hiện tại GRUB có thể trực tiếp khởi động GNU Mach, Linux, FreeBSD, NetBSD, và OpenBSD, vì vậy dùng GRUB trên sector khởi động thường là an toàn. Nhưng nói chung nên sao lưu sector đầu tiên của phân vùng sắp cài stage1 của GRUB. Điều này không quan trọng lắm nến cài GRUB vào sector đầu tiên của đĩa cứng, vì dễ dàng khôi phục nó (chẳng hạn như chạy fdisk /mbr trong DOS).

Để cài GRUB trong môi trường nguyên thuỷ, vốn là điều được khuyên, cần tạo đĩa khởi động GRUB và khởi động lại máy tính với đĩa khởi động đó. Một khi đã được khởi động, GRUB sẽ trình bày giao diện dòng lệnh.

Đầu tiên, định thiết bị root cho thư mục khởi động:

grub> root (hd0,0)

Có thể dùng lệnh find nếu không chắc phân vùng nào thực sự chứa các tập tin này:

grub> find /boot/grub/stage1

Cần lưu ý là thiết bị root của GRUB không nhất thiết là phân vùng root của hệ điều hành (nếu cần xác định phân vùng root cho hệ điều hành, thêm thông số đó vào lệnh kernel).

Một khi đã thiết lập thiết bị root chính xác, chạy lệnh setup:

grub> setup (hd0)

Lệnh này sẽ cài GRUB lên MBR của ổ đĩa thứ nhất. Nếu muốn cài GRUB vào sector khởi động của một phân vùng thay vì vào MBR, chỉ định phân vùng muốn cài GRUB:

grub> setup (hd0,0)

Nếu cài GRUB vào phân vùng hoặc ổ đĩa không phải là ổ đĩa đầu tiên, cần nạp chuỗi GRUB từ một trình khởi động khác.

Bây giờ có thể khởi động GRUB mà không cần đĩa mềm GRUB.

Nói thêm về lệnh setup:

setup [--force-lba] [--stage2=tập_tin_stage2_hđh] [--prefix=thư_mục] thiết_bị_cài_đặt [thiết_bị_hình_ảnh]

Lệnh này dùng để cài đặt GRUB tự động. setup không truy cập trực tiếp vào đĩa cứng mà gọi embedinstall để thực hiện công việc. Trước hết nó kiểm tra xem có một tập tin stage1.5 hay không và có thể nhúng (embed) vào một nơi an toàn hay không, Sau đó, setup sử dụng install, một lệnh linh hoạt hơn, ở hậu trường và cài GRUB vào thiết bị thiết_bị_cài_đặt. Nếu chỉ định thiết_bị_hình_ảnh, nó sẽ tìm các hình ảnh GRUB trong thiết bị thiết_bị_hình_ảnh, nếu không nó sẽ dùng thiết bị root hiện tại được thiết lập bằng lệnh root. Nếu thiết_bị_cài_đặt là một đĩa cứng, nó sẽ nhúng Giai đoạn 1.5 nếu có thể. Tuỳ chọn --prefix chỉ định thư mục đặt các hình ảnh GRUB. Nếu không được chỉ định, GRUB sẽ tự động tìm chúng trong /boot/grub/grub (dĩ nhiên là trong thiết bị root đã được quy định bởi lệnh root trước đó.)

Nếu có chỉ định, các tuỳ chọn --force-lba--stage2 được chuyển vào lệnh install.

Thí dụ về cài GRUB lên đĩa cứng với /boot được gán trên phân vùng riêng biệt:

setup (hd0) (hd2,0)

Xuất hiện các thông báo:

Checking "/boot/grub/stage1" no
Checking "/grub/stage1" yes
Checking "/grub/stage2" yes
Checking "/grub/stage1_5" yes
Running "embed/grub/e2fs_stage1_5 (hd0)" 22 sectors are embedded
Running "install /grub/stage1 d (hd0) (hd0)1+22 p (hd2,0)/grub/stage2 /grub/menu.lst”

Lưu ý: stage1.5 đã được nhúng và (/boot)/grub/stage2 đã thay đổi (cập nhật vị trí tương ứng của stage2menu.lst).

3.6.2. Cài GRUB dùng lệnh install

install [--force-lba] [--stage2=tập_tin_stage2_hđh] tập_tin_stage1 [d] thiết_bị_đích tập_tin_stage2 [địa_chỉ] [p] [tập_tin_cấu_hình] [tập_tin_cấu_hình_thực]

Lệnh này khá phức tạp, và không nên dùng nếu không quen thuộc với GRUB – thay vào đó nên dùng setup.

Nói ngắn gọn, lệnh này sẽ thực hiện một cài đặt đầy đủ với giả định Giai đoạn 2 hay 1.5 đã có tại vị trí cài đặt cuối cùng.

Đi vào chi tiết hơn, nó sẽ tải tập_tin_stage1, xác nhận rẳng nó là Giai đoạn 1 đúng số phiên bản của GRUB, cài đặt một danh sách khối để nạp tập_tin_stage2 làm Giai đoạn 2 (nghĩa là tập_tin_stage2 sẽ trao cho Giai đoạn 1 vị trí của Giai đoạn 2). Nếu có tuỳ chọn d, Giai đoạn 1 luôn luôn tìm đĩa thực tế đã cài tập_tin_stage2 hơn là dùng ổ đĩa khởi động. Giai đoạn 2 sẽ được nạp tại địa chỉ địa_chỉ, phải là 0x8000 đối với Giai đoạn 2 thực, và 0x2000 đối với Giai đoạn 1.5. Nếu địa_chỉ không được chỉ định, GRUB sẽ xác định địa chỉ tự động. Sau đó nó viết Giai đoạn 1 đã hoàn chỉnh vào khối đầu tiên của thiết bị thiết_bị_đích. Nếu tuỳ chọn p hoặc tập_tin_cấu_hình được chỉ định, nó sẽ đọc khối đầu tiên của stage2, thay đổi nó bằng giá trị của phân vùng mà ở đó tập_tin_stage2 được tìm thấy (đối với p) hoặc đặt chuỗi tập_tin_cấu_hình vào vùng cho stage2 biết nơi tìm tập tin cấu hình lúc khởi động. Cũng như vậy, nếu tập_tin_cấu_hình_thực được chỉ định và tập_tin_stage2 là Giai đoạn 1.5, thì tập_tin_cấu_hình được vá bằng tên tập tin cấu hình tập_tin_cấu_hình_thực. Để dễ hiểu hơn cho trường hợp nhúng Giai đoạn 1.5: tập_tin_stage2 là vị trí nhúng stage1_5, tập_tin_cấu_hình là vị trí của stage2 (theo lô-gic, stage2 là tập tin cấu hình cho stage1_5), tập_tin_cấu_hình_thực là vị trí của menu.lst. Lệnh install không phát sinh sector bitmap cho stage2, tức là tham số tập_tin_cấu_hình, mà nó cần viết chuỗi tập_tin_cấu_hìnhtập_tin_cấu_hình_thực (không ở dạng block bitmap mà ở dạng tên tập tin thuần tuý) tương ứng vào stage1_5 và stage2. stage2 nằm trên hệ thống tập tin, vì vậy tuỳ chọn --stage2 giúp cho việc viết được an toàn hơn.

Lệnh này giữ lại DOS BPB (và đối với đĩa cứng là bảng phân vùng) của sector sẽ được cài Giai đoạn 1.

Lưu ý:

  • Một số BIOS bị lỗi cần phải chỉ định tuỳ chọn d cho dù Giai đoạn 2 nằm ở ổ đĩa khởi động hay không Khiếm khuyết này gặp ở: Fujitsu LifeBook 400 BIOS version 31J0103A, HP Vectra XU 6/200 BIOS version GG.06.11.
  • Một số BIOS không trả về bitmap hỗ trợ LBA đúng ngay cả chúng thực sự có hỗ trợ; vì vậy GRUB cung cấp giải pháp để bỏ qua bitmap sai, đó là tuỳ chọn --force-lba. Đừng dùng tuỳ chọn này nếu BIOS không hỗ trợ LBA (chế độ LBA dùng firmware để vượt qua giới hạn 1024 cylinder của BIOS).

Phải chỉ định tuỳ chọn --stage2 trong shell grub nếu không thể tháo gán hệ thống tập tin nơi chứa tập tin stage2. Đối số là tên tập tin trong hệ điều hành.

Thí dụ về sử dụng lệnh install:

root (hd0,1)
embed /boot/grub/reiserfs_stage1_5 (hd0) # or e2fs_stage1_5

(và lưu ý số sector)

install /boot/grub/stage1 (hd0) (hd0)1+<số sector có từ lệnh embed> p /boot/grub/stage2 /boot/grub/menu.lst

(hoặc dùng setup (hd0) )

3.7. Cài GRUB trong môi trường hệ điều hành giống Unix

3.7.1. Cài GRUB dùng lệnh grub-install

Cách này hoàn toàn không được khuyến khích, vì có thể máy tính sẽ không thể khởi động được với GRUB. Thí dụ, hầu hết các hệ điều hành không cho GRUB biết cách ánh xạ chính xác ổ đĩa BIOS sang thiết bị của hệ điều hành, GRUB chỉ đoán cách ánh xạ. Trong hầu hết các trường hợp thì quá trình này thành công, nhưng không luôn luôn như vậy. Do đó GRUB cung cấp tập tin ánh xạ do người dùng định nghĩa device.map; nếu tập tin này cho thấy ánh xạ sai bạn cần phải sửa nó lại. Nếu không may phải cài đặt GRUB trong môi trường hệ điều hành giống UNIX, gọi lệnh grub-install với tư cách siêu người dùng (root). Cách sử dụng rất dễ dàng, bạn chỉ cần chỉ định một đối số về nơi cài đặt GRUB. Đối số có thể là tập tin thiết bị hay ổ đĩa/phân vùng theo GRUB. Cú pháp:

grub-install thiết_bị_cài_đặt

Thí dụ: cài GRUB vào MBR của ổ đĩa IDE thứ nhất trong Linux:

# grub-install /dev/hda

Nếu đây cũng là ổ đĩa BIOS thứ nhất:

# grub-install 'hd(0)'

Các thí dụ trên giả định rằng dùng các hình ảnh GRUB ở thư mục root. Nếu muốn GRUB dùng hình ảnh ở thư mục không phải là thư mục root, cần chỉ định tuỳ chọn --root-directory. Cách dùng điển hình là tạo đĩa mềm khởi động GRUB với một hệ thống tập tin. Thí dụ:

# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# grub-install --root-directory=/mnt '(fd0)'
# umount /mnt

Một thí dụ khác là khi có một phân vùng khởi động được gán tại /boot. Vì GRUB là một trình nạp khởi động, nó không biết gì về các điểm gán, nên cần chạy lệnh grub-install như sau:

# grub-install --root-directory=/boot /dev/hda

Như trên đã nói, việc đoán ổ đĩa BIOS trong hệ điều hành giống UNIX là khá khó khăn. Vì vậy, sau khi cài đặt, grub-install sẽ nhắc người dùng kiểm ra xem nó có đoán đúng các ánh xạ không. Cần cẩn thận, vì nếu kết quả xuất ra sai máy tính rất có thể bạn sẽ gặp rắc rối khi khởi động lại máy tính.

Các tuỳ chọn của lệnh grub-install

--help
In tóm tắt về các tuỳ chọn dòng lệnh và thoát.
--version
In số phiên bản của GRUB và thoát.
--force-lba
Bắt buộc GRUB dùng chế độ LBA. Chỉ dùng tuỳ chọn này nếu BIOS không hoạt động ở chế độ LBA mặc dù nó hỗ trợ chế độ LBA.
--root-directory=thư_mục
Cài các hình ảnh GRUB vào thư mục thư_mục thay vì vào thư mục root. Tuỳ chọn này có ích khi bạn muốn cài GRUB vào một phân vùng riêng biệt hoặc vào một ổ đĩa di động Thí dụ cho trường hợp bạn có một thư mục boot riêng được gán tại /boot:
grub-install --root-directory=/boot 'hd0'
--grub-shell=tập_tin
Dùng tập_tin làm shell grub. Bạn có thể thêm các tuỳ chọn tuỳ ý vào tập_tin sau tên tập tin, thí dụ:
grub-install --grub-shell="grub –read-only" /dev/fd0
--recheck
Kiểm tra lại ánh xạ thiết bị, ngay cả khi /boot/grub/device.map đã tồn tại. Nên dùng tuỳ chọn này mỗi khi thêm/tháo một đĩa vào/ra khỏi máy tính.

Lưu ý rằng grub-install thực chất là một Bourne shell script và chức năng thực sự do shell grub thực hiện. Vì vậy có thể chạy grub trực tiếp để cài GRUB, mà không cần grub-install. Nhưng không nên làm như vậy trừ khi bạn rất quen thuộc với các yếu tố nội tại của GRUB. Việc cài một trình nạp khởi động trong một hệ điều hành đang chạy là cực kỳ nguy hiểm.

3.7.2. Cài GRUB trong shell grub

Cách này dùng lệnh grub trong môi trường hệ điều hành.

Cần lưu ý là shell grub là trình mô phỏng – nó thay thế các lời gọi BIOS bằng các lời gọi hệ thống UNIX và các hàm libc, nó không chạy dưới môi trường nguyên thuỷ, vì vậy đôi khi nó hoạt động không chính xác, nhất là trong việc ánh xạ giữa các ổ đĩa BIOS và các thiết bị hệ điều hành.

Quá trình cài đặt dùng shell grub tương tự như ở Giai đoạn 2 nguyên thuỷ. Bạn cần cẩn thận về buffer cache. grub dùng thiết bị thô thay vì hệ thống tập tin mà hệ điều hành đang sử dụng, vì vậy có khả năng cache inconsistency nào đó gây hư hỏng hệ thống tập tin. Lời khuyên là:

  • tháo gán trước khi chạy grub, nếu có thể, các ổ đĩa mà GRUB có thể sẽ viết dữ liệu lên.
  • gán ở chế độ chỉ-đọc nếu không thể tháo gán ổ đĩa nhưng có thể gán với cờ chỉ-đọc.
  • chắc chắn rằng không có bất kì hoạt động đĩa nào trong khi chạy lệnh grub nếu ổ đĩa bắt buộc phải gán với cờ đọc-viết.
  • khởi động lại hệ điều hành càng sớm càng tốt. Điều này có thể không cần thiết nếu các bước trên đã được tuân thủ, nhưng khởi động lại là cách an toàn nhất.

Sau khi hoàn tất cài đặt, việc nhập lệnh quit là rất quan trọng vì quit làm cho buffer cache trở nên consistent; đừng ấn <C-c>.

Nếu muốn cài GRUB không tương tác, chỉ định tuỳ chọn --batch ở dòng lệnh. Một thí dụ đơn giản:

#!/bin/sh

# Du`ng /usr/sbin/grub ne^'u o+? he^. tho^'ng cu~.
/sbin/grub --batch <<EOT 1>/dev/null 2>/dev/null
root (hd0,0)
setup (hd0)
quit
EOT

Các tuỳ chọn của lệnh grub:

--help
In tóm tắt về các tuỳ chọn dòng lệnh và thoát.
--version
In số phiên bản của GRUB và thoát.
--verbose
In các thông điệp verbose nhằm mục đích gỡ lỗi.
--device-map=tập_tin
Dùng tập tin ánh xạ thiết bị tập_tin.
--no-floppy
Không thăm dò ổ đĩa mềm. Tuỳ chọn này không có tác dụng nếu tuỳ chọn --device-map được chỉ định.
--probe-second-floppy
Thăm dò ổ đĩa mềm thứ hai. Shell grub không thăm dò nó nếu tuỳ chọn này không được chỉ định vì đôi khi nó cần thời gian lâu. Shell grub bỏ qua tuỳ chọn này nếu đã chỉ đinh tập tin ánh xạ thiết bị.
--config-file=tập_tin
Đọc tập tin cấu hình tập_tin thay vì /boot/grub/menu.lst.
--boot-drive=ổ_đĩa
Thiết lập ổ đĩa khởi động stage2ổ_đĩa. Đối số này là một số nguyên (thập thân, bát phân hay thập lục phân).
--install-partition=phân_vùng
Thiết lập phân vùng khởi động stage2phân_vùng. Đối số này là một số nguyên (thập thân, bát phân hay thập lục phân).
--no-config-file
Không dùng tập tin cấu hình.
--no-curses
Không dùng giao diện curses.
--batch
Tuỳ chọn này có cùng ý nghĩa như --no-config-file --no-curses.
--read-only
Không viết vào bất cứ đĩa nào.

Có thể cài GRUB theo một tập tin có sẵn chứa các thông số cần thiết cho lệnh grub. Thí dụ có tập tin /etc/grub.conf như sau:

root (hd0,4)
install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst
quit

Và bạn vừa hiệu chỉnh tập tin device.map, bây giờ bạn phải cài lại GRUB:

grub --batch --device-map=/boot/grub/device.map </etc/grub.conf

Thí dụ bạn có tập tin /etc/grubfd.conf dùng để cài GRUB vào đĩa mềm:

#
# /etc/grubfd.conf – ta.o ddi~a me^`m kho+?i ddo^.ng
#
# DDe^? ca`i grub va`o ddi~a me^`m, nha^.p le^.nh sau:
# grep -v ^# /etc/grubfd.conf | grub --batch
#
root (fd0)
install /boot/grub/stage1 d (fd0) (fd0)/boot/grub/stage2 0x8000 p (fd0)/boot/grub/menu.lst
quit

Bạn dùng lệnh sau để cài GRUB vào đĩa mềm (đã được chú thích trong tập tin đó):

grep -v ^# /etc/grubfd.conf | grub --batch

3.7.3. Ánh xạ giữa các ổ đĩa BIOS và các thiết bị hệ điều hành

Khi chỉ định tuỳ chọn --device-map, shell grub tạo tập tin ánh xạ thiết bị, thường là /boot/grub/device.map, nếu chưa có tập tin này. Nếu tập tin này đã tồn tại, shell grub đọc nó để ánh xạ các ổ đĩa BIOS theo các thiết bị hệ điều hành. Tập tin này gồm các dòng:

thiết_bị tập_tin

thiết_bị là một ổ đĩa, cú pháp dùng theo cú pháp của GRUB; tập_tin là một tập tin thiết bị của hệ điều hành.

Lý do shell grub cung cấp tập tin ánh xạ thiết bị là vì nó không thể đoán ánh xạ giữa ổ đĩa BIOS và thiết bị hệ điều hành một cách chính xác trong một số môi trường; thí dụ như khi thay đổi trình tự khởi động giữa IDE và SCSI trong BIOS, shell grub sẽ nhầm lẫn thứ tự của chúng.

Vì vậy hãy điều chỉnh lại tập tin này nếu shell grub nhầm lẫn. Bạn có thể thêm chú thích trong tập tin này, nếu cần, vì shell grub xem các dòng bắt đầu bằng kí tự # là dòng chú thích.

Sau khi thay đổi nội dung tập tin device.map cần cài lại GRUB.

3.8. Khởi động hệ thống với GRUB

GRUB có 2 cách khác nhau để khởi động hệ thống. Một cách là nạp hệ điều hành trực tiếp, cách kia là nạp chuỗi một trình nạp khởi động khác, vả trình nạp khởi động nàysẽ nạp hệ điều hành. Nói chung thì cách thứ nhất được ưa chuộng hơn vì không phải cài hay duy trì trình khởi động khác. Tuy nhiên đôi khi vẫn cần dùng cách thứ hai vì GRUB không hỗ trợ mọi hệ điều hành về bản chất, đặc biệt là các hệ điều hành thuộc sở hữu độc quyển.

3.8.1. Khởi động hệ điều hành trực tiếp

Nói chung GRUB có thể khởi động Linux, FreeBSD, NetBSD, OpenBSD, GNU HURD theo các bước sau:

  • Quy định thiết bị root của GRUB là ổ đĩa nơi giữ các hình ảnh hệ điều hành bằng lệnh root.
  • Tải hệ điều hành bằng lệnh kernel, có thể gắn thêm các thông số cho nhân.
  • Nếu cần, tải initrd bằng lệnh initrd hoặc các mô-đun bằng lệnh module hoặc modulenounzip.
  • Chạy lệnh boot.

3.8.2. Tải trình nạp khởi động khác

Để khởi động các hệ điều hành không được hỗ trợ, GRUB nạp chuỗi một trình nạp khỏi động cho hệ điều hành đó. Thông thường, trình khởi động được đặt ở sector khởi động của phân vùng cài đặt hệ điều hành.

  • Thiết lập thiết bị root của GRUB đến phân vùng hệ điều hành bằng lệnh rootnoverify
    grub> rootnoverify hd(0,0)
  • Thiết lập cờ active trong phần vùng bằng lệnh makeactive
    grub> makeactive
  • Tải trình nạp khởi động bằng lệnh chainloader
    grub> chainloader +1
    +1 biểu thị GRUB đọc một sector kể từ nơi bắt đầu của phân vùng.
  • Chạy lệnh boot

Tuy nhiên DOS và Windows có một số yếu tố phụ thuộc cần chú ý khi muốn khởi động chúng.

3.8.3. Một số thí dụ

3.8.3.1. Linux
  • Thiết lập thiết bị root vào ổ đĩa cài GNU/Linux. Có thể dùng lệnh find /vmlinuz (hoặc tương tự).
  • Tải nhân:
    grub> kernel /vmlinuz root=/dev/hda1
    Nếu cần chỉ định các tham số cho nhân, gắn chúng vào lệnh trên. Thí dụ để thiết lập vgaext:
    grub> kernel /vmlinux root=/dev/hda1 vga=ext
    Cần lưu ý là phân vùng root ở đây phải theo cách gọi của Linux vì nó được chuyển vào nhân Linux.
  • Nếu có dùng initrd, thực hiện lệnh initrd sau lệnh kernel
    grub> initrd /initrd
  • Cuối cùng chạy lệnh boot.

Lưu ý: nếu dùng initrd và chỉ định tuỳ chọn mem= cho nhân để bắt nó dùng ít bộ nhớ hơn hiện có, thì cũng cần phải chỉ định cùng một kích thước bộ nhớ cho GRUB. Để GRUB biết được kích thước này, chạy lệnh uppermem trước khi tải nhân.

3.8.3.2. FreeBSD

GRUB có thể tải nhân trực tiếp, hoặc ở dạng ELF hoặc định dạng a.out, nhưng cách này không được khuyến khích vì giao diện trình khởi động của FreeBSD đôi khi thay đổi rất nhiều, vì vậy GRUB không thể bảo đảm chuyển chính xác các tham số nhân. Thay vì vậy, nên tải một trình khởi động rất linh hoạt là /boot/loader. Xem thí dụ:

grub> root (hd0,a)
grub> kernel /boot/loader
grub> boot

Phiên bản FreeBSD 5.x dùng mặc định hệ thống tập tin UFS2 mà hiện tại GRUB chưa hỗ trợ, vì vậy phải dùng cách nạp chuỗi:

grub> rootnoverify (hd0,1)
grub> chainloader +1
grub> boot
3.8.3.3. NetBSD

GRUB có thể tải trực tiếp a.out và ELF của NetBSD, theo các bước sau:

  • Thiết lập thiết bị root của GRUB với lệnh root.
  • Nạp nhân với lệnh kernel. Nên gắn tuỳ chọn --type=netbsd nếu muốn tải nhân ELF:
    grub> kernel --type=netbsd /netbsd-elf
  • Chạy boot.

Tuy nhiên hiện tại GRUB không cho phép chuyển tham số nhân, vì vậy dùng cách nạp chuỗi có thể tốt hơn.

3.8.3.4. OpenBSD

Cách thực hiện hoàn toàn giống như NetBSD. Tuy nhiên ở những phiên bản sau này (sau 2.7), có thể cách trên không thành công. Khi đó có thể dùng cách nạp chuỗi.

3.8.3.5. DOS/Windows

GRUB không thể khởi động DOS hay Windows trực tiếp, vì vậy cần phải nạp chuỗi. Tuy nhiên các trình khởi động của chúng có một số vấn đề phụ thuộc quan trọng, nên nó có thể không hoạt động nếu chỉ đơn thuần nạp chuỗi chúng. GRUB có 2 chức năng giúp khắc phục các khó khăn này. Nếu DOS hay Windows được cài trên ổ đĩa cứng không phải là ổ thứ nhất, cần phải dùng kĩ thuật tráo đổi đĩa, vì các hệ điều hành này không thể khởi động từ ổ cứng không phải là ổ thứ nhất. Một giải pháp trong GRUB là dùng lệnh map, thí dụ để chuyển đổi đĩa cúng thứ nhất và thứ hai:

grub> map (hd0) (hd1)
grub> map (hd1) (hd0)

Cần lưu ý là cách này chỉ hiệu quả khi DOS hay Windows dùng BIOS để truy cập ổ đĩa được chuyển đổi. Nếu hệ điều hành đó dùng trình điều khiển đặc biệt cho ổ đĩa đó, cách này có thể không hoạt động. Một vấn đề khác là khi cài nhiều hơn một bản của hệ điều hành DOS/Windows trên một đĩa cứng các hệ điều hành này có thể lẫn lộn nếu có nhiều hơn một phân vùng sơ cấp cho DOS/Windows. Dĩ nhiên nên tránh những trường hợp như thế này, nhưng GRUB đưa ra một giải pháp khi muốn làm như vậybằng kĩ thuật che/khử che phân vùng. Nếu GRUB che một phân vùng DOS hay Windows, DOS hay Windows sẽ bỏ qua phân vùng đó. Nếu GRUB khử che một phân vùng DOS hay Windows, DOS hay Windows sẽ nhận diện được phân vùng đó. Vì vậy nếu DOS hay Windows được cài ở phân vùng thứ nhất và thứ hai của đĩa cứng thứ nhất, để khởi động bản hệ điều hành trên phân vùng thứ nhất:

grub> unhide (hd0,0)
grub> hide (hd0,1)
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> makeactive
grub> boot

3.9. Cấu hình

Ở giao diện dòng lệnh cần phải gõ vài lệnh để khởi động hệ điều hành. GRUB cũng cung cấp giao diện thực đơn mà chỉ cần chọn một đề mục là mọi thứ được thực hiện để khởi động hệ điều hành.

Để có thể sử dụng giao diện thực đơn cần phải có tập tin cấu hình menu.lst ở thư mục khởi động. Khi hệ thống được khởi động, GRUB đọc nội dung của tập tin cấu hình. Không cần phải cài GRUB lại mỗi khi thay đổi nội dung tập tin này. Tập tin này mặc định nằm ở thư mục /boot/grub, nhưng có thể đặt ở bất cứ nơi đâu cũng như có thể đặt bất cứ tên gì cho nó.

Phân tích thí dụ về một tập tin cấu hình:

Tập tin này bắt đầu bằng các thiết lập chung, các tuỳ chọn liên hệ đến giao diện thực đơn. Các lệnh này có thể được đặt trước bất cứ đề mục nào (bắt đầu với lệnh title).

#
# Ta^.p tin ca^'u hi`nh thu+.c ddo+n ma^~u
#

Đây là các dòng bình luận. GRUB bỏ qua các dùng bắt đầu với kí tự # và các dòng trống.

# Theo ma(.c ddi.nh, kho+?i ddo^.ng dde^` mu.c thu+' nha^'t
default 0

Đề mục thứ nhất (lưu ý là đếm bắt đầu từ 0 chứ không phải 1) sẽ là lựa chọn mặc định.

# Tu+. ddo^.ng kho+?i ddo^.ng sau 30 gia^y
timeout 30

GRUB sẽ khởi động tự động sau 30 giây, trừ khi bị ngắt bởi một nhấn phím.

# Quay la.i dde^` mu.c thu+' hai
fallback 1

Nếu vì bất cứ lí do nào mà đề mục mặc định không hoạt động, quay lại đề mục thứ hai. Ở phần định nghĩa cho hệ điều hành, mỗi đề mục bắt đầu bằng một lệnh đặc biệt title. Không có lệnh boot ở cuối đề mục vì nó sẽ tự động thực hiện nếu GRUB nạp thành công các lệnh khác.

Đối số cho lệnh title được dùng để trình bày một tựa/miêu tả ngắn cho đề mục.

# DDe^? kho+?i ddo^.ng GNU/Linux
title  GNU/Linux
kernel (hd1,0)/vmlinuz root=/dev/hdb1

Khởi động GNU/Linux từ đĩa cứng thứ hai.

# DDe^? kho+?i ddo^.ng FreeBSD
title  FreeBSD
root   (hd0,2,a)
kernel /boot/loader

Khởi động nhân FreeBSD tải từ phân vùng a trên PC slice thứ ba của đĩa cứng thứ nhất.

# DDe^? kho+?i ddo^.ng OS/2
title OS/2
root  (hd0,1)
makeactive
# na.p chuo^~i tri`nh kho+?i ddo^.ng OS/2 tu+` sector thu+' nha^'t
chainloader +1
# Na.p chuo^~i mo^.t ta^.p tin cu. the^?
#chainloader /boot/chain.os2

Khởi động OS/2 dùng cách nạp chuỗi.

# DDe^? kho+?i ddo^.ng Windows NT hoa(.c Windows95
title Thu+.c ddo+n kho+?i ddo^.ng Windows NT / Windows 95
root        (hd0,0)
makeactive
chainloader +1
# DDe^? na.p DOS ne^'u co' ca`i Windows NT
# chainload /bootsect.dos

Khởi động Windows bằng cách nạp chuỗi.

# DDe^? kho+?i ddo^.ng mo^.t he^. ddie^`u ha`nh tre^n ddi~a me^`m
title floppy
pause Ga`i ddi~a me^`m va`o o^? ddi~a
root (fd0)
chainloader +1

Khởi động một hệ điều hành từ đĩa mềm.

# DDe^? ca`i GRUB va`o ddi~a cu+'ng
title Ca`i GRUB va`o ddi~a cu+'ng
root    (hd0,0)
setup   (hd0)

Cài (cài lại) GRUB vào đĩa cứng.

# Thay ddo^?i ma`u sa('c.
title Thay ddo^?i ma`u sa('c
color light-green/brown blink-red/blue

Thay đổi màu sắc của thực đơn.

# Ta?i mo^.t thu+.c ddo+n kha'c
title Thu+.c ddo+n bo^? sung
configfile (hd0,4)/boot/grub/control.lst

Tải thực đơn bổ sung.

Đặc điểm của tập tin cấu hình:
  • các lệnh đặc thù cho thực đơn phải được dùng trước các lệnh khác
  • tập tin phải ở định dạng văn bản thuần tuý
  • # ở đầu dòng cho biết đây chỉ là lời bình
  • các tuỳ chọn cách nhau bằng khoảng trắng
  • số có thể ở dạng thập phân hoặc thập lục phân. Số thập lục phân phải khởi đầu bằng 0x, và phân biệt chữ hoa-thường

Nếu quá trình cài GRUB đã không quy định tập tin cấu hình, vẫn có thể tải tập tin cấu hình trong môi trường GRUB bằng lệnh configfile, thí dụ:

grub> configfile (fd0)/boot/grub/menu.lst

3.10. Bảo mật cho GRUB

Dùng tính năng mật khẩu của GRUB để chỉ cho phép người quản trị dùng các hoạt động tương tác (như biên tập đề mục thực đơn và vào giao diện dòng lệnh). Để sử dụng tính năng này, cần chạy lệnh password trong tập tin cấu hình, như sau:

password --md5 PASSWORD

Khi đó GRUB không cho phép điều khiển tương tác nào (<e> và <c>), cho đến khi gõ phím <p> và nhập đúng mật khẩu. Tuỳ chọn --md5 cho GRUB biết rằng PASSWORD ở định dạng MD5. Nếu không sử dụng tuỳ chọn này, GRUB cho rằng PASSWORD ở dạng văn bản thuần tuý. Mật khẩu có thể được mã hoá bằng lệnh md5crypt. Thí dụ chạy shell grub và nhập mật khẩu:

grub> md5crypt
Password: **********
Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.

Sau đó cắt và dán mật khẩu đã được mã hoá vào tập tin cấu hình. Ngoài ra cũng có thể chỉ định đối số tuỳ chọn cho lệnh password, thí dụ:

password PASSWORD /boot/grub/menu-admin.lst

Khi đó GRUB sẽ nạp /boot/grub/menu-admin.lst làm tập tin cấu hình khi nhập đúng mật khẩu. Nếu muốn chỉ có người quản trị mới có quyền chạy một số đề mục thực đơn nào đó, chẳng hạn như khởi động một hệ điều hành không bảo mật như DOS, có thể dùng lệnh lock; lệnh này luôn luôn dừng lại cho đến khi nhập đúng mật khẩu. Thí dụ:

title Kho+?i ddo^.ng DOS
lock
rootnoverify (hd0,1)
makeactive
chainload +1

Cũng có thể dùng lệnh password thay cho lock. Trong trường hợp này tiến trình khởi động sẽ yêu cầu mật khẩu và dừng lại cho đến khi mật khẩu được nhập chính xác. Vì lệnh password nhận đối số PASSWORD của chính nó nên sẽ có lợi nếu dùng một mật khẩu khác với mật khẩu cho các đề mục khác.

Nên sử dụng lệnh lock/password ngay sau title vì các lệnh trong đề mục thực đơn được thực thi theo thứ tự.

grub-md5-crypt là script gọi shell grub để mã hoá một chuỗi kí tự ở dạng MD5. Mật khẩu do chương trình này mã hoá có thể được dùng với lệnh password.

grub-md5-crypt nhận các tuỳ chọn sau:

--help
In tóm tắt các tuỳ chọn dòng lệnh và thoát
--version
In thông tin phiên bản và thoát
--grub-shell=tập_tin
Dùng tập_tin làm shell grub

3.11. Giao diện người dùng của GRUB

GRUB có cả giao diện thực đơn đơn giản để chọn các đề mục được thiết lập sẵn từ tập tin cấu hình lẫn giao diện dòng lệnh linh hoạt cao để thực hiện bất cứ các tổ hợp lệnh khởi động nào theo ý muốn.

3.11.1. Giao diện dòng lệnh

Giao diện dòng lệnh cung cấp một dấu nhắc và sau nó là vùng văn bản có thể biên tập được giống một dòng lệnh trong Unix hoặc DOS. Mỗi dòng lệnh được thi hành ngay lập tức sau khi nó được nhập vào. Các lệnh này là một phần của các dòng lệnh có thể dùng trong tập tin cấu hình, với cùng một cú pháp. Dùng giao diện dòng lệnh có thể khởi động các hệ điều hành không có trong thực đơn GRUB.

Di chuyển con trỏ và biên tập văn bản trên một dòng có thể được thực hiện nhờ một phần các chức năng có sẵn trong shell Bash:

<C-f>
<PC mũi tên phải>
Di chuyển về trước một kí tự.
<C-b>
<PC mũi tên trái>
Di chuyển về sau một kí tự.
<C-a>
<HOME>
Di chuyển về đầu dòng.
<C-e>
<END>
Di chuyển về cuối dòng.
<C-d>
<DEL>
Xoá kí tự bên dưới con trỏ.
<C-h>
<BS>
Xoá kí tự bên trái con trỏ..
<C-k>
Xoá đoạn văn bản từ vị trí con trỏ hiện tại đến cuối dòng.
<C-u>
Xoá ngược đoạn văn bản từ vị trí con trỏ hiện tại đến đầu dòng.
<C-y>
Lấy lại đoạn văn bản đã xoá vào bộ đệm tại con trỏ.
<C-p>
<PC mũi tên lên>
Di chuyển lên trên trong danh sách các lệnh vừa gõ.
<C-n>
<PC mũi tên xuống>
Di chuyển xuống dưới trong danh sách các lệnh vừa gõ.

Khi gõ các lệnh một cách tương tác, nếu con trỏ ở trong hoặc trước từ đầu tiên trong dòng lệnh, ấn phím <TAB> (hoặc <C-i>) sẽ liệt kê các lệnh có sẵn, và nếu con trỏ ở sau từ đầu tiên, <TAB> sẽ liệt kê các ổ đĩa, phân vùng, và tên tập tin tuỳ vào tình huống.

Lưu ý rằng không thể dùng chức năng hoàn thành dòng lệnh trong hệ thống tập tin TFTP vì bởi vì TFTP không hỗ trợ liệt kê tên tập tin vì lí do bảo mật.

Dùng lệnh help để đọc thông tin về một lệnh, ví dụ để xem thông tin của lệnh root:

help root

3.11.2. Giao diện thực đơn

Giao diện thực đơn khá dễ dùng. Các lệnh của nó tương đối trực quan và được miêu tả trên màn hình.

Về cơ bản, giao diện thực đơn cung cấp danh sách các đề mục khởi động cho người dùng lựa chọn. Dùng các phím mũi tên để chọn đề mục, rồi ấn phím <RET> để chạy nó. Có thể quy định thời gian chờ để khởi động đề mục mặc định (hoặc đề mục đầu tiên nếu không thiết lập), thời gian này sẽ bị ngắt bằng cách nhấn phím bất kì.

Từ giao diện thực đơn có thể vào giao diện dòng lệnh bằng cách ấn <c> (khi đó sẽ giống như trường hợp không có tập tin cấu hình nhưng vẫn có thể quaylại giao diện thực đơn bằng phím <ESC>) hoặc có thể biên tập bất cứ đề mục khởi động nào bằng cách ấn phím <e>.

Nếu giao diện thực đơn được bảo vệ bằng mật khẩu, ấn <RET> rồi <p> và nhập mật khẩu để chọn đề mục.

Biên tập một đề mục trong thực đơn

Để biên tập một đề mục trên thực đơn, đầu tiên ấn <ESC>, sau đó chọn đề mục cần thay đổi bằng các phím con trỏ và ấn <e>, khi đó các dòng lệnh cho đề mục đó sẽ xuất hiện. Chọn dòng cần điều chỉnh bằng các phím con trỏ và ấn <e> lần nữa.

Trong khi biên tập một đề mục, ấn <RET> để thay thế dòng lệnh cũ bằng dòng lệnh vừa điều chỉnh, nếu ấn <ESC> mọi thay đổi sẽ được bỏ qua. Nếu muốn thêm một dòng mới vào đề mục khởi động, ấn <o> nếu thêm vào sau dòng hiện tại hoặc <O> nếu thêm vào trước dòng hiện tại. Để xoá một dòng, ấn <d>. GRUB không hỗ trợ huỷ bỏ thao tác vừa làm, nhưng có thề làm điều tương tự như vậy bằng cách quay trở lại thực đơn chính. Sau khi điều chỉnh xong, ấn <b> để khởi động với đề mục đó.

Giao diện thực đơn ẩn

Nếu thiết bị cuối câm hoặc GRUB được yêu cần che dấu giao diện thực đơn bằng lệnh hiddenmenu, GRUB sẽ không hiển thị giao diện thực đơn và tự động khởi động đề mục mặc định, trừ khi bị ngắt bằng cách ấn phím <ESC>. Khi ngắt thời gian chờ và thiết bị cuối câm, GRUB quay trở lại giao diện dòng lệnh.

3.12. Một số lệnh trong GRUB

3.12.1. Các lệnh chỉ dùng cho thực đơn

default số
Thiết lập mặc định cho đề mục số số. Việc đánh số bắt đầu từ 0, và đề mục số 0 là mặc định nếu lệnh này không được dùng.

Có thể chỉ định saved thay vì một con số. Khi đó, đề mục mặc định là đề mục được lưu bằng lệnh savedefault.

fallback số
Nếu đề mục mặc định có lỗi, ngay lập tức chuyển qua đề mục số thay vì chờ người dùng thao tác. Cách đánh số giống như ở lệnh default. Có thể thiết lập nhiều hơn một fallback.

hiddenmenu
Không hiển thị thực đơn trên thiết bị đầu cuối và đề mục mặc định sẽ được khởi động sau khi hết thời gian chờ. Người dùng vẫn có thể yêu cầu hiển thị thực đơn bằng cách ấn <ESC> trước khi thời gian chờ hết.

timeout gy
Thiết lập thời gian chờ, tính bằng gy giây, trước khi tự động khởi động vào đề mục mặc định.

title tên ...
Bắt đầu một đề mục khởi động mới; nội dung của phần còn lại của dòng này, bắt đầu bằng kí tự đầu tiên không phải là khoảng trắng, được lấy làm tên cho đề mục đó.

3.12.2. Các lệnh chung

Các lệnh này có thể được dùng trong thực đơn lẫn ở dòng lệnh.

color bình_thường [tô_sáng]
Thay đổi màu thực đơn. Màu bình_thường được dùng cho hầu hết các dòng trong thực đơn, và màu tô_sáng được dùng để tô sáng dòng mà con trỏ đang chỉ đến. Nếu không dùng tô_sáng, màu ngược lại của bỉnh_thường được dùng để tô sáng. Định dạng của một màu là tiền_cảnh/hậu_cảnh. tiền_cảnhhậu_cảnh là các tên màu tượng trưng. Tên màu tượng trưng phải là một trong các tên sau:
  • black
  • blue
  • green
  • cyan
  • red
  • magenta
  • brown
  • light-gray

Những tên bên dưới chỉ dùng được cho tiền cảnh.
  • dark-gray
  • light-blue
  • light-green
  • light-cyan
  • light-red
  • light-magenta
  • yellow
  • white

Nhưng chỉ có 8 tên đầu có thể dùng cho hậu_cảnh.

Nếu muốn chớp nháy màu tiền cảnh, dùng tiền tố blink- cho tiền_cảnh.

Lệnh này dùng được trong tập tin cấu hình và ở dòng lệnh. Thí dụ trong tập tin cấu hình:

# Thie^'t la^.p ma`u ma(.c ddi.nh.
color light-gray/blue black/light-gray
# Thay ddo^?i ma`u.
title OS-BS like
color magenta/blue black/magenta

device ổ_đĩa tập_tin
Trong shell grub, chỉ định tập tin tập_tin như là ổ đĩa thực sự cho ổ đĩa BIOS ổ_đĩa. Có thể dùng lệnh này để tạo hình ảnh đĩa, và/hoặc sửa chữa các ổ đĩa được GRUB đoán khi GRUB không xác định được chúng một cách chính xác, như:
grub> device (fd0) /floppy-image
grub> device (hd0) /dev/sd0
Lệnh này chỉ dùng được ở shell grub.

hide phân_vùng
Che dấu phân vùng phân_vùng bằng cách thiết lập bit ẩn trong mã loại phân vùng của nó. Điều này có lợi khi khởi động DOS hay Windows và nhiều phân vùng FAT sơ cấp tồn tại trên một đĩa.

partnew phân_vùng loại từ đến
Tạo một phân vùng sơ cấp mới. phân_vùng là một đặc tả phân vùng theo cú pháp GRUB; loại là loại phân vùng và phải là một số trong khoảng 0–0xff; từđến là các sector khởi đầu và kết thúc, được diễn đạt bằng con số sector tuyệt đối.

parttype phân_vùng loại
Thay đổi loại của phân vùng đang tồn tại. phân_vùng là một đặc tả phân vùng theo cú pháp GRUB; loại là loại của phân vùng mới và phải là một số trong khoảng 0–0xff.

password [--md5] mật_khẩu [tập_tin_cấu_hình_mới]
Nếu được dùng trong phần đầu tiên của một tập tin thực đơn, nó sẽ vô hiệu hoá mọi hoạt động điều khiển biên tập tương tác (bộ phận biên tập đề mục thực đơn và dòng lệnh) và các đề mục được bảo vệ bằng lệnh lock. Nếu mật khẩu mật_khẩu được nhập, nó sẽ tải tập_tin_cấu_hình_mới làm tập tin cấu hình mới và khởi động lại GRUB Giai đoạn 2 nếu tập_tin_cấu_hình_mới được chỉ định. Nếu không, GRUB sẽ chỉ mở khoá các lệnh đặc quyền. Lệnh này cũng có thể được dùng trong phần script, khi đó nó sẽ hỏi mật khẩu trước khi tiếp tục. Tuỳ chọn --md5 bảo GRUB rằng mật_khẩu được mã hoá với md5crypt.

setkey [đến_phím từ_phím]
Thay đổi ánh xạ bàn phím. Phím từ_phím được ánh xạ sang đến_phím. Nếu không có đối số nó sẽ thiết lập lại ánh xạ bàn phím. Lưu ý rằng lệnh này không hoán đổi các phím. Nếu muốn hoán đổi các phím, chạy lệnh này một lần nữa với thông số hoán đổi, như:
grub> setkey capslock control
grub> setkey control capslock
Một phím phải là một chữ cái, một con số, hoặc một trong các kí hiệu sau: escape, exclam, at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft, parenright, minus, underscore, equal, plus, backspace, tab, bracketleft, braceleft, bracketright, braceright, enter, control, semicolon, colon, quote, doublequote, backquote, tilde, shift, backslash, bar, comma, less, period, greater, slash, question, alt, space, capslock, FX (X là một chữ số), và delete. Bảng sau đây miêu tả các kí tự tương ứng với các kí hiệu đó:
exclam
!
at
@
numbersign
#
dollar
$
percent
%
caret
^
ampersand
&
asterisk
*
parenleft
(
parenright
)
minus
-
underscore
_
equal
=
plus
+
bracketleft
[
braceleft
{
bracketright
]
braceright
}
semicolon
;
colon
:
quote
'
doublequote
"
backquote
`
tilde
~
backslash
\
bar
|
comma
,
less
<
period
.
greater
>
slash
/
question
?
space

unhide phân_vùng
Khử ẩn phân vùng phân_vùng bằng cách xoá bit ẩn trong mã loại phân vùng. Lệnh này có ích khi khởi động DOS hoặc Windows và có nhiều phân vùng sơ cấp trên một đĩa cứng.

3.12.3. Các lệnh dùng ở dòng lệnh và đề mục thực đơn

Các lệnh này dùng được ở dòng lệnh và ở đề mục thực đơn. Có thể chạy lệnh help để xem thông tin về các lệnh này.

blocklist tập_tin
In kí hiệu danh sách khối của tập tin tập_tin.

boot
Khởi động hệ điều hành/trình nạp chuỗi đã được nạp. Chỉ cần thiết khi chạy trên dòng lệnh tương tác đầy đủ (nó được hiểu ngầm ở cuối đề mục thực đơn).

cat tập_tin
Hiển thị nội dung tập tin tập_tin. Lệnh này có thể giúp xác định đúng đâu là thư mục gốc của hệ điều hành:
grub> cat /etc/fstab

chainloader [--force] tập_tin
Nạp chuỗi tập_tin. Nếu chỉ định tuỳ chọn --force, nó sẽ cưỡng bức nạp tập_tin, cho dù nó có chữ kí đúng hay không. Điều này giúp nạp một trình nạp khởi động khiếm khuyết (như để khởi động SCO UnixWare 7.1).

cmp tập_tin1 tập_tin2
So sánh tập tin tập_tin1 với tập_tin2. Nếu chúng khác nhau về kích thước, in các kích thước như sau:
Differ in size: 0x1234 [foo], 0x4321 [bar]
Nếu kích thước bằng nhau nhưng các byte ở một offset khác nhau, in các byte như sau:
Differ at the offset 777: 0xbe [foo], 0xef [bar]
Nếu chúng hoàn toàn giống nhau, không in gì cả.

configfile tập_tin
Tải tập_tin làm tập tin cấu hình.

displayapm
Hiển thị thông tin BIOS về APM.

displaymem
Hiển thị thông tin về bộ nhớ đang được sử dụng, bao gồm tất cả các vùng của RAM vật lý được cài đặt, dựa trên thông tin từ BIOS. Giúp xác định hệ thống có bao nhiêu RAM dành cho khởi động.

embed stage1_5 thiết_bị
Ghi Giai đoạn 1.5 stage1_5 vào các sector sau MBR nếu thiết_bị là một ổ đĩa, hoặc vào vùng của trình khởi động nếu thiết_bị là một phân vùng FFS hoặc phân vùng ReiserFS. In con số các sector chiếm bởi stage1_5, nếu thành công. Thông thường không cần chạy lệnh này trực tiếp.

find tên_tập_tin
Tìm tên tập tin tên_tập_tin trong tất cả các phân vùng và in danh sách các thiết bi chứa tập tin. Tên tập tin tên_tập_tin nên là một tên tập tin tuyệt đối như /boot/grub/stage1.

geometry ổ_đĩa [cylinder head sector [tổng_sector]]
In thông tin về ổ đĩa ổ_đĩa. Trong shell grub, có thể thiết lập thông số ổ đĩa tuỳ ý. Số cylinder, số head, số sector và tổng số sector được thiết lập tương ứng cho cylinder, head, sectortổng_sector. Nếu bỏ qua tổng_sector, nó sẽ được tính tự động dựa trên các giá trị C/H/S.

halt --no-apm
Tắt máy tính. Nếu tuỳ chọn --no-apm được chỉ định, không thực hiện lời gọi APM BIOS; nếu không, máy tính dùng APM khi tắt.

help --all [mẫu ...]
Hiển thị thông tin về các lệnh được cài sẵn. Nếu không chỉ định mẫu, lệnh này sẽ cho ra miêu tả ngắn của hầu hết các lệnh có sẵn. Nếu chỉ định tuỳ chọn --all, các miêu tả ngắn cho các lệnh hiếm dùng cũng được trình bày. Nếu chỉ định mẫu, nó sẽ trình bày thông tin dài hơn về mỗi lệnh khớp với các mẫu đó.

initrd tập_tin ...
Nạp đĩa RAM ban đầu cho hình ảnh khởi động theo định dạng Linux và thiết lập các thông số thích hợp cho vùng thiết lập Linux trong bộ nhớ.

install
Đã được đề cập ở trên.

ioprobe ổ_đĩa
Dò tìm cổng I/O dùng cho ổ đĩa ổ_đĩa. Lệnh này sẽ liệt kê các cổng I/O trên màn hình.

kernel [--type=loại] [--no-mem-option] tập_tin ...
Nạp hình ảnh khởi động (Multiboot a.out hoặc ELF, Linux zImage hoặc bzImage, FreeBSD a.out, NetBSD a.out, v.v...) từ tập_tin. Phần còn lại của dòng được chuyển nguyên văn như dòng lệnh nhân. Bất cứ mô-đun nào cũng có thể được nạp sau khi dùng lệnh này. Lệnh này cũng chấp nhận tuỳ chọn --type để chỉ định cụ thể loại nhân của tập_tin. Đối số loại phải là một trong các thứ sau: netbsd, freebsd, openbsd, linux, biglinux, và multiboot. Tuy nhiên, chỉ cần xác định loại nhân khi nạp nhân NetBSD ELF vì GRUB có thể tự động xác định loạ i nhân trong các trường hợp khác một cách khá an toàn. Tuỳ chọn --no-mem-option chỉ hiệu quả trên Linux. Nếu chỉ định tuỳ chọn này, GRUB không chuyển tuỳ chọn mem= đến nhân.

lock
Ngăn cản người dùng thông thường thi hành các đề mục thực đơn một cách tuỳ ý. Để lệnh này thực sự có tác dụng phải dùng kèm với lệnh password. Lệnh này được dùng trong thực đơn, như ở thí dụ sau:
title DDe^` mu.c na`y ddu+o+.c ba?o ve^.
lock
root (hd0,a)
kernel /no-security-os

makeactive
Thiết lập phân vùng chủ động (active) trên đĩa root cho thiết bị root của GRUB. Lệnh này chỉ giới hạn (do chỉ có ý nghĩa) cho các phân vùng PC sơ cấp trên đĩa cứng.

map từ_ổ_đĩa đến_ổ_đĩa
Ánh xạ ổ đĩa từ_ổ_ đĩa đến ổ đĩa đến_ổ_đĩa. Điều này cần thiết khi nạp chuỗi một số hệ điều hành, thí dụ như DOS, nếu hệ điều hành đó nằm ở ổ đĩa không phải là ổ đĩa thứ nhất. Thí dụ:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
Thí dụ này chuyển đổi trật tự giữa ổ cúng thứ nhất và ổ cứng thứ hai.

md5crypt
Nhắc nhập mật khẩu và mã hoá nó ở dạng MD5. Mật khẩu được mã hoá có thể dùng với lệnh password.

module tập_tin ...
Tải mô-đun khởi động tập_tin cho hình ảnh khởi động định dạng Multiboot . Phần còn lại của dòng được chuyển như là dòng lệnh mô-đun, giống như lệnh kernel. Hình ảnh nhân Multiboot phải được nạp trước khi nạp bất kì mô-đun nào.

modulenounzip tập_tin ...
Giống như module, ngoại trừ việc giải nén tự động bị bất hoạt.

pause thông_điệp ...
In thông_điệp, rồi chờ cho đến khi một phím được ấn. Lưu ý rằng nếu đặt <^G> (mã ASCII 7) trong thông điệp thì loa sẽ phát ra âm thanh bíp chuẩn, có ích khi nhắc người dùng thay đổi đĩa mềm.

quit
Thoát shell grub. Lệnh này chỉ dùng được trong shell grub.

reboot
Khởi động lại máy tính.

root thiết_bị [hdbias]
Thiết lập thiết bị root hiện tại sang thiết bị thiết_bị, sau đó gán (mount) nó để lấy thông tin về kích thước phân vùng (để chuyển nhãn phân vùng trong ES:ESI, được dùng bởi một số trình khởi động theo kiểu nạp chuỗi), loại ổ đĩa BSD (để khởi động nhân BSD dùng định dạng nguyên thuỷ của chúng), và xác định chính xác phân vùng PC nơi đặt các tiểu phân vùng BSD. Thông số tuỳ chọn hdbias là một số cho nhân BSD biết con số ổ đĩa BIOS là bao nhiêu trên các controller trước ổ đĩa hiện tại. Thí dụ, nếu có một đĩa IDE và một đĩa SCSI, và phân vùng root của FreeBSD trên đĩa SCSI, thì dùng 1 cho hdbias.

rootnoverify thiết_bị [hdbias]
Tương tự như root, nhưng không gán (mount) phân vùng. Điều này hữu ích khi hệ điều hành nằm ngoài khu vực trên đĩa mà GRUB có thể đọc, nhưng vẫn muốn thiết lập thiết bị root đúng. Lưu ý rằng các mục đề cập ở phần lệnh root bên trên có được do gán sẽ không làm việc chính xác.

savedefault
Lưu đề mục hiện tại làm đề mục mặc định. Nằm ở vị trí cuối cùng của đề mục. Thí dụ:
default saved
timeout 10

title GNU/Linux
root (hd0,0)
kernel /boot/vmlinuz root=/dev/sda1 vga=ext
initrd /boot/initrd
savedefault

title FreeBSD
root (hd0,a)
kernel /boot/loader
savedefault

Với cấu hình này GRUB sẽ chọn đề mục được khởi động trước đây làm đề mục mặc định. Dùng lệnh savedefault ở một hoặc một vài đề mục và không dùng ở một số đề mục khác sẽ tạo thực đơn cho phép thay đổi mặc định ở một vài hệ thống và không bao giờ thiết lập mặc định được cho các hệ điều hành kia.

setup
Đã được dề cập ở trên.

4. Một số ứng dụng cụ thể và vấn đề thường gặp

4.1. Tạo đĩa mềm khởi động GRUB với giao diện thực đơn

  • Tạo một hệ thống tập tin trên đĩa mềm (thí dụ mke2fs /dev/fd0).
  • Gán đĩa mềm vào một nơi nào đó, thí dụ /mnt.
  • Chép các hình ảnh GRUB vào thư mục /mnt/boot/grub, chỉ cần chép stage1, stage2menu.lst. Có thể không cần *stage1_5.
  • Tháo gán đĩa mềm.
  • Chạy các lệnh sau (lưu ý rằng có thể tập tin grub trong hệ thống của bạn khác với trong thí dụ này):
    /sbin/grub --batch --device-map=/dev/null <<EOF
    device (fd0) /dev/fd0
    root (fd0)
    setup (fd0)
    quit
    EOF
    GRUB và thực đơn của nó tải từ đĩa mềm nhanh hơn nhiều so với Linux, FreeBSD, hay OpenBSD khởi động từ đĩa mềm.

4.2. Khởi động đĩa mềm có nhân Linux

  • Chép nhân Linux vào đĩa mềm:
    mount /dev/fd0 /mnt/floppy
    cp /path/to/bzImage /mnt/floppy/boot
    umount /dev/fd0
  • Trong môi trường GRUB:
    grub> root (fd0)
    grub> kernel /boot/bzImage root=/dev/hda5
    grub> boot

4.3. Tạo đĩa CD khởi động với GRUB

Nếu máy tính của bạn không có ổ đĩa mềm hoặc vì lí nào đó bạn muốn khởi động máy bằng ổ đĩa CD, bạn có thể tạo một đĩa CD khởi động với GRUB.

  • Nếu bạn đã có đĩa mềm khởi động với GRUB

    • Đặt đĩa vào ổ đĩa và thực hiện lệnh
      dd if=/dev/fd0 of=boot.img bs=1024 count=1440
  • Nếu bạn không có ổ đĩa mềm

    • bạn cần tạo một ổ đĩa mềm ảo (hình ảnh ổ đĩa):
      dd if=/dev/zero of=boot.img bs=1024 count=1440
      mke2fs -F boot.img
      mount -o loop boot.img mnt
      mkdir -p mnt/boot/grub
      

    • Các tập tin tối thiểu cần có để GRUB làm việc gồm stage1, stage2, menu.lst. Định vị các tập tin này trong hệ thông của bạn, thường chúng có trong /boot/grub hoặc /usr/local/share/grub/i386-pc. Chép chúng vào tập tin hình ảnh:
      cp /đường-dẫn/stage1 mnt/boot/grub
      cp /đường-dẫn/stage2 mnt/boot/grub
      cp /đường-dẫn/menu.lst mnt/boot/grub

    • Biên tập menu.lst (nếu cần thiết):
      cd mnt/boot/grub
      vi menu.lst

    • Tháo gán và chạy grub:
      umount mnt
      grub
      Trong shell grub, chạy các lệnh:
      device (fd0) boot.img
      root (fd0)
      setup (fd0)
      quit

  • Dùng tập tin hình ảnh tạo đĩa CD khởi động:
    mkdir -p /tmp/boot
    mv boot.img /tmp/boot
    cd /tmp
    mkisofs -b boot/boot.img -c boot/boot.catalog -o boot.iso -r boot
    Tập tin được tạo ra là /tmp/boot.iso, bạn dùng nó để ghi vào đĩa CD.

4.4. Khởi động Windows từ đĩa cứng thứ hai

title Windows
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
makeactive
chainloader +1

Cũng có thể dùng lệnh map sau cùng:

title Windows
rootnoverify (hd1,0)
makeactive
chainloader +1
map (hd0) (hd1)
map (hd1) (hd0)

Việc ánh xạ là cho BIOS, GRUB vẫn xem đĩa đầu tiên là hd0, đĩa thứ 2 là hd1.

Thí dụ cho khởi động Windows từ phân vùng thứ hai trên đĩa cứng thứ hai:

title Windows
map (hd0) (hd1)
map (hd1) (hd0)
chainloader (hd1,1)+1

4.5. Khởi động nhiều bản Windows cài đặt trên một đĩa cứng

title windows
   hide (hd0,1)
   unhide (hd0,0)
   root (hd0,0)
   makeactive
   chainloader +1

title windows_2
   hide (hd0,0)
   unhide (hd0,1)
   root (hd0,1)
   makeactive
   chainloader +1

4.6. Khởi động GRUB từ ntldr

  • Cài GRUB lên sector khởi động của một phân vùng (chẳng hạn như /boot, ở /dev/hda2).
  • Chép sector khởi động đó vào đĩa mềm hoặc một hệ thống tập tin trên đĩa cứng, thí dụ cho đĩa mềm (sau khi đã được gán tại /mnt/floppy):
    dd if=/dev/hda2 of=/mnt/floppy/bootsect.lnx bs=512 count=1
    Tên của tập tin bootsect.lnx phải theo quy định 8.3 để ntldr có thể nhận diện được.
  • Khởi động lại Windows và chép tập tin bootsect.lnx vào thư mục gốc trên đĩa C:
  • Thay đổi thuộc tính chỉ-đọc của tập tin C:\boot.ini, nếu cần, bằng Windows Explorer hoặc bằng dòng lệnh (C:\attrib -s -r c:\boot.ini, và sau khi thực hiện xong C:\attrib +s +r c:\boot.ini). Mở tập tin boot.ini bằng một trình biên tập, chẳng hạn như Notepad, thêm dòng c:\bootsect.lnx="Linux" vào tập tin đó. Thí dụ như:

    [boot loader]
    timeout=5
    default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
    c:\bootsect.lnx="Linux"

    Mỗi khi thay đổi sector khởi động dùng để tạo bootsect.lnx, cần phải cập nhật bản mới của tập tin này.

4.7. Khởi động ổ CD

GRUB chưa hỗ trợ khởi động ổ CD, do đó nếu muốn tử GRUB khởi động một CD thì phải nhờ một trình khởi động trung gian.

sbminst -t us -d /dev/fd0 (tạo đĩa mềm khởi động Smart Boot Manager)
dd if=/dev/fd0 of=/boot/sbm.img bs=1k count=18
cp /path/to/syslinux-2.04/memdisk/memdisk /boot (tìm gói syslinux và lấy tập tin memdisk trong đó)

Thêm đề mục vào menu.lst:

title cdrom
    kernel (hd1,6)/boot/memdisk
    initrd (hd1,6)/boot/sbm.img

4.8. Khởi động vào các runlevel khác nhau của nhân Linux

  • Nếu GRUB boot vào giao diện đồ hoạ, ấn <ESC> để vào giao diện dòng lệnh
  • Chọn (tô sáng) kernel muốn khởi động và gõ <e> để hiệu chỉnh các thông số cho nhân. Khi đó xuất hiện danh sách các đề mục có trong tập tin cấu hình.
  • Chọn dòng bắt đầu với chữ kernel, gõ <e> để hiệu chỉnh dòng đó.
  • Di chuyển con trỏ đến cuối dòng đó, ấn <Spacebar> và gõ runlevel vào

    1 = single user mode (có thể gõ single)
    2 = Multiuser mode
    3 = Full Multiuser mode
    5 = X11

    Ấn <Enter> để thoát chế độ hiệu chỉnh.

  • Quay trở lại màn hình của GRUB, gõ <b> để khởi động hệ thống.

4.9. Một số vấn đề khác

  • Sector 6 của phân vùng FAT32 chứa bản lưu trữ cho sector khởi động của phân vùng đó ở hệ điều hành Windows. Lệnh tương tự như dd if=/dev/hda1 of=/tmp/sect6 bs=512 count=1 skip=6 sẽ giúp lấy lại sector khởi động đó. Thực chất sector khởi động của phân vùng FAT32 gồm toàn bộ 3 sector (trong đó phần lớn là không có gì ngoài zero). Có thể phục hổi sector khởi động của FAT, FAT 16, FAT 32 bằng lệnh SYS đi kèm theo các phiên bản của các hệ điều hành DOS/Windows.

  • Nếu cài GRUB với tập tin Giai đoạn 2 nằm trên phân vùng của Windows, cần phải thiết lập thuộc tính hệ thống cho tập tin này để nó không bị di chuyển khi dùng các chương trình chống phân mảnh...

  • Gỡ bỏ/thay đổi mật khẩu trong GRUB: Gỡ bỏ dòng lệnh password trong tập tin thực đơn. Có thể bạn cần phải tìm cách khởi động hệ điều hành để biên tập tập tin đó, chẳng hạn như khởi động từ đĩa cứu nguy.

  • Các trường hợp phải cài lại GRUB: chỉ có một vài trường hợp phải cài lại GRUB, chẳng hạn như bạn vừa thay đổi loại phân vùng của phân vùng root của GRUB (thí dụ từ ext2 sang ReiserFS) hoặc bạn vừa cập nhật các tập tin stage1stage2 trong /boot/grub.

  • GRUB có thể khởi động một hệ điều hành trên đĩa cứng có kích thước hơn 8GB?

    Điều này tuỳ thuộc vào BIOS và hệ điều hành. Về BIOS, dĩa cứng có thể được truy cập ở chế độ LBA hay không. Về hệ điều hành, một số hệ điều hành (như DOS) không thể truy cập ổ cứng lớn; ít nhất là GNU/Linux và GNU/Hurd có thể khởi động từ đĩa cứng như vậy.

  • Có thể đặt tập tin stage2 ở phân vùng vượt quá 1024 cylinder?

    Có thể, nếu BIOS hỗ trợ chế độ LBA.

  • Tháo cài đặt GRUB khỏi đĩa cứng

    Không có khái niệm tháo cài đặt một trình khởi động. Tất cả những gì bạn cần làm là cài một trình khởi động khác lên đĩa cứng đó, chẳng hạn như chạy lệnh fdisk /mbr trên DOS/Windows, hoặc chạy lệnh /sbin/lilo trên GNU/Linux.

5. Tài liệu tham khảo

1. GRUB manual
2. GNU GRUB FAQ
3. Manuel de GNU GRUB
4. GRUB-HOWTO - Thierry Laronde
5. Bug -grub archive
6. Getting to know GRUB – Daniel Robbins
7. SuSE Support knowledgebase
8. Dual and Multi Booting FreeBSD, Linux, and OpenBSD: GNU GRUB Boot Loader - GeodSoft, LLC
9. Boot with GRUB – Wayne Marshall – Linux Journal
10. Making Linux Installation Disks for Fun and Profit - L.C. Benschop

Thứ Sáu, 23/07/2004 11:30
32 👨 11.599
0 Bình luận
Sắp xếp theo
    ❖ Tổng hợp