Giám Sát Sức Khỏe Ổ Cứng Trên Linux Với Smartmontools: smartctl và Cảnh Báo Qua Email

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Bối Cảnh & Lý Do: Vấn Đề Ổ Cứng Xuống Cấp Âm Thầm

Hiếm có sự cố vận hành nào hỗn loạn bằng việc hệ thống lưu trữ đột ngột hỏng hóc mà không hề báo trước. Máy chủ bỗng nhiên rơi vào trạng thái hệ thống tệp chỉ đọc (read-only filesystem). Các luồng ứng dụng dồn ứ ở trạng thái ngủ không thể ngắt (trạng thái D đáng sợ). Tệ hơn nữa, các giao dịch cơ sở dữ liệu bị hỏng giữa chừng khi đang ghi đĩa, khiến các bảng dữ liệu bị xáo trộn và cả đội ngũ rơi vào khủng hoảng.

Các ổ cứng hiện đại hiếm khi “chết” mà không để lại dấu hiệu báo trước. Rất lâu trước khi mô-tơ bị kẹt hay bộ điều khiển NAND bị khóa hoàn toàn, các thiết bị lưu trữ đã tích tụ nhiều dấu hiệu cảnh báo. Bạn sẽ thấy các bad block, reallocated sector và lỗi truyền dữ liệu CRC do cáp SATA bị lỏng hoặc xuống cấp.

Nhiệt độ tăng vọt trên 55°C cũng gây ra những tổn hại đáng kể. Đáng tiếc là kernel Linux tiêu chuẩn thường giữ im lặng trong khi ổ đĩa âm thầm ánh xạ lại (remap) các bad sector ở chế độ nền. Hệ điều hành mặc định tin tưởng bộ điều khiển ổ đĩa sẽ tự xử lý hao mòn nội bộ—cho đến khi các thao tác I/O đọc/ghi bị tắc nghẽn hoàn toàn.

Khả năng thu thập dữ liệu đo xa phần cứng (hardware telemetry) chủ động sẽ giải quyết khoảng trống này. S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) được tích hợp bên trong hầu hết các bộ điều khiển ổ đĩa hiện đại. Trên Linux, smartmontools cho phép bạn truy cập trực tiếp vào dữ liệu phần cứng này thông qua hai tiện ích cốt lõi:

  • smartctl: Tiện ích dòng lệnh dùng để kiểm tra nhanh thủ công, chạy tự kiểm tra phần cứng theo yêu cầu và trích xuất các thuộc tính của nhà sản xuất.
  • smartd: Daemon chạy ngầm dung lượng nhẹ (thường sử dụng dưới 15MB RAM) có nhiệm vụ thăm dò sức khỏe ổ đĩa, chạy các bài tự kiểm tra theo lịch và kích hoạt cảnh báo qua email khi các ngưỡng quan trọng bị vi phạm.

Trên một máy chủ cơ sở dữ liệu Ubuntu bận rộn chạy hai ổ SATA SSD, việc sớm phát hiện 24 reallocated sector trên /dev/sdb đã giúp tôi thay thế ổ đĩa trong một khoảng thời gian bảo trì dự kiến chỉ 15 phút, thay vì phải chật vật xử lý sự cố sập hệ thống bất ngờ lúc 3 giờ sáng.

Cài Đặt: Thiết Lập Smartmontools và Dịch Vụ Gửi Thư

Bạn cần các công cụ chẩn đoán cốt lõi và một tiện ích chuyển phát thư tối thiểu để daemon có thể gửi các cảnh báo sự cố ra bên ngoài.

1. Cài Đặt Gói Trên Hệ Thống Debian/Ubuntu và RHEL

Trên Debian và Ubuntu, cài đặt smartmontools cùng với mailutils (hoặc bsd-mailx):

sudo apt update
sudo apt install smartmontools mailutils -y

Đối với RHEL, Rocky Linux hoặc AlmaLinux, cài đặt các gói bằng dnf:

sudo dnf install smartmontools mailx -y

2. Khám Phá và Kiểm Tra Các Thiết Bị Lưu Trữ Đang Kết Nối

Quét các ổ đĩa vật lý trước khi chỉnh sửa tệp cấu hình:

sudo smartctl --scan

Bạn sẽ thấy danh sách các ổ đĩa được phát hiện cùng với giao diện bus của chúng (SATA, NVMe hoặc SCSI):

/dev/sda -d scsi # /dev/sda, thiết bị SCSI
/dev/nvme0 -d nvme # /dev/nvme0, thiết bị NVM Express

Tiếp theo, hãy xác nhận xem tính năng giám sát S.M.A.R.T. đã được kích hoạt trên thiết bị mục tiêu hay chưa:

sudo smartctl -i /dev/sda

Quan sát các dòng cuối của kết quả trả về. Nếu tính năng hỗ trợ S.M.A.R.T. hiển thị là khả dụng nhưng đang bị tắt (disabled), hãy bật nó lên:

sudo smartctl -s on /dev/sda

Cấu Hình: Thăm Dò, Tự Kiểm Tra và Thông Báo Qua Email

Kiểm tra thủ công rất hữu ích khi xử lý sự cố tức thời, nhưng trí nhớ con người thì không thể tin cậy tuyệt đối. Tính sẵn sàng thực sự của máy chủ đòi hỏi smartd phải giám sát sức khỏe liên tục.

1. Đánh Giá Nhanh Ổ Đĩa Bằng smartctl

Chạy kiểm tra nhanh để xem tình trạng sức khỏe tổng thể của ổ đĩa:

sudo smartctl -H /dev/sda

Kết quả PASSED mang lại sự yên tâm, nhưng nó chưa phản ánh toàn bộ bức tranh. Những ổ đĩa có hàng trăm bad block đang chờ xử lý vẫn có thể hiển thị kết quả đạt nếu chưa chạm tới ngưỡng lỗi của nhà sản xuất. Hãy đi sâu vào các giá trị thuộc tính thô để biết điều gì thực sự đang diễn ra:

sudo smartctl -A /dev/sda

Trên các ổ SATA HDD và SSD, hãy theo dõi những bộ đếm quan trọng sau:

  • ID 5 (Reallocated_Sector_Ct): Giá trị thô lớn hơn 0 đồng nghĩa với việc các sector bị hỏng đã được chuyển sang vùng nhớ dự phòng. Nếu giá trị này nhảy từ 0 lên 50 chỉ trong vài ngày, đó là dấu hiệu cho thấy bề mặt đĩa lưu trữ đang xuống cấp nghiêm trọng.
  • ID 187 (Reported_Uncorrect): Các lỗi đọc mà phần cứng ECC không thể phục hồi. Bất kỳ giá trị nào lớn hơn 0 đều là dấu hiệu bạn cần sao lưu dữ liệu ngay lập tức.
  • ID 197 (Current_Pending_Sector): Các sector không ổn định đang chờ được ánh xạ lại. Nếu thao tác ghi thất bại tại đây, việc mất dữ liệu sẽ diễn ra ngay sau đó.
  • ID 199 (UDMA_CRC_Error_Count): Thường chỉ ra cáp dữ liệu SATA bị gập, oxy hóa hoặc lỏng chứ không hẳn do ổ đĩa sắp hỏng. Hãy thử cắm lại hoặc thay cáp trước.

Ổ đĩa NVMe định dạng dữ liệu đo xa theo cách khác. Bạn có thể truy vấn chúng bằng lệnh:

sudo smartctl -a /dev/nvme0n1

Hãy theo dõi sát sao chỉ số Available Spare (thay ổ đĩa nếu con số này giảm xuống dưới 10%) và Percentage Used để lên kế hoạch thay mới phần cứng trước khi cạn kiệt độ bền ghi (write endurance).

2. Cấu Hình Daemon smartd

Mở tệp cấu hình chính của daemon:

sudo nano /etc/smartd.conf

Hầu hết các bản phân phối Linux đều bật sẵn một dòng quét mặc định chưa được cấu hình. Hãy chú thích (comment out) dòng DEVICESCAN để bạn có thể định nghĩa các quy tắc giám sát rõ ràng cho các ổ đĩa production của mình:

# Vô hiệu hóa dòng quét gom mặc định:
# DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner

Thêm các chỉ thị giám sát tùy chỉnh vào cuối tệp:

# Giám sát /dev/sda (SATA SSD/HDD)
/dev/sda -a -o on -S on \
  -s (S/../.././02|L/../../6/03) \
  -W 4,45,55 \
  -m [email protected] -M test

Dưới đây là ý nghĩa các cờ lệnh chỉ dẫn cho smartd:

  • -a: Giám sát toàn bộ các thuộc tính sức khỏe S.M.A.R.T. tiêu chuẩn.
  • -o on: Bật tính năng tự động thu thập dữ liệu ngầm offline mỗi 4 giờ một lần trên phần cứng được hỗ trợ.
  • -S on: Tự động lưu lại trạng thái thuộc tính qua các lần khởi động lại máy.
  • -s (S/../.././02|L/../../6/03): Chạy bài kiểm tra ngắn (S) hàng ngày vào lúc 2:00 AM, và bài kiểm tra mở rộng (L) vào mỗi thứ Bảy lúc 3:00 AM.
  • -W 4,45,55: Theo dõi nhiệt độ hoạt động. Ghi log khi nhiệt độ thay đổi 4°C, đưa ra cảnh báo ở mức 45°C và kích hoạt cảnh báo nguy cấp nếu ổ đĩa chạm ngưỡng 55°C.
  • -m [email protected]: Hộp thư đích nhận cảnh báo.
  • -M test: Gửi một email thử nghiệm mỗi khi smartd khởi động lại, giúp xác minh máy chủ thư của bạn thực sự định tuyến được cảnh báo.

3. Kích Hoạt Dịch Vụ Daemon

Trên Debian và các bản phát hành Ubuntu cũ hơn, hãy đảm bảo cờ khởi động daemon đã được bật trong /etc/default/smartmontools:

sudo sed -i 's/^#start_smartd=yes/start_smartd=yes/' /etc/default/smartmontools

Kích hoạt và khởi chạy dịch vụ systemd:

sudo systemctl enable --now smartd

Xác Minh & Giám Sát: Xác Nhận Việc Gửi Thư và Chạy Kiểm Tra

Một hệ thống giám sát chưa được kiểm chứng sẽ mang lại cảm giác an tâm giả tạo. Hãy luôn xác nhận rằng các email thông báo đã đến nơi và các bài tự kiểm tra phần cứng theo lịch thực sự hoàn tất.

1. Xác Minh Email Thử Nghiệm

Nhờ có tham số -M test trong /etc/smartd.conf, daemon sẽ gửi một email ngay khi dịch vụ khởi chạy. Hãy kiểm tra system journal để xác minh quá trình truyền thư:

sudo journalctl -u smartd -e

Tìm các dòng xác nhận việc gửi thư thành công tới MTA cục bộ hoặc relay của bạn:

smartd[2412]: Đang thực thi kiểm tra gửi <mail> tới [email protected]...
smartd[2412]: Kiểm tra gửi <mail> tới [email protected]: thành công

Kiểm tra hộp thư đến (và thư mục spam) của bạn hoặc kiểm tra hàng đợi thư cục bộ bằng lệnh mailq. Sau khi đã xác nhận thư đến ổn định, hãy xóa cờ -M test khỏi /etc/smartd.conf và tải lại cấu hình daemon:

# Chỉnh sửa /etc/smartd.conf để xóa "-M test", sau đó chạy:
sudo systemctl reload smartd

2. Thực Thi và Đánh Giá Bài Tự Kiểm Tra Thủ Công

Hãy kiểm tra phần cứng ngay lập tức thay vì chờ đợi đến lịch chạy cuối tuần. Khởi chạy bài kiểm tra ngắn thủ công trên /dev/sda:

sudo smartctl -t short /dev/sda

Các bài kiểm tra ngắn thường mất từ 60 đến 120 giây. Các bài kiểm tra mở rộng trên các ổ cơ dung lượng lớn 12TB có thể kéo dài từ 18 đến 24 giờ. Chờ khoảng hai phút, sau đó kiểm tra nhật ký tự kiểm tra của ổ đĩa:

sudo smartctl -l selftest /dev/sda

Kiểm tra mục mới nhất ở đầu bảng:

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      14280        -

Trạng thái Completed without error có nghĩa là bộ điều khiển không phát hiện lỗi bề mặt hay sự cố cơ học nào. Nếu trạng thái báo cáo lỗi đọc không thể sửa (uncorrectable read failure), hãy sao chép địa chỉ LBA_of_first_error và bắt đầu kế hoạch thay thế ổ đĩa trước khi nó chuyển sang chế độ chỉ đọc.

3. Các Lệnh Bảo Trì Định Kỳ

Hãy lưu các lệnh này vào bộ công cụ quản trị hệ thống (sysadmin) để phục vụ công việc vận hành hàng ngày:

  • systemctl status smartd: Kiểm tra daemon chạy ngầm có đang hoạt động bình thường hay không.
  • smartctl -l error /dev/sda: In nhật ký lỗi ATA nội bộ, theo dõi các lần thiết lập lại bắt tay phần cứng (handshake reset), lỗi hết thời gian chờ lệnh (command timeout) và sự cố đường truyền bus.
  • smartctl -X /dev/sda: Hủy ngay bài tự kiểm tra đang chạy nếu ứng dụng của bạn đột ngột cần thông lượng I/O đĩa ở mức tối đa.

Việc tự động hóa kiểm tra phần cứng với smartmontools sẽ biến những sự cố hỏng ổ đĩa bất ngờ thành các đợt bảo trì định kỳ có kế hoạch.

Share: