SystemV vs Systemd: So Sánh Hệ Thống Init Linux & Vì Sao Systemd Thắng Thế

Dat Ngo TienDat Ngo Tien
8 min read

Khi bạn khởi động một hệ thống Linux, có một "nhạc trưởng" thầm lặng điều phối toàn bộ quá trình, từ việc nạp kernel đến khởi chạy các dịch vụ cần thiết. "Nhạc trưởng" đó chính là hệ thống init. Trong lịch sử Linux, SystemV (SysVinit) là một cái tên kỳ cựu, nhưng Systemd đã nổi lên như một thế lực mới, mang đến nhiều thay đổi và cải tiến.

Vậy, SystemV và Systemd khác nhau như thế nào? Ưu nhược điểm của mỗi hệ thống là gì, và tại sao Systemd lại trở thành lựa chọn phổ biến trên hầu hết các bản phân phối Linux hiện đại? Hãy cùng đi sâu so sánh chi tiết.

Lịch Sử Ra Đời: Từ SysVinit Đến Làn Sóng Systemd

Để hiểu rõ cuộc "đối đầu" này, chúng ta cần nhìn lại một chút về lịch sử các framework quản lý khởi động trên Linux.

  • SysV (System V init): Được coi là nền tảng đầu tiên để quản lý tiến trình khởi động Linux. Nó đã phục vụ cộng đồng Linux trong một thời gian dài.

  • Upstart: Là một phiên bản được Canonical phát triển cho Ubuntu Linux, nhằm cải thiện một số hạn chế của SysV. Tuy nhiên, từ Ubuntu phiên bản 16, hãng cũng đã chuyển sang sử dụng Systemd.

  • Systemd: Ra mắt vào khoảng năm 2010, Systemd nhanh chóng được chấp nhận rộng rãi và hiện là phiên bản ổn định nhất, cập nhật nhiều tính năng hơn so với các hệ thống trước đó. Một điểm mạnh đáng chú ý là Systemd có khả năng tương thích ngược với cả SysV và Upstart, giúp quá trình chuyển đổi dễ dàng hơn.

Hiện tại, do không đáp ứng được với sự phát triển của các bản Linux mới, SysVinit đã không còn được sử dụng nhiều nữa.

SystemV (SysVinit): Kiến Trúc Truyền Thống

SystemV quản lý quá trình khởi động và các dịch vụ của hệ thống dựa trên khái niệm runlevel.

Khái Niệm Runlevel

  • Key của SystemV chính là runlevel, với 7 cấp độ được đánh số từ 0 đến 6.

  • Chương trình init (tiến trình đầu tiên khởi chạy với PID 1) sẽ dựa vào runlevel được chọn để biết những dịch vụ nào cần khởi động cùng hệ thống.

  • Sau khi khởi động, hệ thống sẽ chạy vào cấp runlevel đã được đặt trước.

  • Các runlevel tiêu chuẩn bao gồm:

    • Level 0: Tắt máy.

    • Level 1: Chế độ một người dùng (single-user).

    • Level 3: Chế độ nhiều người dùng, không giao diện đồ họa.

    • Level 5: Chế độ đồ họa (GUI).

    • Level 6: Khởi động lại máy tính.

Tiến Trình Khởi Động Với /etc/inittab và Script rc

  • init xem xét trong file /etc/inittab để biết được nó cần làm gì tiếp theo, dựa vào runlevel mặc định để thực thi các script khởi động (initscript) tương ứng trong mục /etc/rc.d.

  • Tập lệnh /etc/rc.d/rc được sinh ra để chạy tất cả các tập lệnh được liên kết với runlevel tương ứng.

  • Các tập lệnh dành riêng cho từng runlevel đều được liệt kê trong /etc/rc.d/rc?.d, trong đó ? là cấp runlevel tương ứng (ví dụ, /etc/rc.d/rc3.d cho runlevel 3).

  • Khi runlevel được lựa chọn, tập lệnh rc sẽ bắt đầu chạy các tập lệnh bắt đầu với ký tự "S" (Start) và dừng các tập lệnh bắt đầu với ký tự "K" (Kill). Các tập lệnh này được đánh số và chương trình rc chạy theo thứ tự số đó.

Thay Đổi Runlevel và Kiểm Tra

  • Có thể thay đổi runlevel mặc định bằng cách sửa file /etc/inittab (không nên đặt level 0 hoặc 6 làm mặc định).

  • Hoặc sử dụng lệnh init <runlevel_number> để thay đổi runlevel tạm thời trong phiên làm việc hiện tại.

  • Để kiểm tra runlevel đang chạy, sử dụng lệnh runlevel hoặc cat /etc/inittab (để xem runlevel mặc định).

Nhược Điểm của SystemV

Mặc dù là một hệ thống init kỳ cựu, SystemV có những hạn chế đáng kể trong môi trường hiện đại:

  • Khởi động tuần tự: Các script dịch vụ thường được khởi chạy một cách tuần tự, làm chậm quá trình khởi động tổng thể, đặc biệt trên các hệ thống có nhiều dịch vụ.

  • Quản lý phụ thuộc phức tạp: Việc quản lý các phụ thuộc giữa các dịch vụ dựa trên thứ tự đặt tên (Sxx, Kxx) có thể trở nên rườm rà và khó bảo trì.

  • Ít linh hoạt: Khó khăn trong việc giám sát và kiểm soát các dịch vụ một cách chi tiết.

Systemd: Cách Tiếp Cận Hiện Đại Và Mạnh Mẽ

Systemd thay thế khái niệm runlevel và shell script truyền thống bằng "unit" và "target" để kiểm soát hệ thống.

Units và Targets: Khái Niệm Cốt Lõi

  • Unit: Là đơn vị cơ bản mà Systemd quản lý. Có nhiều loại unit khác nhau như service (dịch vụ), socket (kích hoạt dịch vụ khi có kết nối đến socket), device (quản lý thiết bị), mount (quản lý điểm gắn kết), automount, target, v.v..

  • Target: Được sử dụng để nhóm và sắp xếp các unit. Nó tương tự như runlevel trong SystemV, với các target khác nhau sẽ khởi động các nhóm unit khác nhau. Ví dụ phổ biến là multi-user.target (tương đương runlevel 3 hoặc 5 tùy cấu hình) hoặc graphical.target (tương đương runlevel 5).

Cấu Trúc File Unit

Mỗi unit được định nghĩa trong một file cấu hình (thường nằm trong /etc/systemd/system/ hoặc /lib/systemd/system/). Một unit file điển hình bao gồm 3 phần chính:

  • [Unit]: Chứa thông tin mô tả cơ bản về unit, như Description, và các phụ thuộc (ví dụ: After=network.target, Requires=another.service).

  • [Service] (hoặc loại unit tương ứng): Khai báo thông tin cụ thể cho loại unit đó. Đối với service unit, phần này chỉ định các lệnh được thực thi khi dịch vụ được khởi động (ExecStart), dừng (ExecStop), tải lại (ExecReload), v.v..

  • [Install]: Chứa thông tin cài đặt unit, ví dụ như unit này sẽ được kích hoạt bởi target nào (WantedBy=multi-user.target) khi bạn dùng lệnh systemctl enable.

Lệnh systemctl: Công Cụ Quản Lý Toàn Năng

systemctl là lệnh trung tâm để tương tác và kiểm soát Systemd. Nó cho phép bạn quản lý các unit (services, targets, etc.) một cách mạnh mẽ.

Các tùy chọn phổ biến của systemctl bao gồm:

  • systemctl list-units: Hiển thị trạng thái hiện tại của tất cả các unit được cấu hình.

  • systemctl start <name.service>: Khởi động một unit.

  • systemctl stop <name.service>: Dừng một unit.

  • systemctl restart <name.service>: Tắt và khởi động lại unit.

  • systemctl reload <name.service>: Khởi động lại file cấu hình của unit (nếu unit hỗ trợ).

  • systemctl status <name.service>: Hiển thị trạng thái chi tiết của unit.

  • systemctl enable <name.service>: Cấu hình unit để khởi động cùng hệ thống ở lần boot tiếp theo.

  • systemctl disable <name.service>: Cấu hình unit để không khởi động cùng hệ thống.

  • systemctl isolate <name.target>: Chuyển hệ thống sang một target cụ thể, khởi động các unit thuộc target đó và dừng các unit khác.

Ưu Điểm của Systemd

Systemd mang lại nhiều cải tiến đáng kể so với SystemV:

  • Khởi động song song: Systemd có khả năng khởi động các dịch vụ một cách song song dựa trên khai báo phụ thuộc, giúp tăng tốc đáng kể thời gian khởi động hệ thống.

  • Quản lý phụ thuộc rõ ràng: Các phụ thuộc giữa các unit được định nghĩa rõ ràng trong file cấu hình, giúp quản lý dễ dàng và tránh xung đột.

  • Giám sát và kiểm soát dịch vụ tốt hơn: Cung cấp khả năng theo dõi trạng thái dịch vụ chi tiết, tự động khởi động lại dịch vụ khi gặp lỗi.

  • Nhiều tính năng hiện đại: Bao gồm quản lý log tập trung với journald (được đề cập trong tài liệu Module5_System_Logging.docx), kích hoạt dịch vụ qua socket, quản lý cgroups, và nhiều hơn nữa.

  • Tương thích ngược: Có thể chạy các script init kiểu SysV.

So Sánh Trực Tiếp: SystemV vs. Systemd

Tính NăngSystemV (SysVinit)Systemd
Cơ chế chínhRunlevel, shell script (/etc/init.d, /etc/rcX.d)Units, targets, file cấu hình unit
Khởi độngTuần tự (ngụ ý từ việc không đáp ứng được)Song song, dựa trên phụ thuộc
Quản lý dịch vụScript trong /etc/init.d/, lệnh service, chkconfigLệnh systemctl
Phụ thuộcDựa vào thứ tự tên script (Sxx, Kxx)Khai báo rõ ràng trong file unit (Requires, Wants, After, Before) (ngụ ý từ cấu trúc file unit)
Ghi logSyslog truyền thốngSystemd Journal (tích hợp)
Công cụ chínhinit, runlevel, service, chkconfigsystemctl

Kết luận: Systemd Là Lựa Chọn Của Hiện Tại Và Tương Lai

Mặc dù SystemV đã từng là một phần không thể thiếu của Linux, những hạn chế của nó trong việc quản lý hệ thống hiện đại đã trở nên rõ ràng. Systemd, với kiến trúc tiên tiến, khả năng khởi động song song, quản lý phụ thuộc mạnh mẽ và bộ công cụ systemctl toàn diện, đã chứng minh được ưu thế vượt trội. Nó không chỉ giúp hệ thống khởi động nhanh hơn mà còn cung cấp cho quản trị viên khả năng kiểm soát và giám sát dịch vụ tốt hơn nhiều.

Việc hầu hết các bản phân phối Linux lớn đều chuyển sang Systemd là minh chứng rõ ràng cho sự ưu việt và vị thế của nó như là hệ thống init tiêu chuẩn cho Linux trong tương lai gần. Hiểu về cả SystemV (để làm việc với các hệ thống cũ hơn hoặc script tương thích) và Systemd (để làm chủ các hệ thống hiện đại) là một kỹ năng quan trọng cho bất kỳ ai làm việc chuyên sâu với Linux.

0
Subscribe to my newsletter

Read articles from Dat Ngo Tien directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Dat Ngo Tien
Dat Ngo Tien

Hi friend. Nice to meet you in here. Hope you will find useful information on the blog. Follow and chill with me.