0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Quá Trình Khởi Động Linux: Từ Bật Nguồn Đến Đăng Nhập

Đăng vào 7 tháng trước

• 5 phút đọc

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

  1. Bật Nguồn, POST và Firmware (BIOS/UEFI)
  2. Bootloader chính và phụ
  3. Khởi Tạo Kernel (Người Dùng Đầu Tiên với initramfs)
  4. systemd Tiếp Quản (PID 1)
  5. Giai Đoạn Đăng Nhập
  6. Điểm Thất Bại Thường Gặp và Mẹo Khôi Phục
  7. 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 kernelinitramfs.

Các tham số kernel phổ biến (được thiết lập bởi bootloader):

  • root= (ví dụ: root=/dev/nvme0n1p2 hoặc root=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.
  • single hoặc systemd.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_root và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/initsystemd).

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.target trướ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.service cho 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 chroot và cài đặt lại grub, 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ới systemctl 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
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào