Tải bản đầy đủ (.pdf) (63 trang)

Tìm hiểu và cấu hình GRUB trên LINUX

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.87 MB, 63 trang )

TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 1

GVHD: NGUYỄN TẤN KHÔI

[LỜI NÓI ĐẦU]

LINUX là một hệ điều hành họ UNIX miễn phí dùng cho máy tính cá
nhân đang được sử dụng rộng rãi hiện nay. Được viết vào những năm 1991
bởi Linus Tovard, hệ điều hành LINUX đã thu được những thành công nhất
định. Hiện nay, LINUX ngày càng phát triển được đánh giá cao và thu hút
nhiều sự quan tâm của các nhà tin học.
Trong những năm gần đây hệ điều hành LINUX từng bước được đưa
vào sử dụng tại Việt Nam. nhiều tổ chức, công ty và các dự án tin học đã
chọn LINUX là môi trường để phát triển các ứng dụng của mình. Chính vì
thế nhu cầu tìm hiểu hệ điều hành này đang trở nên rất quan trọng và cần
thiết.
Việc tìm hiểu và cấu hình trong môi trường bộ tải khởi động GRUB-2
Hệ Điều Hành như LINUX(UBUNTU 10.10) là công việc rất khó khăn.
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ó
có trách nhiệm chuyển tải và kiểm soát tới một phần mềm hệ điều hành hạt
nhân (chẳng hạn như Linux hay GNU Hurd hạt nhân)..
Do đó việc tìm hiểu và cấu hình Grub trên ubuntu 10.10 là rất quang
trọng trong linh hoạt và thuận tiện cho việc khởi động Hệ Điều Hành Linux
bởi nó đặc biệt hữu ích cho multiboot, hệ thống phân vùng và nó thực sự là
bộ nạp lớn nhất để khởi động Linux và thực tế bất kỳ hệ điều hành nguồn
mở nào khác
Đây là lần đầu tiên em đi vào nghiên cứu đề tài của hệ điều hành
LINUX(Tìm hiểu và cấu hình GRUB trên Linux) và quỹ thời gian có hạn
nên đề tài sẽ không tránh khỏi những thiếu sót. Rất mong nhận được sự đóng


góp ý kiến của thầy cô và bạn bè.
Em xin chân thành cảm ơn sự hướng dẫn của thầy Nguyễn Tấn Khôi
và các bạn bè đã giúp đỡ em hoàn thành đề tài này.











TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 2

GVHD: NGUYỄN TẤN KHÔI

I. Giới thiệu về GRUB
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.
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.

TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 3

GVHD: NGUYỄN TẤN KHÔI

II. Cài đặt GRUB
1. Nơi tải GRUB xuống
GRUB có sẵn ở 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
.
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:
- Cài đặt trong môi trường hệ điều hành để có thể sử dụng được GRUB
- Cài đặt GRUB để GRUB làm trình khởi động máy tính.
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.
III. Sử dụng GRUB (File cấu hình)
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.

TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 4

GVHD: NGUYỄN TẤN KHÔI

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
.
2. Thuật ngữ dùng trong GRUB
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 hoặc a . Ví 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


TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 5

GVHD: NGUYỄN TẤN KHÔI

Ở 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.
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
.

TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 6

GVHD: NGUYỄN TẤN KHÔI

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. 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.
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
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 7

GVHD: NGUYỄN TẤN KHÔI

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
stage1

stage2
, 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.
5. Cài GRUB trong môi trường nguyên thuỷ của GRUB
5.1 Cài GRUB dùng 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]
6. 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]
Chi tiết 2 lệnh trên tham khảo tại:
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 8

GVHD: NGUYỄN TẤN KHÔI

7. Cài GRUB trong môi trường hệ điều hành giống Unix
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)'
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.
--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.
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 9

GVHD: NGUYỄN TẤN KHÔI

8. 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.

TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 10

GVHD: NGUYỄN TẤN KHÔI


--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
là ổ_đĩ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
stage2
là phâ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



TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 11

GVHD: NGUYỄN TẤN KHÔI

9. 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, trình nạp khởi động này sẽ 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.
9.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
.
9.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



TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 12

GVHD: NGUYỄN TẤN KHÔI

10. 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ó.

10.1 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
).
Đâ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.
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 13

GVHD: NGUYỄN TẤN KHÔI

10.2 Đặ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
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.
12. 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.


TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 14

GVHD: NGUYỄN TẤN KHÔI

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
13. Giao diện thực đơn

14. 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
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 15

GVHD: NGUYỄN TẤN KHÔI

<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 đó.
15. 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.
16. Một số lệnh trong GRUB
16.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
đó.
III.16.1.1 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ảnh và hậu_cảnh là các tên
màu tượng trưng.
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 16


GVHD: NGUYỄN TẤN KHÔI

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.



TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 17

GVHD: NGUYỄN TẤN KHÔI

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
.
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.
17. 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).


TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 18


GVHD: NGUYỄN TẤN KHÔI

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.

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
.
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
,
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 19

GVHD: NGUYỄN TẤN KHÔI

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 ổ
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 20

GVHD: NGUYỄN TẤN KHÔI

đĩ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
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.
IV. Một số ứng dụng cụ thể và vấn đề
thường gặp
1.1 Tạo đĩa CD khởi động với GRUB

Nếu bạn đã có đĩa mềm khởi động với GRUB
o
Đặ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
o
bạn cần tạo một ổ đĩa mềm ảo (hình ảnh ổ đĩa):
o dd if=/dev/zero of=boot.img bs=1024 count=1440
o mke2fs -F boot.img
o mount -o loop boot.img mnt
o mkdir -p mnt/boot/grub
o
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:
o cp /đường-dẫn/stage1 mnt/boot/grub
o cp /đường-dẫn/stage2 mnt/boot/grub
cp /đường-dẫn/menu.lst mnt/boot/grub
o
Biên tập
menu.lst
(nếu cần thiết):
o cd mnt/boot/grub
vi menu.lst
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 21

GVHD: NGUYỄN TẤN KHÔI

o
Tháo gán và chạy
grub
:
o 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.
1.2 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
1.3 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
TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 22

GVHD: NGUYỄN TẤN KHÔI

V. Cơ chế an toàn và bảo mật 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

TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 23

GVHD: NGUYỄN TẤN KHÔI

VI. [Grub 2]
1. [Từ Ubuntu-VN]

GRand Unified Bootloader, version 2 (Grub 2) là phiên bản thứ hai của GNU
GRUB. Nó là chương trình chịu trách nhiệm quá trình nạp và giao quyền điều
khiển cho nhân hệ điều hành trong lúc khởi động. Grub 2 tương thích với chuẩn
POSIX (ví dụ như GNU/Linux, *BSD, Mac OS,...) và cũng có thể kết nối đến
những hệ thống không tương thích với POSIX (Portable Operating System
Interface for Unix).
GRUB 2 được viết lại mới hoàn toàn về mặt giao diện. Dựa trên nghiên cứu của
dự án PUPA, GRUB 2 hỗ trợ tính mô-đun và cơ động nhiều hơn người tiền nhiệm
của nó. Sau đây là một vài cải tiến dự kiến của GRUB 2:

hỗ trợ giao diện đồ họa, kể cả theo chủ đề;

mô-đun hóa quá trình nạp (modular loading);

tương thích đa nền tảng (hệ điều hành);

hỗ trợ nhúng mã (scripting support);

tùy biến các mục khởi động;

kiểm tra tên phân vùng.




TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 24

GVHD: NGUYỄN TẤN KHÔI



2. [Cài đặt / Nâng cấp]
2.1 [Cài đặt (Ubuntu 9.10)]
GRUB 2 sẽ được cài mặc định trên phiên bản Karmic. Nếu bạn muốn nâng cấp từ
Jaunty 9.04 lên Karmic 9.10 bạn có thể theo các bước hướng dẫn dưới đây:
2.2 [Cài đặt (Ubuntu 9.04+)]

Mở một cửa sổ dòng lệnh (Terminal) và nhập
$ sudo apt-get install grub2
Chọn OK từ grub-pc configuration

Chọn Chainload from menu.lst YES

Tại dấu nhắc lệnh, ấn ENTER
NOTE: Cái này chỉ là tạm thời, bạn phải cố định nó lại bằng cách...

Nhập vào một terminal
$ sudo upgrade-from-grub-legacy
Sau đó GRUB 2 sẽ cho biết địa chỉ mà nó khởi động. Trên hệ thống thử
nghiệm của chúng tôi, nó hiển thị (hd0) /dev/sda nhưng có thể khác trên máy của
bạn. Nếu chưa chính xác, bạn phải chỉnh sửa file /boot/grub/device.map để khớp
với hệ thống của bạn và thế là chạy:
$ sudo grub-install
GRUB 2 sẽ được cài đầy đủ, còn GRUB hiện hữu thì bị gỡ ra và cấu hình
của nó sẽ được sao lưu lại. Cấu hình của GRUB cũ được lưu tại /boot/grub và có
tên là menu.lst*
Bạn có thể xác định lại phiên bản mà bạn vừa cài bằng cách nhập:
grub-install –v









TÌM HIỂU VÀ CẤU HÌNH GRUB TRÊN LINUX Trang- 25

GVHD: NGUYỄN TẤN KHÔI

3. [Hệ thống thư mục và tập tin của Grub 2]
Trong khi toàn bộ các file của nó vẫn còn nằm trong thư mục /boot/grub, thì
không còn có khái niệm menu.lst. Tâp tin điều khiển Grub đó bây giờ là grub.cfg.
Nó được tạo ra bởi nhiều kịch bản (scripts) được chạy khi lệnh "update-grub"
được thực thi (lưu ý phải chạy dưới quyền root: "sudo update-grub"). Những files
đóng vai trò chính về nội dung của grub.cfg /etc/default/grub và những file kịch
bản riêng lẻ được đặt tại /etc/grub.d/
Nhiều tập tin trong /boot/grub sẽ rất xa lạ với người dùng quen với Grub trước.
Đặc biệt đáng chú ý là có vô số các file *.mod trong thư mục /boot/grub. Grub 2
có tính mô-đun và những dữ liệu trong *.mod được nạp lên khi cần thiết bởi grub.
Mặc dù có sự bổ sung của những tập tin này, tổng kích thức của thư mục
/boot/grub gần như không đổi so với Grub Legacy và không đòi hỏi nhiều không
gian cho phân vùng /boot.
3.1 [grub.cfg (/boot/grub/grub.cfg)]
KHÔNG CHỈNH SỬA TẬP TIN NÀY Đây là tập tin chính của Grub 2. Nó là "vết
tích" của /boot/grub/menu.lst trong Grub Legacy. Nó chứa các lệnh chỉ thị các đề mục
cho Grub. Nhưng không giống như file menu.lst trong Grub Legacy, grub.cfg vốn sinh
ra KHÔNG ĐỂ NGƯỜI DÙNG CHỈNH SỬA!!!

grub.cfg được tạo ra một cách tự động hoạt tự cập nhật khi và chỉ khi lệnh
"update-grub" được thi hành. Lệnh này phải được chạy dưới quyền của "người

quản trị" ("root").

Các kịch bản được dùng để khởi tạo grub.cfg bao gồm các tâp tin chứa trong thư
mục /etc/grub.d và thông tin được thu thập từ /etc/default/grub

Tập tin này được chia thành từng khu vực. Mỗi phân khu được mô tả và có thể
nhận biết bằng dòng ### BEGIN. Thông tin trong dòng này đề cập đến những tập
tin trong thư mục /etc/grub.d vốn dùng để liên kết thông tin vào trong grub.cfg

Mặc định, và mỗi khi lệnh "update-grub" được thực thi, tâp tin này được "niêm
chì" chỉ đọc mà thôi. Điều này giữ cho nội dung của tập tin sẽ không bị thay đổi
một cách "thủ công". Nếu bạn muốn chỉnh sửa file này, hướng dẫn nằm ở cuối
bài.

Đây là nội dung mẫu của grub.cfg, bao gồm hai lõi (kernel) Ubuntu, memtest86+,
Windows và một mục tùy chỉnh (41_srcd), được nhập từ các kịch bản ở
/etc/grub.d/ :



×