Giới thiệu
Khởi động một hệ thống Linux là một chuỗi các bước quan trọng, từ khi bật nguồn đến khi người dùng có thể đăng nhập. Trong bài viết này, chúng ta sẽ khám phá chi tiết từng bước trong quá trình này, từ việc khởi tạo phần cứng đến việc khởi động không gian người dùng với systemd.
Mục Lục
- Bật Nguồn, POST và Firmware (BIOS/UEFI)
- Bootloader chính và phụ
- Khởi Tạo Kernel (Người Dùng Đầu Tiên với initramfs)
- systemd Tiếp Quản (PID 1)
- Giai Đoạn Đăng Nhập
- Điểm Thất Bại Thường Gặp và Mẹo Khôi Phục
- Lời Kết
1) Bật Nguồn, POST và Firmware (BIOS/UEFI)
- POST (Power-On Self-Test): Kiểm tra CPU, RAM, chipset cơ bản, bộ điều khiển lưu trữ và các thiết bị ngoại vi.
- Khởi tạo phần cứng: Cấu hình các bộ điều khiển (SATA/NVMe/USB, GPU, bộ đếm thời gian) để mã có thể được đọc từ đĩa/USB/Mạng.
- Lựa chọn boot: Sử dụng thứ tự được xác định bởi firmware để chọn thiết bị có thể khởi động (SSD/HDD/USB/Mạng).
2) Bootloader chính và phụ
- Bootloader chính (BIOS/MBR): Khoảng 446 byte mã tại sector 0 của đĩa; quá nhỏ để chứa menu/hệ thống tệp—chỉ tìm và tải giai đoạn tiếp theo.
- UEFI: Tải một tệp thực thi EFI (ví dụ:
\EFI\GRUB\grubx64.efi,\EFI\systemd\systemd-bootx64.efi) từ EFI System Partition (ESP). - Bootloader phụ (ví dụ: GRUB, systemd-boot): Hiển thị menu, nhận tham số kernel, tải kernel và initramfs.
Các tham số kernel phổ biến (được thiết lập bởi bootloader):
root=(ví dụ:root=/dev/nvme0n1p2hoặcroot=UUID=...) – cho biết kernel nơi hệ thống tệp gốc thực sự nằm.ro/rw– gắn root ban đầu ở chế độ chỉ đọc hoặc đọc/ghi.quiet/verbose– điều khiển độ chi tiết của console.singlehoặcsystemd.unit=rescue.target– chế độ khởi động bảo trì.init=– ghi đè PID 1 (hiếm khi, cho phục hồi/gỡ lỗi).
3) Khởi Tạo Kernel (Người Dùng Đầu Tiên với initramfs)
- Giải nén kernel & bắt đầu: kernel được giải nén vào RAM và bắt đầu thực thi.
- Khởi động phần cứng: CPU & SMP, bộ quản lý bộ nhớ & bảng trang, bus thiết bị (PCI/USB), ngắt & bộ đếm thời gian.
- Tải driver: các driver tích hợp + module từ initramfs để truy cập lưu trữ, mã hóa, hệ thống tệp, v.v.
- Khám phá hệ thống tệp gốc: Các script trong initramfs phát hiện và gắn kết hệ thống tệp gốc thực tế, sau đó
pivot_root/switch_rootvào nó. - Bắt đầu PID 1: kernel thực thi quy trình đầu tiên trong không gian người dùng (thường là
/sbin/init→systemd).
4) systemd Tiếp Quản (PID 1)
- Tệp đơn vị mô tả các dịch vụ, socket, bộ hẹn giờ, gắn kết, mục tiêu (trạng thái mục tiêu).
- Khởi động song song tôn trọng phụ thuộc (
After=,Wants=,Requires=) để tăng tốc quá trình khởi động. - Mục tiêu thay thế các cấp chạy SysV:
rescue.target(người dùng đơn),multi-user.target(máy chủ/văn bản),graphical.target(máy tính để bàn).
- Công cụ quan trọng:
systemctl(kiểm soát các đơn vị),journalctl(nhật ký),systemd-analyze(thời gian khởi động).
Ví dụ về phụ thuộc dịch vụ:
network-online.targettrước các dịch vụ cần mạng (ví dụ:docker.service).local-fs.targetđảm bảo các hệ thống tệp cục bộ được gắn kết trước khi các dịch vụ phụ thuộc.
5) Giai Đoạn Đăng Nhập
- Console máy chủ: systemd tạo
agetty@ttyX.servicecho các TTY ảo (Ctrl+Alt+F1..F6). - Máy tính để bàn: một Trình Quản Lý Hiển Thị (GDM, SDDM, LightDM) cung cấp đăng nhập GUI và khởi động phiên (GNOME/KDE/v.v.).
- Sau khi xác thực, shell hoặc phiên máy tính để bàn bắt đầu và không gian người dùng hoàn tất khởi động (dịch vụ người dùng, ứng dụng tự khởi động).
6) Điểm Thất Bại Thường Gặp và Mẹo Khôi Phục
- Firmware/Thứ tự Boot: đảm bảo đĩa/ESP đúng được ưu tiên đầu tiên.
- Vấn đề với GRUB: từ phương tiện trực tiếp, sử dụng
chrootvà cài đặt lạigrub, tái tạo cấu hình (grub-mkconfig). - Kernel panic (hệ thống tệp gốc): xác minh
root=UUID=..., xây dựng lại initramfs (ví dụ:dracut,update-initramfs), xác nhận các module cho bộ điều khiển lưu trữ. - Khẩn cấp/Phục hồi: khởi động với
systemd.unit=rescue.target, xem nhật kýjournalctl -b -p err, vô hiệu hóa các dịch vụ gây vấn đề vớisystemctl disable --now ....
7) Lời Kết
Từ POST đến đăng nhập, quy trình khởi động Linux diễn ra theo các giai đoạn dễ dự đoán. Biết được bạn đang ở đâu—firmware, bootloader, kernel, hay systemd—biến một vấn đề “nó không khởi động” thành một vấn đề có thể giải quyết với các công cụ và điểm kiểm tra cụ thể. Hãy khám phá và tìm hiểu sâu hơn về quy trình này để tối ưu hóa trải nghiệm của bạn với hệ thống Linux.
Câu Hỏi Thường Gặp (FAQ)
1. Quá trình khởi động Linux mất bao lâu?
Thời gian khởi động phụ thuộc vào phần cứng và cấu hình hệ thống, nhưng thông thường khoảng 10-30 giây.
2. Làm thế nào để khắc phục khi hệ thống không khởi động được?
Kiểm tra firmware, bootloader và hệ thống tệp gốc, sử dụng các mẹo khôi phục đã đề cập ở trên.
3. Tại sao tôi cần biết về quá trình khởi động?
Hiểu quá trình khởi động sẽ giúp bạn khắc phục lỗi và tối ưu hóa hiệu suất hệ thống.
Tài Nguyên Tham Khảo
Mẹo Hiệu Suất
- Sử dụng SSD để rút ngắn thời gian khởi động.
- Tối ưu hóa tệp cấu hình GRUB để giảm thời gian chờ đợi khi khởi động.
- Giảm thiểu số lượng dịch vụ khởi động cùng lúc để tăng tốc độ khởi động.
Lưu Ý Quan Trọng
- Luôn sao lưu dữ liệu trước khi thực hiện bất kỳ thay đổi nào đối với cấu hình bootloader hoặc kernel.
- Kiểm tra kỹ các tham số kernel nếu bạn gặp sự cố khởi động.
Biểu Đồ So Sánh
| Bootloader | Ưu điểm | Nhược điểm |
|---|---|---|
| GRUB | Linh hoạt, hỗ trợ nhiều hệ điều hành | Có thể phức tạp cho người mới |
| systemd-boot | Đơn giản, nhanh | Hạn chế hỗ trợ hệ điều hành khác |