1. HỆ ĐiỀU HÀNH LINUX
TRẦN THỊ NGỌC MAI
QUÁ TRÌNH KHỞI ĐỘNG VÀ
ĐÓNG TẮT
1
2. &
VC
BB
Các bước khởi động hệ thống Linux (1)
HĐH Linux 2
3. &
VC
BB
Các bước khởi động hệ thống Linux (2)
Bật máy, BIOS nhận diện các device (quá trình
này gọi là Power On Self Test - POST)
Đọc Master Boot Record để tải boot loader
(trình lilo hoặc trình grub) vào RAM: cho phép
lựa chọn hệ điều hành boot.
Tải nhân và khởi tạo RAM disk
/sbin/init: tiến trình cha của mọi tiến trình.
/etc/inittab: quyết định run level và khởi động
các dịch vụ cần thiết của run level đó.
HĐH Linux 3
4. &
VC
BB
Boot loader
Boot loader hay còn gọi là boot manager cho
phép quản lý nhiều hệ điều hành và chọn 1 hệ
điều hành để boot vào.
Hai boot loader phổ biến của Linux:
LILO (LInux LOader)
GRUB 2 (GRand Unified Boot loader)
Khi thay đổi file cấu hình, GRUB tự động nhận
biết, LILO thì phải dùng lệnh /sbin/lilo để update
cấu hình.
Ngày nay, GRUB là boot loader mặc định của
đại đa số các hệ điều hành Linux.
HĐH Linux 4
5. &
VC
BB
Boot loader GRUB 2 (1)
Tập tin cấu hình của GRUB 2: /boot/grub/grub.cfg
menuentry "Ubuntu, Linux 2.6.31-14-generic" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
set quiet=1
insmod ext2
set root=(hd0,10)
search --no-floppy --fs-uuid --set 85ae91cc-38c5-4870-b3af-3565b3fc355e
linux /boot/vmlinuz-2.6.31-14-generic root=UUID=85ae91cc-38c5-4870-b3af-3565b3fc355e ro
quiet splash
initrd /boot/initrd.img-2.6.31-14-generic
}
menuentry "Microsoft Windows XP Professional (on /dev/sda1)" {
insmod ntfs
set root=(hd0,1)
search --no-floppy --fs-uuid --set cafc5f60fc5f463b
drivemap -s (hd0) ${root}
chainloader +1
HĐH Linux 5
}
6. &
VC
BB
Boot loader GRUB 2 (2)
Cách phân biệt partition trong boot loader
GRUB khác với cách thông thường của Linux.
GRUB không phân biệt IDE, và SCSI. Đĩa cứng
được hiểu là: hd%d.
%d: là số thứ tự đĩa cứng, bắt đầu từ 0 để chỉ
đầu tiên.
• VD: set root=(hd0,10) <=> đĩa cứng thứ nhất,
partition 10
LILO có cách hiểu thông thường như Linux:
hdXY, sdXY.
HĐH Linux 6
7. &
VC HĐH mặc định trong menu boot của GRUB 2 (1)
BB
Tập tin /boot/grub/grub.cfg là tập tin được sinh từ
/etc/grub.d và /etc/default/grub => không nên chỉnh sửa
Chỉnh sửa tập tin /etc/default/grub tại các dòng:
GRUB_DEFAULT=0
Thay số 0 bằng số thứ tự mục chọn trong menu boot.
Giả sử với HĐH Ubuntu 9.10 (có 4 mục trong menu
boot STT 0->3) và HĐH Windows (STT 4) => muốn
boot mặc định vào Windows => thay 0 bằng 4
Cũng có thể thay bằng từ “saved” để tự động lưu lại
mục chạn của lần khởi động trước đó
GRUB_TIMEOUT=10
Thời gian chờ của menu boot
HĐH Linux 7
8. &
VC HĐH mặc định trong menu boot của GRUB 2 (2)
BB
• Để biết các mục chọn trong menu boot => chạy
lệnh: grep menuentry /boot/grub/grub.cfg
• Sau khi chỉnh sửa tập tin /etc/default/grub => chạy
lệnh: sudo update-grub để cập nhật thông tin từ
các tập tin riêng lẻ trong /etc/grub.d và tập tin
vừa mới chỉnh /etc/default/grub vào trong tập
tin /boot/grub/grub.cfg
HĐH Linux 8
9. &
VC
BB
Tải nhân và khởi tạo RAM disk
Lệnh tải nhân và khởi tạo RAM disk trong
/etc/grub/grub.cfg:
linux /boot/vmlinuz-2.6.31-14-generic
root=UUID=85ae91cc-38c5-4870-b3af-3565b3fc355e ro
quiet splash
initrd /boot/initrd.img-2.6.31-14-generic
Lệnh linux: tải nhân Linux tại tập tin
/boot/vmlinuz-2.6.31-14-generic
Lệnh initrd: khởi tạo RAM disk tại tập tin
/boot/initrd.img-2.6.31-14-generic
RAM disk là hệ thống tập tin chứa các driver,
module cần thiết cho nhân
HĐH Linux 9
10. &
VC
BB
Tải các HĐH khác
Lệnh tải các HĐH non*unix:
insmod ntfs
set root=(hd0,1)
search --no-floppy --fs-uuid --set cafc5f60fc5f463b
drivemap -s (hd0) ${root}
chainloader +1
Lệnh chainloader để tải 1 sector vào RAM
Chainloader +1 <=> chainloader 0+1: tải sector
thứ 0
HĐH Linux 10
11. &
VC
BB
Tiến trình init và file inittab (1)
Sau khi kernel được tải, kernel cho thực thi
file /sbin/init và /sbin/init trở thành process đầu
tiên (có PID=1).
Tiến trình init sẽ tìm đọc file /etc/inittab để quyết
định runlevel nào sẽ được boot. Nếu không có
file /etc/inittab thì mặc định runlevel 2 được
chạy
Với runlevel được chọn, các script trong thư
mục /etc/rc#.d được thực thi để khởi động các
dịch vụ của runlevel tương ứng. Các script này
là các liên kết lấy từ /etc/init.d
HĐH Linux 11
12. &
VC
BB
Tiến trình init và file inittab (2)
Runlevel: quy định cách thức thao tác với HĐH
Các runlevel của Linux:
– 0: System halt
– 1: Single user
– 2: Full muti-user (default)
– 3 → 5: Full muti-user
– 6: System reboot
• Lệnh xem runlevel: runlevel (hoặc who -r)
• Lệnh thay đổi runlevel: telinit <runlevel> (phải
dùng super user)
– sudo telinit 0 <=> tắt máy
– sudo telinit 6 <=> khởi động lại
HĐH Linux 12
13. &
VC
BB
Tiến trình init và file inittab (3)
Thiết lập runlevel mặc định cho hệ thống (khác
2) => tạo tập tin /etc/inittab (với các distro của
Redhat tập tin này có sẵn)
sudo gedit /etc/inittab
Nhập dòng sau:
id:number:initdefault:
thay number bằng runlevel mong muốn (không
thay bằng 0 hoặc bằng 6)
HĐH Linux 13
14. &
VC
BB
Tắt hệ thống (1)
•Có thể tắt hoặc khởi động lại hệ thống bằng lệnh
telinit 0 hoặc telinit 6, nhưng các lệnh này sẽ tắt hệ
thống ngay lập tức
Lệnh tắt máy: shutdown [tham số] <thời gian>
Tham số:
• -r (restart)
• -h (halt)
• -c (cancel)
Thời gian: số phút, hoặc dùng “now” để tắt ngay
lập tức
Tắt máy vào lúc 8 tối (pm): shutdown -h 20:00
Sau 10 phút thì tắt máy: shutdown -h +10 (hoặc
shutdown -h 10)
HĐH Linux 14
15. &
VC
BB
Tắt hệ thống (2)
• Tham số -c giúp hủy lệnh shutdown. Giả sử
vừa thực hiện lệnh shutdown -h 5 nhưng chưa
hết 5 phút mà muốn hủy lệnh → Ctrl C để hủy
lệnh hoặc mở 1 Terminal khác và gõ lệnh
shutdown -c
Các lệnh tắt máy khác:
– halt
– reboot
– poweroff
HĐH Linux 15