Quản trị VPS

Cách cập nhật Ubuntu Server mà không biến lần bảo trì thành sự cố

Quy trình cập nhật Ubuntu Server có kiểm soát: kiểm tra backup, mô phỏng package, xử lý file cấu hình và xác nhận dịch vụ sau bảo trì.

Cập nhật Ubuntu Server an toàn
Mục lục

Trong công việc quản trị hệ thống, cập nhật phần mềm là việc bắt buộc để vá các lỗ hổng bảo mật và giữ cho máy chủ luôn ổn định. Tuy nhiên, trên môi trường production đang có khách hàng truy cập, việc gõ một lệnh sudo apt upgrade -y trong lúc vội vã có thể nhanh chóng biến một buổi tối êm ả thành một đợt sự cố kéo dài.

Những rủi ro thực tế rất dễ xảy ra nếu thao tác thiếu cẩn trọng:

  • APT tự động cập nhật một phiên bản thư viện mới khiến mã nguồn PHP hoặc Node.js không còn tương thích.
  • Gói cập nhật Nginx hỏi ghi đè file cấu hình, bạn bấm đồng ý khiến toàn bộ cấu hình tên miền và chứng chỉ SSL bị xóa trắng về mặc định.
  • Nhân hệ điều hành (Kernel) được cập nhật nhưng máy chủ bị khởi động lại đột ngột giữa giờ cao điểm, hoặc tệ hơn là sau khi reboot thì dịch vụ mạng không tự nhận lại IP.

Cập nhật Ubuntu Server an toàn không bắt đầu bằng lệnh cài đặt. Nó bắt đầu từ việc chuẩn bị đường lui dự phòng, đọc trước những gì sắp thay đổi và có quy trình kiểm tra cụ thể sau khi hoàn thành.

Phân biệt cập nhật gói phần mềm và nâng cấp phiên bản hệ điều hành

Trước hết, bạn cần làm rõ hai khái niệm hoàn toàn khác nhau này:

  • Cập nhật gói phần mềm (Package Upgrade): Cài đặt các bản vá lỗi và bản vá bảo mật trong cùng một phiên bản Ubuntu (ví dụ: cập nhật các gói trong Ubuntu 22.04 LTS hoặc 24.04 LTS). Đây là công việc định kỳ hàng tuần hoặc hàng tháng.
  • Nâng cấp phiên bản hệ điều hành (Release Upgrade): Nâng toàn bộ hệ thống từ phiên bản cũ lên phiên bản mới hơn (ví dụ: từ Ubuntu 22.04 lên 24.04). Đây là một đợt thay đổi kiến trúc lớn, đòi hỏi kế hoạch kiểm thử riêng biệt và không bao giờ được gộp chung vào một đợt bảo trì vá lỗi thông thường.

4 bước chuẩn bị trước khi gõ lệnh cập nhật

Trước khi tiến hành nâng cấp bất kỳ gói nào trên máy chủ production, hãy dành 5 phút để hoàn tất các bước chuẩn bị:

1. Chọn khung giờ thấp điểm và giữ người theo dõi

Luôn chọn thời điểm lượng truy cập của website ở mức thấp nhất trong ngày (ví dụ từ 22h đêm đến 23h). Tuyệt đối không cập nhật sát giờ tan sở hoặc ngay trước các đợt chạy chiến dịch bán hàng lớn của doanh nghiệp.

2. Xác nhận đường truy cập dự phòng

Nếu bản cập nhật làm gián đoạn dịch vụ SSH hoặc tường lửa, bạn sẽ vào lại máy chủ bằng cách nào? Hãy mở trang portal của nhà cung cấp VPS và xác nhận bạn có thể truy cập Web Console trực tiếp từ trình duyệt. Luôn giữ nguyên cửa sổ terminal đang kết nối trong suốt quá trình thao tác.

3. Kiểm tra bản sao lưu gần nhất

Xác nhận database và các file quan trọng đã có bản backup an toàn nằm ngoài máy chủ VPS. Nếu nhà cung cấp hỗ trợ tạo snapshot nhanh, bạn có thể bấm tạo một snapshot trước khi cập nhật để có thể quay về trạng thái ban đầu trong vòng vài phút nếu phát sinh lỗi nghiêm trọng (xem bài Snapshot có thay thế backup được không?).

4. Kiểm tra dung lượng ổ đĩa còn lại

Gõ lệnh df -h để đảm bảo phân vùng gốc (/) và phân vùng /boot còn trống ít nhất 3–5 GB. Quá trình tải các gói cài đặt và giải nén kernel mới có thể làm đầy ổ đĩa nếu dung lượng trống quá thấp, dẫn tới tình trạng hệ thống bị treo cứng giữa chừng.

Quy trình 3 bước thực hiện cập nhật an toàn

Bước 1: Làm mới danh sách gói và mô phỏng trước khi cài

Đầu tiên, cập nhật danh sách các gói phần mềm mới nhất từ kho lưu trữ:

bash
sudo apt update

Quan sát kỹ output của lệnh. Nếu có bất kỳ dòng nào báo lỗi kết nối repository hoặc lỗi xác thực khóa PPA của bên thứ ba, bạn cần xử lý dứt điểm trước khi tiếp tục.

Tiếp theo, xem danh sách các gói có bản nâng cấp:

bash
apt list --upgradable

Để chắc chắn không có bất ngờ nào xảy ra, hãy chạy lệnh mô phỏng thử nghiệm (Dry-run):

bash
sudo apt-get --simulate upgrade

Lệnh này sẽ cho bạn thấy chính xác hệ thống chuẩn bị làm gì: có gói nào bị gỡ bỏ không, có gói mới nào phải cài thêm không, và dung lượng tải về là bao nhiêu. Nếu thấy xuất hiện cảnh báo gỡ bỏ một gói phần mềm quan trọng (như MySQL, PHP hay Nginx), bạn phải dừng lại ngay lập tức để kiểm tra sự xung đột của các repository.

Bước 2: Chạy cập nhật có kiểm soát (Nói không với flag -y)

Khi đã thấy danh sách các gói an toàn, hãy chạy lệnh nâng cấp:

bash
sudo apt upgrade

Trên máy chủ production, tuyệt đối không thêm cờ -y theo thói quen. Việc dừng lại ở bước xác nhận cuối cùng cho bạn thêm một cơ hội để rà soát lại số lượng package bị tác động.

Bước 3: Cẩn trọng tuyệt đối khi gặp bảng hỏi về file cấu hình (Config Prompts)

Trong quá trình cài đặt, nếu một phần mềm có phiên bản mới đi kèm file cấu hình mặc định (như OpenSSH, Nginx hoặc fail2ban), hệ điều hành sẽ dừng lại và hỏi bạn muốn xử lý thế nào:

  • Giữ nguyên file hiện tại (Keep the local version currently installed - Nhấn N hoặc O): Đây là lựa chọn an toàn nhất trong đa số trường hợp, giúp bảo vệ toàn bộ cấu hình tuỳ chỉnh, domain và cổng kết nối mà bạn đã thiết lập trước đó.
  • Ghi đè bằng file của bản mới (Install the package maintainer's version - Nhấn Y): Tùy chọn này sẽ xóa sạch cấu hình cũ và thay bằng file mẫu của Ubuntu. Chỉ chọn phương án này nếu bạn đã sao lưu file cấu hình cũ và hiểu rõ sự khác biệt.

Nếu phân vân, bạn có thể chọn tùy chọn hiển thị sự khác biệt (Show the differences between the versions) để đối chiếu từng dòng trước khi quyết định.

Những gói phần mềm bị giữ lại (Packages Kept Back): Có phải là lỗi?

Đôi khi sau khi chạy apt upgrade, bạn sẽ thấy một dòng thông báo: "The following packages have been kept back...".

Rất nhiều người vội vã gõ lệnh sudo apt dist-upgrade hoặc cố ép cài từng gói để làm sạch thông báo này. Đây là điều không nên làm trên máy chủ đang chạy thật.

Hiện tượng gói bị giữ lại thường xuất phát từ cơ chế Phased Updates của Ubuntu: Canonical phát hành bản vá theo từng đợt để thăm dò sự ổn định trong cộng đồng người dùng. Nếu máy chủ của bạn nằm ở nhóm nhận sau, gói đó sẽ tạm thời bị giữ lại vài ngày cho đến khi bản vá được chứng minh là an toàn tuyệt đối. Hãy kiên nhẫn chờ đợi chu kỳ cập nhật tiếp theo thay vì ép cài đặt bằng lệnh nâng cấp cưỡng chế.

Khởi động lại dịch vụ hay Khởi động lại toàn bộ máy chủ (Reboot)?

Sau khi các gói phần mềm đã được cài xong, nhiều dịch vụ nền vẫn đang chạy trên bộ nhớ RAM với các thư viện cũ.

1. Khởi động lại dịch vụ bị ảnh hưởng

Ubuntu thường có công cụ needrestart để liệt kê các dịch vụ cần nạp lại. Thay vì khởi động lại toàn bộ máy chủ, bạn chỉ cần nạp lại (reload hoặc restart) các dịch vụ có liên quan:

  • Với Nginx: Hãy chạy sudo nginx -t kiểm tra cú pháp trước, sau đó dùng sudo systemctl reload nginx để nạp lại cấu hình mà không làm rớt các kết nối đang mở của khách hàng.
  • Với PHP-FPM hoặc Node.js: Khởi động lại tiến trình để ứng dụng nạp các thư viện mới.

2. Khi nào bắt buộc phải Reboot máy chủ?

Nếu bản cập nhật bao gồm phiên bản nhân Linux (Kernel mới) hoặc các thư viện nền tảng của hệ thống, Ubuntu sẽ tạo ra một file thông báo:

bash
cat /var/run/reboot-required

Nếu file này xuất hiện, điều đó có nghĩa là kernel mới chỉ có thể được áp dụng sau khi máy chủ được khởi động lại hoàn toàn.

Tuy nhiên, bạn không nhất thiết phải gõ lệnh reboot ngay trong đêm đó nếu website đang có traffic. Bạn có thể lên lịch khởi động lại vào một khung giờ bảo trì riêng vào cuối tuần. Khi reboot, hãy luôn tuân thủ nguyên tắc: kiểm tra trạng thái tự khởi động của các dịch vụ (systemctl is-enabled nginx mysql docker) trước khi gõ lệnh sudo reboot.

Quy trình kiểm tra 4 lớp sau khi cập nhật

Trước khi tuyên bố đợt bảo trì hoàn tất, hãy kiểm tra hệ thống theo đúng hành trình của người dùng:

  1. Kiểm tra từ bên ngoài: Mở trình duyệt ngoài mạng nội bộ, truy cập vào website thật, thử mở trang chủ, trang sản phẩm và đăng nhập vào trang quản trị xem mọi thứ có phản hồi bình thường không.
  2. Kiểm tra trạng thái dịch vụ: Gõ lệnh systemctl --failed để xem có bất kỳ tiến trình hệ thống nào bị lỗi sau khi cập nhật không.
  3. Kiểm tra trạng thái package: Gõ lệnh sudo dpkg --audit để đảm bảo không có gói cài đặt nào bị dở dang hoặc hỏng hóc.
  4. Kiểm tra biểu đồ giám sát: Quan sát CPU, RAM và tỷ lệ lỗi trên Dashboard giám sát trong vòng 15–30 phút sau cập nhật để đảm bảo không có hiện tượng rò rỉ bộ nhớ hay lỗi truy vấn ngầm (xem bài Nên monitoring những gì trên một VPS chạy website?). Cập nhật hệ thống là một hoạt động bảo trì nên được đưa vào lịch quản trị VPS hằng tháng để tránh tích tụ lỗi bảo mật.

Checklist cập nhật Ubuntu Server an toàn

  • ☐ Chọn thời điểm cập nhật vào khung giờ thấp điểm, có người phụ trách theo dõi.
  • ☐ Đã kiểm tra tính năng Web Console trên portal nhà cung cấp và giữ nguyên cửa sổ SSH hiện tại.
  • ☐ Đã xác nhận bản backup mới nhất nằm an toàn bên ngoài máy chủ (hoặc đã tạo snapshot dự phòng).
  • ☐ Dung lượng phân vùng gốc còn trống ít nhất 3–5 GB.
  • ☐ Đã chạy sudo apt update và không bỏ qua các dòng báo lỗi repository.
  • ☐ Đã chạy lệnh mô phỏng apt-get --simulate upgrade để xem trước các gói bị gỡ bỏ hoặc cài thêm.
  • ☐ Chạy sudo apt upgrade thủ công (không dùng cờ -y).
  • ☐ Cẩn trọng khi gặp câu hỏi về file cấu hình: ưu tiên giữ lại file cấu hình đang chạy ổn định của máy chủ.
  • ☐ Kiểm tra yêu cầu khởi động lại (/var/run/reboot-required) và chỉ reboot khi đã lên lịch bảo trì cụ thể.
  • ☐ Kiểm tra thực tế hoạt động của website ngoài Internet và xác nhận lệnh systemctl --failed không báo lỗi.

Chia sẻ bài viết hữu ích

Gửi bài viết này cho đồng nghiệp

Đọc tiếp

Bài nên đọc tiếp

Xem tất cả bài về Quản trị VPS