Tối ưu hóa hiệu năng khởi động hệ thống Linux với systemd trên Rocky Linux và Ubuntu
Trong môi trường quản trị hệ thống hiện đại, thời gian khởi động của máy chủ (server boot time) đóng vai trò then chốt đối với tính sẵn sàng của dịch vụ. Đối với các kỹ sư phần mềm và sysadmin đang vận hành trên các bản phát hành Linux phổ biến như Rocky Linux (kế thừa tinh hoa từ CentOS) hoặc Ubuntu, việc hiểu rõ cơ chế quản lý dịch vụ systemd là bắt buộc. Mặc dù cả hai hệ điều hành này đều sử dụng systemd làm init system mặc định, nhưng cách chúng cấu hình và tối ưu hóa quy trình khởi động lại có những điểm tinh tế khác biệt. Bài viết này sẽ đi sâu vào phân tích cơ chế hoạt động của systemd, đồng thời cung cấp quy trình kiểm tra và loại bỏ các dịch vụ không cần thiết để rút ngắn thời gian khởi động server một cách an toàn và khoa học.
Nguyên lý hoạt động của systemd trong khởi động
Khác với cơ chế init script truyền thống sử dụng runlevel, systemd sử dụng mô hình dựa trên đơn vị (unit) và graph phụ thuộc. Khi hệ thống nhận lệnh khởi động, systemd sẽ kích hoạt target mặc định, thường là multi-user.target cho server hoặc graphical.target cho máy trạm. Điểm mạnh của systemd nằm ở khả năng khởi động song song các dịch vụ độc lập và cơ chế lazy activation (chỉ khởi động khi có yêu cầu). Tuy nhiên, sự tiện lợi này đôi khi dẫn đến việc hệ thống tích lũy nhiều dịch vụ thừa (bloatware) được bật tự động theo thời gian, gây lãng phí tài nguyên CPU và kéo dài thời gian boot. Để tối ưu, ta cần xác định chính xác những dịch vụ nào đang chiếm dụng thời gian khởi động nhiều nhất và loại bỏ chúng nếu không cần thiết cho môi trường production.
Xác định nguyên nhân chậm khi khởi động
Để bắt đầu quá trình tối ưu, bước đầu tiên là đo lường thời gian khởi động của từng đơn vị systemd. Hệ thống cung cấp công cụ phân tích mạnh mẽ là systemd-analyze. Command systemd-analyze blame sẽ liệt kê tất cả các đơn vị đã chạy trong quá trình khởi động, sắp xếp theo thời gian thực hiện từ lâu nhất đến ngắn nhất. Đây là công cụ quan trọng nhất để định vị "tội phạm" gây chậm. Ngoài ra, bạn có thể sử dụng systemd-analyze critical-chain để xem sơ đồ chuỗi phụ thuộc (dependency chain) của target mục tiêu, giúp hiểu rõ thứ tự kích hoạt và điểm nghẽn về logic phụ thuộc.
Trên cả Rocky Linux và Ubuntu, lệnh này sẽ cho kết quả tương tự về định dạng, nhưng các dịch vụ được liệt kê sẽ khác nhau tùy theo gói cài đặt mặc định. Ví dụ, trên Ubuntu bạn thường thấy các dịch vụ liên quan đến Snap hoặc Cloud-init, trong khi Rocky Linux có thể có các dịch vụ liên quan đến NetworkManager hoặc các agent an ninh mặc định. Việc phân tích kỹ kết quả đầu ra giúp sysadmin đưa ra quyết định chính xác: đơn vị nào là cần thiết cho hạ tầng, đơn vị nào là thừa và có thể tắt đi mà không ảnh hưởng đến tính ổn định.
Chiến lược tắt dịch vụ thừa an toàn
Sau khi xác định được các dịch vụ chiếm thời gian quá lớn thông qua lệnh systemd-analyze blame, bước tiếp theo là kiểm tra xem dịch vụ đó có thực sự cần thiết hay không. Một lỗi phổ biến của người mới là tắt bừa bãi mọi thứ, có thể dẫn đến mất kết nối mạng, mất khả năng sao lưu, hoặc không thể truy cập shell từ xa. Quy trình chuẩn để tắt một dịch vụ là sử dụng command systemctl disable --now . Tham số --now đảm bảo dịch vụ được dừng ngay lập tức trên phiên hiện tại và không tự động chạy lại khi khởi động lần sau.
Tuy nhiên, trước khi thực hiện lệnh disable, bạn nên đọc kỹ mô tả của unit file thông qua systemctl status hoặc tra cứu tài liệu chính thức. Đối với các dịch vụ của nhà cung cấp dịch vụ đám mây (Cloud-init), bạn cần đặc biệt cẩn trọng. Trên Rocky Linux hoặc Ubuntu chạy trên cloud, dịch vụ cloud-init-local.service hoặc cloud-init.service thường chiếm nhiều thời gian. Nếu server của bạn đã được cấu hình xong và không cần chạy script khởi tạo lần đầu nữa, bạn có thể xem xét việc tắt chúng, nhưng hãy chắc chắn rằng việc tắt sẽ không gây mất các biến môi trường quan trọng hay khóa SSH. Một giải pháp an toàn hơn là kiểm tra lại cấu hình của cloud-init để giảm thời gian thực thi thay vì tắt hẳn.
Khác biệt cần lưu ý giữa Rocky Linux và Ubuntu
Mặc dù đều dùng systemd, hai hệ điều hành này có những đặc thù riêng cần lưu ý. Rocky Linux, với tư cách là bản fork của RHEL (Red Hat Enterprise Linux), thường có các gói phần mềm mặc định tập trung vào ổn định và bảo mật doanh nghiệp. Bạn có thể gặp các dịch vụ liên quan đến firewalld hoặc chronyd chạy mặc định với độ ưu tiên cao. Ngược lại, Ubuntu thường tích hợp sâu Snapd và các dịch vụ Snap daemon, đây là nguyên nhân phổ biến khiến thời gian boot của Ubuntu chậm hơn trên các máy ảo cấu hình thấp nếu không được cấu hình lại. Snapd thường tải các gói ứng dụng ngay khi khởi động, gây tắc nghẽn I/O.
Đối với Ubuntu, nếu bạn không sử dụng Snap, bạn có thể cân nhắc disable snapd.service hoặc snappy-docker.service nếu có. Tuy nhiên, trên các phiên bản Ubuntu mới (22.04 trở lên), việc gỡ bỏ Snap hoàn toàn là phức tạp do nhiều công cụ hệ thống phụ thuộc vào nó. Một chiến lược tốt hơn là sử dụng systemd-analyze verify để đảm bảo các thay đổi không gây xung đột. Trên Rocky Linux, việc quản lý dịch vụ thường tuân thủ nghiêm ngặt chuẩn RHEL, do đó các file unit thường nằm trong thư mục /usr/lib/systemd/system và không nên chỉnh sửa trực tiếp mà nên dùng override directory /etc/systemd/system nếu cần thay đổi tham số khởi động.
Xác minh kết quả và giám sát liên tục
Sau khi thực hiện các thao động tắt dịch vụ thừa, bước cuối cùng là xác minh lại hiệu quả. Hãy sử dụng lệnh systemd-analyze time để xem tổng thời gian khởi động. Bạn nên so sánh giá trị này với thời gian trước khi tối ưu. Một tiêu chuẩn tốt cho máy chủ Linux hiện đại là thời gian boot dưới 30 giây kể từ khi POST đến khi prompt shell xuất hiện. Nếu thấy thời gian giảm đáng kể, bạn đã thành công. Tuy nhiên, việc tối ưu không nên dừng lại ở đó. Hãy thiết lập cơ chế giám sát (monitoring) sử dụng các công cụ như Prometheus và Node Exporter để theo dõi thời gian khởi động qua các lần reboot. Điều này giúp phát hiện sớm khi nào có một bản cập nhật (update) mới từ nhà cung cấp hệ điều hành tự động kích hoạt lại các dịch vụ gây chậm.
Tóm lại, việc tối ưu hóa khởi động trên Linux không chỉ là tắt bớt dịch vụ mà là quá trình hiểu rõ kiến trúc hệ thống và nhu cầu thực tế của ứng dụng. Sự kết hợp giữa công cụ systemd-analyze và sự am hiểu về sự khác biệt giữa Rocky Linux và Ubuntu sẽ giúp bạn xây dựng một môi trường server nhanh, ổn định và hiệu quả. Hãy luôn nhớ nguyên tắc vàng: chỉ tắt những gì bạn hiểu rõ chức năng và xác định là không cần thiết. Mọi thay đổi đều nên được thực hiện trong môi trường thử nghiệm trước khi áp dụng lên môi trường production để đảm bảo an toàn tuyệt đối cho hệ thống.