Làm chủ Software RAID với mdadm: Hướng dẫn thực tế về dự phòng ổ đĩa trên Linux

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

Tại sao bạn không nên tin tưởng vào một ổ đĩa duy nhất

Chạy một máy chủ production trên một ổ đĩa duy nhất giống như việc lái xe mà không có lốp dự phòng. Nó hoạt động ổn cho đến khi sự cố xảy ra. Lỗi phần cứng không phải là một khả năng; đó là một điều chắc chắn sẽ xảy ra.

Tôi nhớ một sự cố cụ thể khi một ổ SSD 500GB duy nhất bị lỗi trên một máy chủ cơ sở dữ liệu, dẫn đến tám giờ khôi phục dữ liệu trong hoảng loạn và một khách hàng rất không hài lòng. Ngoài rủi ro mất toàn bộ dữ liệu, một ổ đĩa duy nhất còn là một nút thắt cổ chai lớn về hiệu suất. Khi cơ sở dữ liệu và nhật ký (logs) của bạn tranh giành cùng một I/O vật lý, độ trễ thường tăng vọt từ 2ms lên hơn 100ms, kéo toàn bộ hệ thống đi xuống.

Trên môi trường Ubuntu 22.04 của tôi, việc chuyển sang mảng đa ổ đĩa đã cắt giảm 40% thời gian sao lưu. Bằng cách phân chia tải trên nhiều ổ đĩa bằng mdadm, bạn đạt được hai điều: sự an tâm nhờ tính dự phòng và sự gia tăng đáng kể về thông lượng. Hướng dẫn này sẽ đi sâu vào cách thiết lập điều đó.

Chọn cấp độ RAID phù hợp

RAID (Redundant Array of Independent Disks) nhóm các ổ đĩa vật lý thành một ổ đĩa logic. Linux quản lý việc này thông qua mdadm, một tiện ích mạnh mẽ xử lý mọi thứ từ khởi tạo đến khôi phục. Trước khi bắt đầu, bạn phải chọn một chiến lược dựa trên phần cứng của mình:

  • RAID 0 (Striping): Kỹ thuật này chia nhỏ dữ liệu trên các ổ đĩa. Nó cực kỳ nhanh—gấp đôi tốc độ đọc/ghi với hai ổ đĩa—nhưng không cung cấp khả năng bảo vệ. Nếu một ổ đĩa hỏng, mọi thứ sẽ mất hết.
  • RAID 1 (Mirroring): Tạo ra một bản sao chính xác của dữ liệu trên hai hoặc nhiều ổ đĩa. Đây là tiêu chuẩn vàng cho các phân vùng hệ điều hành. Nếu một ổ đĩa bị lỗi, thời gian hoạt động (uptime) của bạn vẫn không bị ảnh hưởng.
  • RAID 5 (Striping với Parity): Bạn cần ít nhất ba ổ đĩa. Nó cân bằng giữa dung lượng lưu trữ và an toàn bằng cách sử dụng không gian tương đương một ổ đĩa cho dữ liệu parity. Bạn có thể mất một ổ đĩa mà không bị mất dữ liệu.
  • RAID 6 (Double Parity): Yêu cầu ít nhất bốn ổ đĩa. Nó tương tự như RAID 5 nhưng có thể chịu được hai ổ đĩa bị lỗi đồng thời. Điều này lý tưởng cho các mảng lớn sử dụng ổ đĩa 8TB+ nơi thời gian rebuild (tái thiết lập) kéo dài.

Chuẩn bị môi trường

Bạn cần xác định các ổ đĩa thô trước khi xây dựng mảng. Tôi luôn sử dụng lsblk để kiểm tra kỹ tên và kích thước ổ đĩa nhằm tránh việc xóa nhầm dữ liệu.

Cài đặt công cụ mdadm

Hầu hết các bản cài đặt Linux tối giản không bao gồm các tiện ích quản lý RAID. Hãy sử dụng trình quản lý gói của bạn để cài đặt chúng:

# Dành cho Ubuntu, Debian, hoặc Linux Mint
sudo apt update && sudo apt install mdadm -y

# Dành cho RHEL, AlmaLinux, hoặc Fedora
sudo dnf install mdadm -y

Xác định các ổ đĩa của bạn

Trong ví dụ này, tôi có bốn ổ đĩa ảo 20GB: /dev/sdb, /dev/sdc, /dev/sdd, và /dev/sde. Hãy kiểm tra thiết lập của riêng bạn bằng lệnh này:

lsblk

Đảm bảo các ổ đĩa này còn trống. Các lệnh tiếp theo sẽ ghi đè lên bất kỳ bảng phân vùng và dữ liệu hiện có nào.

Xây dựng mảng RAID 1 (Mirroring)

RAID 1 hoàn hảo cho các nhu cầu về tính sẵn sàng cao, chẳng hạn như giữ cho thư mục /var/lib/mysql luôn trực tuyến. Để tạo một mảng RAID 1 có tên /dev/md0 bằng hai ổ đĩa:

sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Hệ thống sẽ yêu cầu xác nhận. Nhập y và nhấn Enter. Bạn có thể theo dõi quá trình đồng bộ hóa ổ đĩa trong thời gian thực bằng cách kiểm tra tệp ảo mdstat:

watch cat /proc/mdstat

Xây dựng mảng RAID 5 (Dung lượng + Bảo vệ)

RAID 5 là lựa chọn ưu tiên cho các máy chủ tệp. Nó cung cấp không gian sử dụng tối đa trong khi vẫn có một mạng lưới an toàn. Nếu bạn có ba ổ đĩa 1TB, thiết lập RAID 5 sẽ cung cấp cho bạn 2TB dung lượng lưu trữ khả dụng.

Để xây dựng mảng bằng ba ổ đĩa:

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

Định dạng và Duy trì cấu hình

Một mảng RAID sẽ không hữu ích cho đến khi nó có hệ thống tệp và một điểm gắn kết (mount point). Tôi khuyên dùng ext4 cho hầu hết các workload của máy chủ Linux nhờ độ tin cậy của nó trong các chu kỳ tắt/mở nguồn.

1. Tạo hệ thống tệp

sudo mkfs.ext4 -F /dev/md0

2. Gắn kết (Mount) bộ lưu trữ mới

sudo mkdir -p /mnt/raid_storage
sudo mount /dev/md0 /mnt/raid_storage

3. Thiết lập mảng RAID vĩnh viễn

Linux cần một tệp cấu hình cụ thể để ghi nhớ cách lắp ráp các ổ đĩa RAID sau khi khởi động lại. Nếu không có tệp này, mảng của bạn có thể xuất hiện với một tên khác hoặc hoàn toàn không khởi động được.

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
# Cập nhật initial RAM disk để bao gồm cấu hình RAID
sudo update-initramfs -u

4. Thiết lập tự động gắn kết (Auto-mount)

Tìm UUID của mảng mới của bạn:

sudo blkid /dev/md0

Sao chép UUID đó vào tệp /etc/fstab để nó tự động được mount khi khởi động:

UUID=uuid-duy-nhat-cua-ban-tai-day /mnt/raid_storage ext4 defaults 0 0

Cách xử lý khi ổ đĩa bị lỗi

RAID chỉ hiệu quả nếu bạn biết cách khắc phục khi có sự cố xảy ra. Nếu /dev/sdb bị lỗi, mảng sẽ trở thành trạng thái “degraded” (bị suy giảm). Máy chủ vẫn trực tuyến, nhưng bạn hiện đang chạy mà không có mạng lưới an toàn. Để khắc phục, trước tiên hãy đánh dấu ổ đĩa là bị lỗi và gỡ nó ra khỏi mảng:

sudo mdadm /dev/md0 --fail /dev/sdb
sudo mdadm /dev/md0 --remove /dev/sdb

Sau khi bạn cắm một ổ đĩa mới (giả sử là /dev/sdf), hãy thêm nó trở lại nhóm:

sudo mdadm /dev/md0 --add /dev/sdf

Hệ điều hành sẽ ngay lập tức bắt đầu rebuild lại dữ liệu lên ổ đĩa mới ở chế độ chạy ngầm. Máy chủ của bạn vẫn hoạt động bình thường trong quá trình này, mặc dù bạn có thể nhận thấy hiệu suất ổ đĩa giảm nhẹ cho đến khi quá trình đồng bộ hóa kết thúc.

Lời kết

Sử dụng mdadm là một cách đơn giản để tăng cường hạ tầng của bạn. Nó biến các ổ đĩa thông thường thành một kho lưu trữ đáng tin cậy. Tuy nhiên, đừng bao giờ quên quy tắc vàng: RAID không phải là một bản sao lưu (backup). Nó bảo vệ bạn khỏi lỗi phần cứng, nhưng nó sẽ không cứu bạn khỏi lệnh rm -rf / hoặc một cuộc tấn công ransomware. Luôn duy trì một bản sao lưu dữ liệu bên ngoài hệ thống (off-site backup).

Nếu bạn mới làm quen với việc này, hãy thử các bước này trong máy ảo trước. Việc làm hỏng và sửa chữa một mảng RAID ảo là cách tốt nhất để xây dựng sự tự tin cần thiết khi một ổ đĩa thực sự bị lỗi trong môi trường thực tế.

Share: