Tìm hiểu về Linux boot process | #2
TIL
720
Linux
99
White

Vũ Garo viết ngày 17/04/2019

Linux boot process là quá trình khởi tạo hệ thống Linux. Nó bao bước từ khi ta bật máy đến khi giao diện người dùng sẵn sàng.
Miêu tả các bước khi một hệ thống Linux khởi động
Giờ hãy tìm hiểu từng phần một!

BIOS POST

BIOS - Basic Input/Output System

Về bản chất, BIOS là một nhóm lệnh được lưu trữ trên một chip firmware nằm ở trên bo mạch chủ (mainboard) của máy vi tính. BIOS kiểm soát các tính năng cơ bản của máy vi tính như : Kết nối và chạy trình điều khiển (driver) cho các thiết bị ngoại vi (chuột, bàn phím, usb…), đọc thứ tự ổ cứng để khởi động các hệ điều hành, hiển thị tín hiệu lên màn hình v.v… Sau đó, nó sẽ giao lại quyền cho bootloader.

POST - Power On Self Test

Khi IBM thiết kế cái máy tính đầu tiên năm 1981, BIOS được thiết kế để khởi động các thiết bị phần cứng. POST là một phần của BIOS có nhiệm vụ đảm bảo phần cứng máy tính hoạt động chính xác. Nếu POST thất bại thì máy tính có thể không sử dụng được nên quá trình khởi động dừng lại (Là máy đi luôn đó~~).

Sau khi POST kiểm tra các thiết bị phần cứng mà không có vấn đề gì. Nó sẽ gọi BIOS interrupt call (Cái này nó sẽ thực hiện một chức năng cơ bản nào đó) để tìm kiếm vàload boot record vào RAM và giao quyền lại cho boot record, thực chất đây là giai đoạn của đầu tiên của Boot loader.

Master Boot Record và Boot Loader

Đây là danh sách một số bootloader được dùng cho Linux:

  • GRUB - GRand Unified Boot loader - Gồm GRUB và GRUB2
  • ISOLINUX
  • DAS U-Boot

Bài viết sẽ tập trong nói về GRUB 2 vì nó mới và xịn hơn mấy cái cũ hơn. Để có kiến thức một các trực quan và đầy đủ hơn. Trong phần này, chu trình GRUB 2 sẽ được chia là 3 giai đoạn để việc hiểu được công việc của nó trở nên dễ dàng hơn.

Giai đoạn 1

Như đã đề cập ở trên ở cuối bước POST thì boot record sẽ được load vào RAM. boot recordthường được lưu trữ tại Master Boot Record -MBR. Bootstrap code ở giai đoạn này rất nhỏ vì nó chỉ có một không gian 512 bytes để lưu trữ cùng với partition table nữa. Nên thường thì có chỉ có dung lượng khoảng 446 bytes với tên gọi là boot.img. Và vì boot record có dung lượng rất nhỏ nên nó sẽ không được "thông minh" cho lắm nên nhiệm vụ chính của nó sẽ là định vị và load core.img.

Master Boot Record

Giai đoạn 1.5

Giai đoạn 1.5 là việc của file core.img chứ không file là file boot.img như ở trên. Nó nằm ở khoảng không gian của boot record(MBR) và phân vùng đầu tiên ==> khoảng 31,744 bytes (32 Mb). Và cũng như file boot.imgbên trên, flie core.img cũng chỉ có dung lượng 25,389 bytes thôi. Và vì "thông minh" nên nhiệm vụ của nó là định vị, load các tệp tin trong/boot mà trong GRUB 2 là /boot/grub2 và load các trình điều khiển cần thiết khác.
Một lưu ý ở đây là core.img chỉ có thể load một số định dạng phân vùng ổ đĩa nhất định.

Giai đoạn 2

Ở phần này ta không có file .img như ở trên, thay vào đó là kernel modules sẽ được gọi khi cần thiết tại thư mục /boot/grub2/i386-pc. Nhiệm vụ của phần này là load kernel vào RAM và chuyển quyền điều khiển lại cho kernel.

alt text

Ở đây nếu ta có nhiều Operating system (nhiều kernel khác nhau), màn hình lựa chọn sẽ hiện ra cho phép người dụng lựa chọn Operating system (OS) để chạy. Sau khi chọn OS, Bootloader(GRUB) sẽ tải kernel của OS được chọn vào RAM và giao quyền cho kernel. Một điều nữa là các tập tin kernel thường được đặt tên là vmlinuz.

Ok giờ là đến nhiệm vụ của kernel. Viết đến đây vừa căng não vừa sợ sai! Đậu đỏ!

Load Kernel

Kernel thì thường được nén lại nên việc đầu tiên mà nó là giải nén chính nó. Rồi sau đó,kernel ngay lập tức khởi tạo và cấu hình bộ nhớ của máy tính cũng như cấu hình các thiết bị phần cứng được liên kết với hệ thống. Bao gồm tất cả các vi sử lý, I/O subsystems, storage devices, etc. Kernel cũng sẽ load một số ứng dụng user space cần thiết.

Khi một Kernel giải nén chính mình, nó cũng sẽ load một thứ gọi là systemd và chia sẽ quyền với nó. Tại thời điểm này Kernelsystemd chưa thể thực hiện các tác vụ của người dùng.

Initial RAM disk - initramfs - initrd

alt text

Initramfs filesystem image cũng nằm trong thư mục /boot như Kernel vậy. Và nó cũng sẽ được load vào RAM cùng với kernel nên kernel có thể sử dụng initramfs trực tiếp.

Initramfs bao gồm các chương trình và file binary thực hiện tất cả các hoạt động cần thiết để "khởi tạo" (mount) root filesystem, như là cung cấp chức năng kernel cho filesystem hay cung cấp trình điều khiển cho Mass Storage Controllers với một "cơ sở" là udev (for user device). Udev là thứ chịu trách nhiệm tìm kiếm thiết bị nào được kết nối, định vị trình điều khiển thiết bị mà người dùng cần để hoạt động và sau đó load chúng.

The Initial RAM Disk

Theo như tìm hiểu sơ bộ thì quá trình này sẽ thực hiện gần như cùng lúc với quá trình load Kernel.

Thực thi trương trình trong /init

Khi quá trình trên hoàn thành thì initramfs sẽ bị xóa khỏi RAM và các chương trình nằm trong root filesystem (/sbin/init) sẽ được thực thi. Đây cũng là lúc mà kernel cũng đã thiết lập xong phần cũng và liên kết chúng với root filesystem. Quá trình này sẽ là quá trình chu trình đầu tiên và các tiến trình khác sẽ được chạy sau đó. Init có nhiệm vụ giữ hệ thống hoạt động và tắt một cách clearly.

Trong hệ điều hành Linux có 2 loại init phổ biến:

  • Loại thứ nhất dựa trên Unix System V
  • Loại thứ hai dựa trên Systemd

Đăng nhập vào hệ thống

Comment Shell login mode

Khi gần kết thúc quá trình khởi động, init sẽ hiển thị một trình command prompts và yêu cầu các bạn nhập và username và password. Và sau đó ta sẽ có được một command shell để gõ lệnh. Nhưng nếu chúng ta có sử dụng giao diện đồ họa thì sẽ không thấy cái này (Cái này chắc hay có ở mấy con VPS??). Và mặc định command shell sẽ là bash (the GNU Bourne Again Shell).

Note:
Subsystem cuối cùng được init khởi động lên là X Window System, là một hệ thống giao diện đồ họa người dùng của Linux.

Tham khảo:
Một bài của OpenSource.com rất hay
Và một bài trên Blogd.net
Một vài tài liệu khác:
GRUB bootloader - Full tutorial
GRUB 2 bootloader - Full tutorial
https://en.wikipedia.org/wiki/Init
https://en.wikipedia.org/wiki/Systemd
VuGaro 13-04-2019

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Vũ Garo

4 bài viết.
1 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
1 0
Trong quá trình vắt não học đạo bên edX cụ thể là khóa Linux thì lại đụng đến khái niệm này. Đây đơn gian chỉ là bài viết ghi lại những gì đã học đ...
Vũ Garo viết 4 tháng trước
1 0
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 7 tháng trước
2 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
1 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!