Tìm hiểu quản lý boot
I.bootloader
1.Thuật ngữ trong boot
- post: hay power on self test để kiểm tra thông số, trạng thái của các phần cứng như bộ nhớ, CPU, thiết bị lưu trữ, card mạng,… Nếu mọi thứ đều ổn thì nó sẽ dẫn đến bios.
- bios: hay basic input/output system là một phần mềm được tích hợp trên bo mạch chủ, dùng để phát hiện, xác định và khởi tạo phần cứng. Sau bios sẽ tìm kiếm boot device, có thể là đĩa mềm, đĩa cứng, usb, card mạng,..
- boot sector: là sector đầu tiên của mỗi phân vùng chứa bootloader hay code để khởi động bootloader. Bootloader có nhiệm vụ khởi chạy kernel
- kernel: Khi khởi chạy được kernel của hệ thống, bootloader sẽ chuyển quyền điều khiển cho kernel.
2. GRUB
- /boot/grub/grub.cfg: Là file cấu hình chính cho boot menu của grub2.
-
/boot/grub/grub.conf: Là fiel cấu hình cho boot menu của grub.
- initrd(initial ramdisk): là các chương trình nhỏ giúp dò quét các thiết bị phần cứng và xác định xem kernel cần thêm gì để quản lý phần cứng đó. Initrd có thể nạp vào kernel các module bổ trợ( ví dụ như driver).
3.shutdown, halt, reboot, poweroff
- shutdown:
- Lập lịch một thời gian để tắt hệ thống. Nó có thể được sử dụng để halt, poweroff, reboot hệ thống.
- Có thể thị thị tin nhắn tới người dùng trong lần đăng nhập tiếp theo sau khi tắt hệ thống.
- halt:
- Là lệnh giúp dừng tất cả chức năng của cpu nhưng vẫn để hệ thống bật.
- poweroff:
- Là lệnh gửi tín hiệu ACPI mà chỉ dẫn hệ thống tắt nguồn.
- reboot:
- Là lệnh giúp hệ thôngs khởi động lại.
4.Quá trình khởi động của Linux
4.1.Bios
4.1.Bios
- BIOS là chương trình được chạy đầu tiên khi bạn nhấn nút nguồn hoặc nút reset trên máy tính.
- BIOS thực hiện một công việc gọi là POST (Power-on Self-test). POST là một quá trình kiểm tra tính sẵn sàng phần cứng nhằm, kiểm tra thông số và trạng thái của các phần cứng máy tính khác như bộ nhớ, CPU, thiết bị lưu trữ, card mạng… Đồng thời, BIOS cũng cho phép bạn thay đổi các thiết lập, cấu hình của nó (tùy từng máy mà bạn nhấn phím F2, Delete, F10,… để vào giao diện cài đặt cho BIOS).
- Nếu quá trình POST kết thúc thành công (tức, các phần cứng ở trạng thái tốt, BIOS không phát hiện ra các trục trặc nào), thì sau đó BIOS sẽ cố gắng tìm kiếm và khởi chạy (boot) một hệ điều hành được chứa trong các thiết bị lưu trữ như ổ cứng, CD/DVD, USB…. Thông thường, BIOS sẽ kiểm tra ổ đĩa mềm, hoặc CD-ROM xem có thể khởi động từ chúng được không, rồi đến phần cứng. Thứ tự của việc kiểm tra các ổ đĩa phụ thuộc vào các cấu hình trong BIOS.
- Tiếp theo nó tìm đến một thiết bị để khởi động được cài đặt sẵn trong BIOS, thường là CD-ROM hoặc USB hoặc HDD. Nếu hệ điều hành Linux được cài trên ổ đĩa cứng thì nó sẽ tìm đến Master Boot Record (MBR) tại sector đầu tiên của ổ đĩa cứng đầu tiên.
4.2. MBR
- Sector đầu tiên của một thiết bị lưu trữ dữ liệu được gọi là MBR, ví dụ /dev/hda hoặc/dev/dsa/. MBR rất nhỏ chỉ 512 byte.
- MBR chứa các chỉ dẫn cho biết cách nạp bootloader GRUB/LILO cho Linux.
4.3. Bootloader
- Có 2 boot loader phổ biến trên Linux là GRUB và LILO.
- Boot loader tìm kiếm phân vùng boot và đọc thông tin cấu hình trong file grub.conf, grub.cfg(với grub2) hoặc lilo.conf và hiển thị các hệ điều hành có sẵn trong máy tính cho phép chúng ta lựa chọn để khởi động, sau đó chúng sẽ nạp kernel của hệ điều hành đó vào bộ nhớ và chuyển quyền điều khiển máy tính cho kernel này.
4.4.Kernel
- Sau khi chọn kernel trong file cấu hình của boot loader, hệ thống tự động nạp chương trình init trong thư mục /sbin/
4.5. Init.
- Tiến trình này có PID (process ID) =1, init là cha của tất cả các tiến trình khác mà có trên hệ thống Linux này. Sau đó, init đọc file /etc/inittab để xác định mức hoạt động (runlevel).
- Trên phần lớn các bản phân phối Linux, thường dùng 7 level, có giá trị từ 0-6, mức 4 không sử dụng. Các mức này thường được mô tả trong file /etc/inittab:
- Sau khi xác định runlevel (thông qua biến initdefault), chương trình /sbin/init sẽ thực thi các file statup script được đặt trong các thư mục con của thư mục /etc/rc.d/. Script sử dụng runlevel 0->6 để xác định thư mục chứa file script chỉ định cho từng level như: /etc/rc.d/rc0.d -> /etc/rc.d/rc6.d.
II. Init và runlevel.
1.System init.
- Sau khi kernel được khởi động và nhận quyền từ bootloader, nó chạy init daemon. Init daemon (/sbin/init) là tiến trình daemon đầu tiên được mở và có process ID là 1(PID 1). Tiến trình Init không bao giờ chết.
- Khi /sbin/init chạy, đầu tiên nó sẽ đọc file cấu hình /etc/inittab chứa giá trị initdefault.
- Giá trị của initdefault chỉ ra runlevel mặc định. Một số bản phân phối linux có mô tả ngắn gọn về các runlevel ở trong file /etc/inittab. Với Ubuntu, giá trị runlevel mặc định được lưu ở file /etc/init/rc-sysinit.conf.
- Runlevel 0 nghĩa là hệ thống đang tắt(halt). Runlevel 1 thường dùng để xử lý sự cố, chỉ có user root mới có thể đang nhập. Runlevel 3 thường dùng cho server, trong khi runlevel 5 dành cho desktop(đồ họa). Ngoài các runlevel 0,1, và 6 thì các runlevel khác có thể thay đổi tùy theo bản phân phối. Vậy nên hay xác minh nghĩa của các runlevel trên hệ thống của bạn.
2. Daemon and service
Daemon là một tiến trình chạy ngầm( trong background), mà không có liên kết nào với GUI hay terminal(tiến trình không tương tác). Những tiến trình daemon thường được chạy khi hệ thống boot, và chạy cho đên khi hệ thống tắt.
Service là một chương trình đáp ứng yêu cầu từ các chương trình khác thông qua giao tiếp liên tiến trình.
Một dịch vụ không phải là một daemon, nhưng thường là vậy. Một ứng dụng người dùng có GUI có thể có một dịch vụ được tích hợp trong đó, ví dụ như file sharing.
3.Runlevel.
- Hiển thị runlevel với lệnh
runlevel
hoặcwho -r
:root@m4700:~# runlevel N 5 root@m4700:~# who -r run-level 5 2019-06-18 08:10
Output của lệnh runlevel sẽ có 2 giá trị là previos runlevel và current runlevel. Nếu không có previos runlevel thì sẽ được thay thế bởi N.
- Thay đổi runlevel sử dụng
telinit
,/sbin/telinit
thường là hard link đến/sbin/init
.root@m4700:~# runlevel N 2 root@m4700:~# init 3 root@m4700:~# runlevel 2 3
4.systemd
- systemd là tiến trình khởi tạo hệ thống và quản lý dịch vụ của linux. Nó bao gồm một số tính năng như mở các daemon, mount một mountpoint, theo dõi cpu sử dụng linux control group,… systemd là tiến trình đang thay thế init trong RHEL 7, CentOS 7, và Debian 8,..
- Các thành phần cơ bản của systemd:
systemctl
dùng để quản lý trạng thái của các dịch vụ hệ thống (bắt đầu, kết thúc, khởi động lại hoặc kiểm tra trạng thái hiện tại)journald
là một daemon dùng để quản lý nhật ký hoạt động của hệ thống (hay còn gọi là ghi log)logind
là daemon dùng để quản lý và theo dõi việc đăng nhập/đăng xuất của người dùngnetworkd
dùng để quản lý các kết nối mạng thông qua các cấu hình mạngtimedated
là daemon dùng để quản lý thời gian hệ thống hoặc thời gian mạng
-
Tất cả các chương trình được quản lý bởi systemd đều được thực thi dưới dạng daemon hay background bên dưới nền và được cấu hình thành 1 file configuration gọi là
unit file
. Cácunit file
này sẽ bao gồm 12 loại:service
(các file quản lý hoạt động của 1 số chương trình)socket
(quản lý các kết nối)device
(quản lý thiết bị)mount
(gắn thiết bị)automount
(tự đống gắn thiết bị)swap
(vùng không gian bộ nhớ trên đĩa cứng)target
(quản lý tạo liên kết)path
(quản lý các đường dẫn)timer
(dùng cho cron-job để lập lịch)snapshot
(sao lưu)slice
(dùng cho quản lý tiến trình)scope
(quy định không gian hoạt động)