Trừ khi bạn đã sống dưới một tảng đá, hay tệ hơn - bạn không quan tâm nhiều đến việc Linux hoạt động như thế nào, bạn phải nghe về systemd, hệ thống init mới (thay thế) thay thế init cũ và lỗi thời của SysV gần đây được hầu hết Linux thông qua distro.

Hệ thống init là gì?

Khi máy Linux của bạn khởi động, trước tiên nó sẽ chạy một số mã "tích hợp sẵn", được nạp từ BIOS hoặc UEFI trước, theo sau là bộ nạp khởi động, theo cấu hình của nó tải một hạt nhân Linux. Hạt nhân tải lên trình điều khiển, và khi công việc đầu tiên của nó bắt đầu quá trình init, đó là lần đầu tiên được PID (Process ID) 1 được gán cho nó.

Từ quan điểm của người sử dụng, điều này trông giống như bắt đầu lên mạng và cơ sở dữ liệu, vv, nhưng trong thực tế có một quá trình khá phức tạp diễn ra dưới mui xe. Dịch vụ được bắt đầu, dừng lại và khởi động lại, thường song song với nhau. Một số được chạy dưới các đặc quyền khác với các trạng thái khác, trạng thái dịch vụ đang được báo cáo và ghi lại, và nhiều nhiệm vụ khác được thực hiện sẽ làm cho phần khác nhau của hệ thống hoạt động và có thể tương tác với người dùng và môi trường của nó.

Tuy nhiên, điều này được thực hiện như thế nào, không xa đồng phục, và điều này thực sự là nơi tất cả dừng lại là phổ biến và được xác định rõ.

Hệ thống init cũ

Hệ thống init được sử dụng bởi hầu hết các bản phân phối Linux chính thức gần đây là hệ thống V init (hoặc SysV init), có nguồn gốc tên UNIX System V (Phát âm là "Hệ thống năm"), hệ thống UNIX thương mại đầu tiên. Hệ thống V OS đã có một cách cụ thể để chạy quá trình init của nó, và SysV init đã giữ trung thành với điều này trong những năm qua.

Và đã nhiều năm rồi. UNIX System V ban đầu được phát hành vào năm 1983, làm cho init SysV khởi động cách tiếp cận hơn 30 năm để khởi động các máy Linux.

Sự cần thiết cho một sự thay đổi

Vì nó đã được ghi nhận, SysV init đã lỗi thời và quá hạn để được thay thế. Một số lý do cho việc này bao gồm:

  • SysV init sử dụng / sbin / init để bắt đầu quá trình init, nhưng bản thân init có vai trò rất hạn chế. init không nhiều hơn khởi động /etc/init.d/rc, theo cấu hình đọc từ / etc / inittab, do đó sẽ chạy các script để thực hiện công việc thực của tiến trình init. Điều này, trừ khi panelized một cách rõ ràng (giống như với startpar trên Debian), sẽ xảy ra tuần tự, một script bắt đầu sau khi khác, làm cho toàn bộ quá trình chậm khi mỗi kịch bản phải đợi cho đến khi kết thúc.
  • SysV init không có quyền truy cập vào PID hoặc các quá trình mà nó có (gián tiếp) bắt đầu. Nó chỉ đọc các PID và liên kết chúng với các tiến trình thực tế theo một cách phức tạp và phức tạp.
  • Đối với các quản trị viên hệ thống cố gắng sửa đổi môi trường mà theo đó một quá trình nhất định sẽ bắt đầu, nó khá khó khăn với init SysV. (Để đạt được điều này, họ sẽ phải sửa đổi init strcipt có trách nhiệm bắt đầu quá trình đã cho).
  • Có một số chức năng phổ biến cho mọi dịch vụ mà SysV không thực hiện, nhưng mỗi quá trình sẽ phải tự thực hiện thay thế, chẳng hạn như "daemonising" (trở thành một daemon hệ thống), đó là một quá trình phức tạp và lâu dài. Thay vì thực hiện các bước này một lần, SysV yêu cầu mỗi quá trình tự thực hiện công việc.
  • SysV cũng để lại một số chức năng cho các chương trình bên ngoài và không biết gì về các dịch vụ được bắt đầu bởi những chương trình đó.

Tất cả những điều trên, và nhiều lỗi thiết kế hơn, hay đúng hơn là thiết kế hệ thống lỗi thời của SysV, đã tạo ra một hệ thống init hiện đại quá hạn.

Nhập systemd

Đã có nhiều nỗ lực để tạo ra một hệ thống init thay thế, trong đó systemd chỉ là một trong số chúng. Ubuntu sử dụng để chạy hệ thống init riêng của nó được gọi là upstart. Gentoo vẫn sử dụng OpenRC. Các hệ thống init khác bao gồm initng, busybox-init, runit, và Mudur và các hệ thống khác.

Lý do systemd là một người chiến thắng rõ ràng là nó đã được chấp nhận bởi hầu hết các bản phân phối chính. RHL và CentOS tự nhiên đi theo hệ thống, vì Fedora là distro đầu tiên chính thức áp dụng systemd vào năm 2011. Nhưng systemd đã thực sự trở thành hệ thống init để cai trị tất cả, khi Debian 8 chính thức chuyển sang systemd, đưa Ubuntu và các dẫn xuất với nó, khắc phục sự phản đối ban đầu của Canonical (hoặc chính xác hơn Mark Shuttleworth) đối với systemd.

Systemd khác nhau như thế nào?

  • Systemd nhằm mục đích cung cấp một cách tập trung duy nhất để xử lý tiến trình init từ đầu đến cuối.
  • Nó bắt đầu và dừng các quy trình và dịch vụ trong khi vẫn theo dõi các phụ thuộc của chúng. Nó thậm chí có thể bắt đầu một quá trình như là một phản ứng với yêu cầu phụ thuộc của quá trình khác.
  • Ngoài các quá trình khởi động và dừng trong thời gian khởi động, Systemd cũng có thể khởi động bất kỳ lúc nào khi hệ thống khởi động để đáp ứng với các sự kiện kích hoạt nhất định như khi thiết bị được cắm vào.
  • Nó cũng không yêu cầu các quá trình tự daemon. Không giống như init SysV, systemd có thể xử lý các dịch vụ đang chạy mà không phải trải qua quá trình lâu dài để trở thành các daemon.
  • Không giống như init SysV, systemd biết và theo dõi tất cả các tiến trình, bao gồm PID và nhận thông tin về các quy trình đơn giản hơn nhiều đối với các quản trị viên hệ thống trong systemd.
  • Systemd hỗ trợ các thùng chứa là các môi trường dịch vụ được cô lập cơ bản mà không yêu cầu các máy ảo. Điều này có tiềm năng lớn hướng tới các thiết kế hệ thống an toàn và đơn giản hơn trong tương lai.

Tất nhiên đây chỉ là một số lợi thế chính. Để có một cuộc thảo luận đầy đủ về các lợi thế của systemd, bạn nên đọc “Tuyên bố vị trí hệ thống” của Debian 8

Tranh cãi

Tất nhiên systemd đã không được chào đón bởi tất cả. Trong thực tế, nhiều người có và vẫn còn cau mày khi nó, gọi nó là nguyên khối và cồng kềnh, một số thậm chí cáo buộc nó đi "cửa sổ cách" của tất cả mọi thứ tập trung. Nhiều người cho rằng nó không phải là "cách Linux", và chắc chắn systemd dường như không phù hợp với các tiêu chuẩn POSIX, và nếu chúng ta xem systemd như một bộ công cụ (ngoài nhị phân), nó chắc chắn là hugae.

Tuy nhiên, systemd rõ ràng là một bước tiến, và trong khi nó không hoàn hảo, hầu hết những lời chỉ trích nó đã nhận được đã được giải quyết bởi tác giả và nhà phát triển ban đầu của nó Lennart Poettering. Nó chắc chắn là một tiến bộ cần thiết và một bước tiến từ hệ thống init cũ. Linus Torvalds, tác giả của Linux, dường như không quan tâm đến hệ thống quá nhiều, và chúng tôi là ai để tranh luận với “Người sáng tạo”.

Phần kết luận

Đã được chấp nhận bởi tất cả các bản phân phối Linux lớn, systemd là ở đây để ở. Dù một số quản trị viên hệ thống nói gì vì lý do gì, systemd là tương lai của Linux chính thống, cho dù người dùng cá nhân có thích hay không, mà nhìn vào những lợi thế riêng biệt của nó, không nhất thiết là một điều xấu.

Đối với người dùng trung bình, nó mang lại thời gian khởi động nhanh hơn và có lẽ là hệ thống đáng tin cậy hơn, trong khi các bản phân phối trong tương lai chấp nhận nó có thể trở nên “tương thích” hơn với nhau. Vào cuối người dùng, chúng tôi chắc chắn sẽ được hưởng lợi từ thiết kế hệ thống hiện đại và cập nhật hơn mà nó mang lại cho máy tính để bàn của chúng tôi.