RAID trên Linux, hướng dẫn tạo RAID Array bằng mdadm
Khái niệm và các biến thể (Level)
RAID (Redundant Array of Independent Disks) ban đầu được sử dụng như một giải pháp bảo vệ dữ liệu bằng cách cho phép ghi dữ liệu lên nhiều đĩa cứng cùng lúc. Sau đó, RAID đã phát triển nhiều biến thể khác nhau để đảm bảo an toàn và tăng tốc độ truy xuất dữ liệu từ đĩa cứng, trong đó phổ biến là RAID 0, 1, 5, 6, 10
* Một số lưu ý đối với RAID:
- RAID nên sử dụng các đĩa cứng có dung lượng bằng nhau.
- Việc sử dụng RAID sẽ tốn nhiều đĩa cứng hơn so với không sử dụng, nhưng đổi lại dữ liệu sẽ được bảo vệ tốt hơn.
- Khi tạo RAID Array, dữ liệu các đĩa cứng sẽ bị xóa bỏ, hãy đảm bảo rằng đĩa cứng không có dữ liệu gì quan trọng trước khi tạo RAID Array
* Các biến thể:
- RAID 0: RAID 0 cho phép máy tính ghi dữ liệu lên chúng theo một phương thức đặc biệt được gọi là Striping. Ví dụ 1 khối dữ liệu khi được ghi vào sẽ được phân thành 8 đoạn dữ liệu được đánh số từ 1 đến 8, các đoạn đánh số lẻ (1,3,5,7) sẽ được ghi lên đĩa cứng đầu tiên và các đoạn đánh số chẵn (2,4,6,8) sẽ được ghi lên đĩa thứ hai.
Tuy có ưu điểm là nhanh chóng về khả năng ghi, RAID 0 lại dễ có nguy cơ mất, hỏng dữ liệu do cách ghi thông tin xé lẻ vì như vậy dữ liệu không nằm hoàn toàn ở một đĩa cứng nào và mỗi khi cần truy xuất thông tin (ví dụ một file nào đó), máy tính sẽ phải tổng hợp từ các ổ cứng. Nếu một đĩa cứng gặp trục trặc thì thông tin (file) đó coi như không thể đọc được và mất luôn.
Yêu cầu tối thiểu 2 thiết bị lưu trữ

- RAID 1: Đây là dạng RAID cơ bản nhất có khả năng đảm bảo an toàn dữ liệu. Dữ liệu được ghi vào 2 ổ giống hệt nhau (Mirroring). Trong trường hợp một ổ bị trục trặc, ổ còn lại sẽ tiếp tục hoạt động bình thường. Bạn có thể thay thế ổ đĩa bị hỏng mà không phải lo lắng đến vấn đề thông tin thất lạc.
Dung lượng cuối cùng của hệ thống RAID 1 bằng dung lượng của ổ đơn, ví dụ hai ổ 80GB chạy RAID 1 sẽ cho hệ thống nhìn thấy duy nhất một ổ RAID 80GB.
Yêu cầu tối thiểu 2 thiết bị lưu trữ

- RAID 5: là hệ thống lưu trữ dự phòng cải tiến hơn so với RAID 1 và RAID 0. Với 3 hoặc 5 đĩa cứng riêng biệt, dữ liệu và bản sao lưu được chia đều lên tất cả các ổ cứng. Tuy nhiên, nguyên tắc này khá phức tạp.
Khi một thiết bị bị lỗi, hệ thống có thể sử dụng các khối dữ liệu còn lại cùng với một khối dữ liệu đặc biệt (được gọi là khối kiểm tra) để khôi phục phần dữ liệu bị mất. Việc lưu trữ khối kiểm tra này sẽ được luân phiên giữa các thiết bị, giúp phân bổ đồng đều khối lượng công việc và đảm bảo tính cân bằng trong toàn hệ thống.
Yêu cầu tối thiểu 3 thiết bị.

- RAID 6: RAID 6 cơ bản là giống RAID 5, nhưng cho phép có 2 thiết bị có thể gặp vấn đề mà hệ thống vẫn hoạt động được mà dữ liệu không bị mất
Yêu cầu tối thiểu 4 thiết bị lưu trữ
Dung lượng sẽ tương đương với dung lượng của (N - 2) thiết bị

- RAID 10: còn được gọi là RAID 1+0, là sự kết hợp giữa tốc độ của RAID 0 (phân dải dữ liệu) và khả năng dự phòng của RAID 1 (sao lưu đối xứng). Cách hoạt động của RAID 10 là trước tiên tạo các cặp ổ đĩa được sao lưu đối xứng, sau đó phân dải dữ liệu trên các cặp này. Cấu hình này mang lại hiệu suất đọc/ghi cao và có khả năng chịu lỗi tốt – miễn là không có cặp ổ đĩa đối xứng nào bị hỏng hoàn toàn. Đây là lựa chọn lý tưởng cho các hệ thống cần cả hiệu suất cao lẫn độ sẵn sàng cao.
Yêu cầu tối thiểu 4 thiết bị lưu trữ.
Tổng dung lượng bằng 50% so với dung lượng lưu trữ thực tế.

Tạo RAID Array bằng mdadm
Cú pháp lệnh như sau:
sudo mdadm --create --verbose /dev/(name) --level=( x ) --raid-devices=( y ) /dev/vda /dev/vdb /dev/(z)
Trong đó:
- name là tên Array
- x là level RAID (0,1,5,6,10)
- y là số thiết bị lưu trữ dùng để tạo Array
-z là tên thiết bị lưu trữ
Sau khi tạo xong có thể kiểm tra bằng lệnh sau:
cat /proc/mdstat
Expected output:
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 vdc[1] vdb[0]
20954112 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Cấu hình filesystem trên Array
sudo mkfs.ext4 -F /dev/name
Mount Array
Tạo mount point rồi mount vào đó
sudo mkdir -p /mnt/name
sudo mount /dev/md0 /mnt/name
Kiểm tra lại xem đã thành công chưa
df -h -x devtmpfs -x tmpfs
Expected output:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 38G 1.2G 37G 4% /
/dev/vda16 881M 62M 758M 8% /boot
/dev/vda15 105M 6.1M 99M 6% /boot/efi
/dev/md0 20G 24K 19G 1% /mnt/md0
Lưu lại Array Layout
Để đảm bảo array được tự động tạo lại mỗi khi khởi động, cần phải chỉnh sửa trong file /etc/mdadm/mdadm.conf
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
Update lại initramfs để array được sẵn sàng trong quá trình boot
sudo update-initramfs -u
Cập nhật lại fstab
echo '/dev/name /mnt/name ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
Reset RAID Array
Unmount Array
sudo umount /dev/name
Dừng Array và xóa
sudo mdadm --stop /dev/name
Xóa RAID metadata khỏi các thiết bị dùng để tạo RAID và reset chúng về bình thường
sudo mdadm --zero-superblock /dev/vdb
sudo mdadm --zero-superblock /dev/vdc
Cuối cùng, comment lại hoặc xóa đi các cấu hình của Array trong /etc/mdadm/mdadm.conf và /etc/fstab