Vô hiệu hóa các service không cần thiết để Linux boot nhanh hơn

Ngày càng có nhiều hệ điều hành trở nên “cồng kềnh” với rất nhiều service chạy trong chế độ nền. Mặc dù chúng có thể không sử dụng quá nhiều tài nguyên CPU, nhưng chúng làm tăng thời gian boot và việc sử dụng RAM.

Một số bản phân phối Linux bao gồm tất cả mọi thứ, với mục đích làm cho việc sử dụng của người dùng trở nên dễ dàng hơn. Điều này làm cho những thứ như chia sẻ file hoặc in ấn ngày càng sáng tạo. Thật không may, cách duy nhất để thực hiện nó là tạo ra hàng trăm tiện ích để mọi người tìm thấy thứ họ cần. 

May mắn thay, các hệ điều hành mã nguồn mở cung cấp cho bạn khả năng vô hiệu hóa hoặc xóa bất cứ thứ gì không cần thiết. Tùy chọn đầu tiên, làm thế nào để vô hiệu hóa các service - điều sẽ được đề cập trong bài viết này. Khi vô hiệu hóa thay vì gỡ bỏ các thành phần, rủi ro mọi thứ bị phá vỡ vĩnh viễn ít có khả năng xảy ra hơn. Và bạn có thể kích hoạt lại service nếu nhận thấy một cái gì đó hữu ích đã ngừng hoạt động.

Phân tích thời gian cần thiết để load một service

Hầu hết các hệ điều hành dựa trên Linux đã chuyển sang Systemd. Trong số các tiện ích của Systemd, có một chương trình cho phép người dùng phân tích tốc độ boot của hệ thống. Cụ thể, nó cho người dùng thấy tổng thời gian cần thiết để boot và thời gian cần thiết để load mỗi service. Lưu ý rằng một số service load song song. Vì vậy, nếu service thứ nhất cần 2 giây và một service khác cần 3 giây để load, thì không có nghĩa là cần mất tới 5 giây để load 2 service đó.

Mở một terminal và nhập lệnh này:

systemd-analyze

Phân tích

Điều này cho thấy phải mất bao lâu để load các service hệ thống cơ bản và nhân Linux, không tính thời gian khởi động giao diện đồ họa. Nói cách khác, đó là khoảng thời gian cần thiết, kể từ khi kernel được load cho đến khi người dùng đến được bảng điều khiển Linux, như được mô tả dưới đây:

Load các service

Nếu chưa cài đặt một giao diện đồ họa, đây là những gì bạn sẽ thấy trên màn hình của mình.

Tuy nhiên, bạn cũng có thể thấy thời gian mà giao diện đồ họa yêu cầu khởi tạo với lệnh sau:

systemd-analyze critical-chain graphical.target

Giao diện đồ họa

Lệnh này cho thấy giao diện người dùng đồ họa được load trong 2.126 giây, không tính thời gian cần thiết để load các tiện ích desktop. Để kích hoạt hoặc vô hiệu hóa những tiện ích đó, hãy khởi chạy trình quản lý việc khởi động môi trường desktop.

Cuối cùng, có lẽ lệnh hữu ích nhất để giúp Linux boot nhanh hơn là:

systemd-analyze blame

Giúp Linux boot nhanh

Bạn có thể điều hướng danh sách bằng các phím mũi tên hoặc phím PAGE UP và PAGE DOWN. Nhấn q để thoát.

Sử dụng systemctl để vô hiệu hóa các service không cần thiết

Như bạn có thể thấy trong hình trước, service snapd mất 1,295 giây để load. Trên một ổ SSD, khoảng thời gian này là không đáng kể. Nhưng trên một ổ cứng, những service này sẽ lần lượt mất những khoảng thời gian load nhất định và tổng số thời gian cần để load chúng không hề nhỏ. Ngoài ra, trên SSD, nhiều service được load song song, đem lại hiệu quả rất đáng kinh ngạc. Ngược lại, trên một ổ cứng, việc các service load song song rất khó thực hiện. Các đầu đọc đặt trên các platter (platter là một đĩa tròn mà dữ liệu từ tính được lưu trữ trong ổ đĩa cứng) phải chuyển từ sector này sang sector khác, do đó, việc đọc dữ liệu song song gần như không thể xảy ra.

Để dễ hiểu hơn, hãy tưởng tượng như sau: Nếu trên SSD có 5 service, mỗi service cần một giây để boot, thì tổng thời gian cần để load tất cả các service này chưa đến 1,2 giây. Nhưng trên một ổ cứng, với 5 service tương tự, tổng thời gian load sẽ là hơn 5 giây. 

Giả sử bạn không cần service snapd, có thể vô hiệu hóa nó bằng lệnh này:

sudo systemctl disable snapd.service

Nhưng, nếu khởi động lại, bạn sẽ thấy snap daemon vẫn đang chạy. Nguyên nhân có thể là vì các dependency khác đã khởi chạy nó, ngay cả khi nó bị vô hiệu hóa. Hãy thử xem những gì có thể là nguyên nhân của vấn đề này:

systemd-analyze blame | grep snap

systemctl

snapd.seeded.service và snapd.socket là thủ phạm ở đây. Một service con có thể yêu cầu khởi chạy dịch vụ gốc của nó. Khi vô hiệu hóa một service, điều đó đơn giản chỉ là yêu cầu nó không tự động khởi động khi bạn boot mà thôi. Nhưng có một phương pháp hữu hiệu để giải quyết vấn đề này.

Sử dụng systemctl để ẩn một service

sudo systemctl mask snapd.service

Điều này về cơ bản làm cho file service trở thành rỗng để các ứng dụng không có cách nào khởi chạy service.

Trong hầu hết các trường hợp, việc vô hiệu hóa một service không quá phức tạp. Ví dụ dưới đây được chọn để chỉ cho bạn đọc cách xử lý các tình huống khó khăn hơn. Trong trường hợp này, snapd.seeded.service và snapd.socket nên bị vô hiệu hóa hoặc bị ẩn.

Hình sau đây cho thấy thời gian boot đã được cải thiện.

Cải thiện thời gian boot

Thời gian boot đã giảm từ 4,078 giây xuống còn 0,52 giây, giảm tới 15%. Không quá tệ. Và đây chỉ xét một service bị vô hiệu hóa trên SSD. Trên một ổ cứng, thật dễ dàng để có được kết quả tốt hơn nhiều.

Trong ví dụ cụ thể này, nhiều service sẽ bị vô hiệu hóa bằng một lệnh như:

sudo systemctl mask avahi-daemon.service ModemManager.service thermald.service pppd-dns.service

Nếu bạn thích một ứng dụng đồ họa để quản lý các service của mình, bạn có thể xem xét Systemd Manager. Tuy nhiên, những gì bạn có thể làm sẽ bị giới hạn với công cụ này, vì dòng lệnh đem lại sự linh hoạt hơn nhiều.

Chúc bạn thành công!

Xem thêm:

Thứ Năm, 27/12/2018 08:25
51 👨 203