Bài viết này giới thiệu các bạn về Software RAID toàn tập trên hệ điều hành Linux. Cùng với cách tạo các RAID phổ biến như [RAID0, RAID1, RAID5, RAID6, RAID10] trên Linux và một số phương pháp thường được sử dụng trên RAID để từ đây có thể giúp cho các bạn tự học Linux một cách dễ dàng.1. Giới thiệu về
RAID
RAID là từ viết tắt của cụm từ "Redundant Array of Inexpensive Disks" hoặc "Redundant Arrays of Independent Disks", là hình thức ghép nhiều ổ đĩa vật lý lại với nhau nhằm dung lỗi và tăng tốc.
RAID là một tập hợp các đĩa trong một nhóm để trở thành một logical volume. RAID chứa các nhóm hoặc bộ [set] hoặc mảng [array]. Số đĩa tối thiểu 2 được kết nối với một bộ điều khiển [controller] RAID và tạo ra một logical volume hoặc nhiều ổ đĩa hơn có thể nằm trong một nhóm. Chỉ có một cấp độ RAID có thể được áp dụng trong một nhóm các đĩa. RAID được sử dụng khi chúng ta cần hiệu suất tuyệt vời. Theo cấp độ RAID đã chọn của chúng ta, hiệu suất sẽ khác nhau. Lưu dữ liệu của chúng ta bằng khả năng chịu lỗi và tính sẵn sàng cao.
Lợi thế của việc sử dụng RAID:
- Dự phòng
- Hiệu quả cao
- Giá thành thấp
2. Software RAID và Hardware RAID
Software RAID có hiệu suất thấp do sử dụng nguồn tài nguyên từ máy chủ, nó cần tải để đọc dữ liệu từ software RAID volumes. Không cần phần cứng vật lý trong các software RAID không tốn chi phí.
Hardware RAID có hiệu năng cao, không sử dụng tài nguyên từ máy chủ. Nó là một bộ điều khiển [controller] RAID chuyên dụng được xây dựng về mặt vật lý bằng cách sử dụng thẻ PCI express, có NVRAM cho bộ nhớ cache để đọc và viết. Lưu trữ bộ đệm để xây dựng lại ngay cả khi mất điện, nó sẽ lưu trữ bộ đệm bằng các bản sao lưu sử dụng năng lượng pin. Chi phí rất tốn kém cho một quy mô lớn. Hardware RAID Card có hình dạng như sau:
3. Các khái niệm về RAID
Parity là một phương pháp tạo lại nội dung bị mất từ thông tin parity. Chúng được ứng dụng trong RAID5 và RAID6 dựa trên parity.
Stripe chia sẻ dữ liệu ngẫu nhiên vào nhiều đĩa. Việc chia sẻ dữ liệu này thì sẽ không có dữ liệu đầy đủ trong một đĩa.
Mirroring được sử dụng trong RAID1 và RAID10. Mirroring tạo một bản sao của cùng một dữ liệu. Trong RAID 1, nó sẽ lưu cùng một nội dung vào đĩa khác.
Hot spare là một ổ đĩa dự phòng trong máy chủ nó có thể tự động thay thế các ổ đĩa bị lỗi. Nếu bất kỳ một trong các ổ đĩa bị lỗi, ổ đĩa dự phòng này sẽ được sử dụng và xây dựng lại tự động.
Chunks là một kích thước của dữ liệu có thể tối thiểu từ 4KB trở lên. Bằng cách xác định kích thước chunks, chúng ta có thể tăng hiệu suất I/O.
Các cấp độ RAID thường được sử dụng:
- RAID0
- RAID1
- RAID5
- RAID6
- RAID10
4. Cấp độ của RAID
4.1. RAID0
RAID0 [Striping] dữ liệu sẽ được ghi vào đĩa bằng phương pháp chia sẻ, một nửa nội dung sẽ nằm trong một đĩa và một nửa khác sẽ được ghi vào đĩa khác. RAID0 cho phép ghi và đọc được hoàn thành nhanh hơn. Tuy nhiên, không giống như các cấp RAID khác, RAID0 không có tính Parity. Khi phân chia đĩa mà không có dữ liệu parity không có dự phòng hoặc khả năng chịu lỗi. Nếu một ổ đĩa bị lỗi, tất cả dữ liệu trên ổ đĩa đó sẽ bị mất.
RAID0 được sử dụng tốt nhất để lưu trữ văn bản có yêu cầu đọc và ghi tốc độ cao. Bộ nhớ đệm phát trực tiếp video và chỉnh sửa video là những cách sử dụng phổ biến cho RAID 0 do tốc độ và hiệu suất.
Ưu điểm của RAID0 là cải thiện hiệu năng. RAID0 tránh tình trạng nghe lỏm bằng cách không sử dụng dữ liệu parity và bằng cách sử dụng tất cả dung lượng lưu trữ dữ liệu có sẵn. RAID0 có chi phí thấp nhất trong tất cả các cấp RAID và được hỗ trợ bởi tất cả các bộ điều khiển phần cứng.
Nhược điểm của RAID0 là khả năng phục hồi thấp. Nó không nên được sử dụng để lưu trữ quan trọng.
4.2. RAID1
RAID1 [Mirroring] là sự sao chép dữ liệu vào hai hoặc nhiều đĩa. RAID1 là một lựa chọn tốt cho các ứng dụng đòi hỏi hiệu năng cao và tính sẵn sàng cao, như các ứng dụng giao dịch, email,... Cả hai đĩa đều hoạt động, dữ liệu có thể được đọc từ chúng đồng thời làm cho hoạt động đọc khá nhanh. Tuy nhiên, thao tác ghi chậm hơn vì thao tác ghi được thực hiện hai lần.
RAID1 yêu cầu tối thiểu hai đĩa vật lý, vì dữ liệu được ghi đồng thời đến hai nơi. Nếu một đĩa bị lỗi, đĩa kia có thể truy xuất dữ liệu.
4.3. RAID5
RAID5 [Distributed Parity] được sử dụng ở cấp doanh nghiệp. RAID5 hoạt động theo phương pháp parity. Thông tin chẵn lẻ sẽ được sử dụng để xây dựng lại dữ liệu. Nó xây dựng lại từ thông tin còn lại trên các ổ đĩa tốt còn lại. Điều này sẽ bảo vệ dữ liệu của chúng ta khi ổ đĩa bị lỗi. Dử liệu trên RAID5 có thể tồn tại sau một lỗi ổ đĩa duy nhất, nếu các ổ đĩa bị lỗi nhiều hơn 1 sẽ gây mất dữ liệu.
Một số ưu điểm của RAID5:
- Đọc sẽ cực kỳ rất tốt về tốc độ.
- Ghi sẽ ở mức trung bình, chậm nếu chúng tôi không sử dụng card điều khiển RAID.
- Xây dựng lại từ thông tin parity từ tất cả các ổ đĩa.
RAID5 Có thể được sử dụng trong các máy chủ tập tin, máy chủ web, sao lưu rất quan trọng.
4.4. RAID6
RAID6 [Two Parity Distributed Disk] giống như RAID5 hoạt động theo phương pháp parity. Chủ yếu được sử dụng trong một số lượng lớn các mảng. Chúng ta cần tối thiểu 4 ổ đĩa, khi có 2 ổ đĩa bị lỗi, chúng ta có thể xây dựng lại dữ liệu trong khi thay thế các ổ đĩa mới.
Rất chậm so với RAID5, vì nó ghi dữ liệu cho cả 4 trình điều khiển cùng một lúc. Sẽ có tốc độ trung bình trong khi chúng ta sử dụng card điều khiển RAID. Nếu chúng ta có 6 số ổ cứng 1TB thì 4 ổ đĩa sẽ được sử dụng cho dữ liệu và 2 ổ đĩa sẽ được sử dụng cho parity.
Ưu và nhược điểm của RAID:
- Hiệu suất kém.
- Hiệu suất đọc sẽ tốt.
- Hiệu suất ghi sẽ kém nếu chúng tôi không sử dụng card điều khiển RAID.
- Xây dựng lại từ 2 ổ đĩa parity.
- Không gian 2 đĩa sẽ nằm dưới parity.
- Có thể được sử dụng trong mảng lớn.
- Có thể được sử dụng trong mục đích sao lưu, truyền phát video, được sử dụng ở quy mô lớn.
4.5. RAID10
RAID10 có thể được gọi là RAID1 + RAID0 hoặc RAID0 + RAID1. RAID10 sẽ làm cả hai công việc của Mirror và Striping. Mirror sẽ là đầu tiên và Stripe sẽ là thứ hai trong RAID10. Stripe sẽ là đầu tiên và mirror sẽ là thứ hai trong RAID01. RAID10 tốt hơn so với RAID01.
Ưu và nhược điểm của RAID10:
- Hiệu suất đọc và viết tốt.
- Nửa không gian sẽ bị mất trong tổng công suất.
- Xây dựng lại nhanh chóng từ sao chép dữ liệu.
- Có thể được sử dụng trong lưu trữ cơ sở dữ liệu cho hiệu suất cao và tính sẵn sàng.
5. Cài đặt mdadm
RAID được quản lý bằng gói mdadm
trong hầu hết các bản phân phối Linux. Để
kiểm tra xem gói mdadm
có khả dụng trên hệ thống của chưa bằng cách chạy lệnh sau:
[root@localhost ~]# mdadm --version
mdadm - v4.1-rc1 - 2018-03-22
Nếu gói mdadm
không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:
Đối với bản phân phối Debian/Ubuntu:
Để bắt đầu cài đặt, bạn phải thêm repo bằng cách thực hiện lệnh sau:
add-apt-repository ppa:eugenesan/ppa
Tiếp theo chúng ta cần cập nhật [update] hệ thống:
apt-get update
Chạy lệnh sau để cài đặt gói
mdadm
:apt-get install mdadm
Đối với với bản phân phối RHEL/CentOS:
Để thực hiện cài đặt gói
mdadm
chúng ta cần thực hiện cập nhật [update] hệ thống:yum update
Chạy lệnh bên dưới để thực hiện cài đặt gói
mdadm
:yum install mdadm
6. Hướng dẫn tạo RAID
Lưu ý: Tất cả các hướng dẫn bên dưới điều được thực hiện trên bản phân phối Centos7.
6.1. Hướng dẫn tạo RAID0
Khi sử dụng RAID0 nếu chúng ta có hai đĩa và lưu nội dung vào logical volume thì nó sẽ được lưu vào cả hai đĩa vật lý bằng cách chia nội dung. RAID0 sẽ không thể lấy dữ liệu nếu một trong các ổ đĩa bị lỗi.
Ưu điểm của RAID0:
- RAID 0 có hiệu năng cao.
- Không có dung lượng sẽ bị lãng phí.
- Zero Fault Tolerance [Không thể lấy lại dữ liệu nếu bất kỳ một trong các đĩa bị lỗi].
- Viết và đọc sẽ là tuyệt vời.
Chú ý: RAID0 có thể mất dữ liệu nếu ổ cứng hỏng
Trong ví dụ dưới đây yêu cầu: Số lượng đĩa ít nhất để tạo RAID0 là 2 bạn có thể thêm nhiều đĩa hơn nhưng thứ tự sẽ gấp đôi 2, 4, 6, 8. Nếu bạn có thẻ RAID vật lý có đủ cổng, bạn có thể thêm nhiều đĩa hơn.
Ví dụ bên dưới chúng ta không sử dụng Hardware RAID các thiết lập này phụ thuộc vào Software RAID.
6.1.1. Tạo RAID0
👉 Bước 1: Cập
nhật hệ thống và cài đặt mdadm
để quản lý RAID
Để thiết lập RAID0 trên hệ điều hành Linux chúng ta cần thực hiện cập nhật [update] hệ thống và cài đặt gói mdadm.
👉 Bước 2: Kiểm tra thông tin ổ đĩa trên máy:
Trước khi tạo RAID0, cần đảm bảo có ít nhất hai ổ đĩa cứng chạy lệnh sau để kiểm tra:
[root@localhost ~]# fdisk -l |grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Qua lệnh kiểm tra trên chúng ta thấy có 2 đĩa cứng mới được phát
hiện, bây giờ chúng ta thực hiện kiểm tra xem các ổ cứng có sử dụng RAID nào chưa bằng lệnh mdadm
cùng với tùy chọn --examine
như bên dưới.
[root@localhost ~]# mdadm --examine /dev/sd[b-c]
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.
Kết trên trả về cho chúng ta biết rằng không có RAID nào được áp dụng cho hai ổ sdb
và sdc
.
👉 Bước 3: Tạo phân vùng đĩa cứng
Thực hiện tạo phân vùng trên đĩa có tên là sdb
và sdc
cho RAID bằng lệnh
fdisk
.
Tạo phân vùng trên ổ đĩa sdb.
Chạy lệnh fdisk /dev/sdb
để tạo phân vùng cho sdb
và thực hiện các thao tác sau:
- Nhấn n để tạo phân vùng mới.
- Sau đó chọn p cho phân vùng chính.
- Tiếp theo chọn số phân vùng là 1 .
- Nhập giá trị ban đầu, giá trị kết thúc và nhấn phím Enter.
- Tiếp theo nhấn p để in phân vùng đã được tạo.
Thực hiện các bước sau đây để tạo Linux RAID tự động trên các phân vùng:
- Nhấn L để liệt kê tất cả các loại có sẵn.
- Nhập t để chọn phân vùng.
- Nhập fd để chọn Linux RAID tự động và nhấn Enter để áp dụng.
- Sử dụng phím p để in những thay đổi.
- Cuối cùng chúng ta nhấn phím w lưu các thay đổi.
Các thao tác trên được thực hiện như sau:
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk [util-linux 2.23.2].
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd1c9ae6a.
Command [m for help]: n
Partition type:
p primary [0 primary, 0 extended, 4 free]
e extended
Select [default p]: p
Partition number [1-4, default 1]: 1
First sector [2048-20971519, default 2048]: 2048
Last sector, +sectors or +size{K,M,G} [2048-20971519, default 20971519]: 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command [m for help]: p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size [logical/physical]: 512 bytes / 512 bytes
I/O size [minimum/optimal]: 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xd1c9ae6a
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20971519 10484736 83 Linux
Command [m for help]: L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec [FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec [FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec [FAT-
4 FAT16 raid1/test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
10475520 blocks super 1.2 [2/2] [UU]
unused devices:
Để tự động gắn kết /dev/md0
khi khởi động lại hệ thống chúng ta cần tạo một mục trong tệp /etc/fstab
. Bạn có thể sử dụng
trình soạn thảo vi để nhập dòng bên dưới vào:
/dev/md0 raid1 ext4 defaults 0 0
Thực hiện như sau:
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 14 10:34:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab[5], findfs[8], mount[8] and/or blkid[8] for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=58253f4e-01e2-47c8-8f0c-49a1e5b0b7bf /boot xfs defaults 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
/dev/md0 raid1 ext4 defaults 0 0
Lưu lại và chạy lệnh sau để kiểm tra xem có bất kỳ lỗi nào trong mục /etc/fstab
không.
[root@localhost ~]# mount -a
[root@localhost ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
raid1 : already mounted
Nếu có lỗi, không reboot server để tránh tình trạng server không thể khởi động. Kiểm tra cấu hình trong file /etc/fstab
và chạy lại lệnh cho tới khi không có thông báo lỗi.
👉 Bước 6: Lưu cấu hình
RAID1 theo cách thủ công vào tệp mdadm.conf
bằng lệnh bên dưới.
[root@localhost ~]# mdadm --detail --scan --verbose >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=localhost.localdomain:0 UUID=6e8d46d8:d307ecf4:13ec9c89:52955fe6
devices=/dev/sdb1,/dev/sdc1
👉 Bước 7: Kiểm tra dữ liệu sau khi hỏng đĩa
Mục đích chính của chúng ta là sau khi bất kỳ ổ cứng nào bị hỏng hoặc sập dữ liệu chúng ta có khôi phục dữ liệu từ đĩa khác.
Đầu tiên chúng ta chạy lệnh sau kiểm tra RAID1 đã được tạo và sử dụng phân vùng /dev/sdb1
và /dev/sdc1
:
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun May 19 13:34:48 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun May 19 13:39:36 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : 6e8d46d8:d307ecf4:13ec9c89:52955fe6
Events : 17
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
Chúng ta có thể thấy có 2 thiết bị có sẵn trong RAID và chúng đang hoạt động. Bây giờ chúng ta hãy xem điều gì sẽ xảy ra khi một đĩa bị lỗi.
[root@localhost ~]# ls -l /dev | grep sd
brw-rw----. 1 root disk 8, 0 May 19 13:29 sda
brw-rw----. 1 root disk 8, 1 May 19 13:29 sda1
brw-rw----. 1 root disk 8, 2 May 19 13:29 sda2
brw-rw----. 1 root disk 8, 16 May 19 13:32 sdb
brw-rw----. 1 root disk 8, 17 May 19 13:34 sdb1
Như chúng ta thấy thì đĩa sdc đã mất chỉ còn lại đĩa sdb. Chạy lệnh bên dưới kiểm tra RAID1:
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun May 19 13:34:48 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun May 19 13:39:36 2019
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : 6e8d46d8:d307ecf4:13ec9c89:52955fe6
Events : 27
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 removed
Kết quả trả về cho chúng ta một ổ đĩa của chúng tôi bị mất. Bây giờ thực hiện kiểm tra dữ liệu của chúng ta.
[root@localhost ~]# cd raid1/
[root@localhost raid1]# cat test1.txt
This is RAID1
[root@localhost raid1]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 17G 1.3G 16G 8% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 201M 814M 20% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/md0 9.8G 37M 9.2G 1% /root/raid1
Dữ liệu của chúng ta vẫn còn không bị mất mát. Qua đây cho chúng ta biết được lợi ích của RAID1
và giúp bạn hiểu cách thức hoạt động của RAID 1[Mirror].
6.3 Hướng dẫn tạo RAID5
Trong RAID5 dải dữ liệu chứa trên nhiều ổ đĩa có parity. Đối với cấp RAID5, nó phải có ít nhất ba ổ cứng trở lên. RAID5 đang được sử dụng trong môi trường sản xuất quy mô lớn, nơi có chi phí và cung cấp hiệu năng cũng như dự phòng.
Parity là một phương pháp phổ biến đơn giản nhất để phát hiện lỗi trong lưu trữ dữ liệu. Nếu bất kỳ một trong các đĩa bị lỗi, chúng tôi vẫn có thể lấy dữ liệu bằng cách xây dựng lại từ thông tin Parity sau khi thay thế đĩa bị lỗi.
Ví dụ bên dưới yêu cầu chúng ta phải có ít nhất 3 ổ cứng để tạo Raid5, bạn có thể thêm nhiều đĩa hơn, khi bạn có bộ điều khiển RAID cứng chuyên dụng với nhiều cổng. Ở ví dụ dưới đây, chúng ta sử dụng software RAID và gói mdadm
để tạo ra RAID.
6.3.1. Tạo RAID5
👉 Bước 1: Cập nhật hệ thống và cài đặt mdadm
để quản lý RAID
Để thiết lập RAID5 trên hệ điều hành Linux chúng ta cần thực hiện cập nhật [update] hệ thống và cài đặt gói mdadm.
👉 Bước 2: Kiểm tra thông tin ổ đĩa trên máy:
Trước khi tạo RAID5, cần đảm bảo có ít nhất ba ổ đĩa cứng chạy lệnh sau để kiểm tra:
[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Qua lệnh kiểm tra trên chúng ta thấy có 3 đĩa cứng mới được phát hiện. Khi gói mdadm
đã được cài đặt chúng ta thực hiện kiểm tra xem các ổ cứng có sử dụng RAID nào
chưa bằng lệnh mdadm
với tùy chọn -E
bên dưới.
[root@localhost ~]# mdadm -E /dev/sd[b-d]
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.
mdadm: No md superblock detected on /dev/sdd
Như kết quả trên, chưa có bất kỳ super-block nào được phát hiện, có nghĩa là không có RAID nào được xác định.
👉 Bước 3: Tạo phân vùng đĩa cứng
Chúng ta cần phải tạo phân vùng đĩa cứng cho sdb
, sdc
và sdd
để tạo RAID bằng lệnh fdisk
.
Tạo phân vùng trên ổ đĩa sdb.
Chạy lệnh fdisk /dev/sdb
để tạo phân vùng cho sdb
và thực hiện các thao tác sau:
- Nhấn n để tạo phân vùng mới.
- Sau đó chọn p cho phân vùng chính.
- Tiếp theo chọn số phân vùng là 1 .
- Nhập giá trị ban đầu, giá trị kết thúc và nhấn phím Enter.
- Tiếp theo nhấn p để in phân vùng đã được tạo.
Thực hiện các bước sau đây để tạo Linux RAID tự động trên các phân vùng:
- Nhấn L để liệt kê tất cả các loại có sẵn.
- Nhập t để chọn phân vùng.
- Nhập fd để chọn Linux RAID tự động và nhấn Enter để áp dụng.
- Sử dụng phím p để in những thay đổi.
- Cuối cùng chúng ta nhấn phím w lưu các thay đổi.
Các thao tác trên được thực hiện như sau:
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk [util-linux 2.23.2].
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x46f77f84.
Command [m for help]: n
Partition type:
p primary [0 primary, 0 extended, 4 free]
e extended
Select [default p]: p
Partition number [1-4, default 1]: 1
First sector [2048-20971519, default 2048]: 2048
Last sector, +sectors or +size{K,M,G} [2048-20971519, default 20971519]: 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command [m for help]: p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size [logical/physical]: 512 bytes / 512 bytes
I/O size [minimum/optimal]: 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x46f77f84
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20971519 10484736 83 Linux
Command [m for help]: L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec [FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec [FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec [FAT-
4 FAT16 raid6/test6.txt
[root@localhost ~]# cat raid6/test6.txt
This is RAID6
Để tự động gắn kết /dev/md0
khi khởi động lại hệ thống chúng ta cần tạo một mục trong tệp /etc/fstab
. Bạn có thể sử dụng trình soạn thảo vi để nhập dòng bên dưới vào:
/dev/md0 raid6 ext4 defaults 0 0
Thực hiện như sau:
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 14 10:34:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab[5], findfs[8], mount[8] and/or blkid[8] for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=58253f4e-01e2-47c8-8f0c-49a1e5b0b7bf /boot xfs defaults 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
/dev/md0 raid6 ext4 defaults 0 0
Lưu lại và chạy lệnh sau để kiểm tra xem có bất kỳ lỗi nào trong mục /etc/fstab
không.
[root@localhost ~]# mount -a
[root@localhost ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
raid6 : already mounted
Nếu có lỗi chúng ta không được reboot server mà chúng ta cần tìm sữa lỗi đến khi chạy lệnh trên không còn lỗi.
👉 Bước 6: Lưu cấu hình RAID 6
RAID mặc định không có tệp cấu hình. Chúng ta phải lưu nó bằng cách sử dụng lệnh bên dưới và sau đó xác minh trạng thái của thiết bị /dev/md0.
[root@localhost ~]# mdadm --detail --scan --verbose >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid6 num-devices=4 metadata=1.2 name=localhost.localdomain:0 UUID=39a8d4b6:ea69722c:371c0aa2:9eff943c
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
👉 Bước 7: Thêm một ổ đĩa dự phòng
Chúng ta đã có 4 đĩa và có sẵn hai thông tin parity. Nếu bất kỳ một trong các đĩa bị lỗi, chúng tôi có thể lấy dữ liệu, bởi vì có 2 parity trong RAID6.
Các bước sau đây sẽ giúp chúng ta có thể thêm một ổ đĩa dự phòng sau khi bất kỳ đĩa nào bị lỗi.
Đầu tiên chúng ta gắn thêm 1 đĩa mới vào hệ thống của chúng ta chạy lệnh bên dưới để kiểm tra:
[root@localhost ~]# ls -l /dev/ | grep sd
brw-rw----. 1 root disk 8, 0 May 19 14:28 sda
brw-rw----. 1 root disk 8, 1 May 19 14:28 sda1
brw-rw----. 1 root disk 8, 2 May 19 14:28 sda2
brw-rw----. 1 root disk 8, 16 May 19 14:28 sdb
brw-rw----. 1 root disk 8, 17 May 19 14:28 sdb1
brw-rw----. 1 root disk 8, 32 May 19 14:28 sdc
brw-rw----. 1 root disk 8, 33 May 19 14:28 sdc1
brw-rw----. 1 root disk 8, 48 May 19 14:28 sdd
brw-rw----. 1 root disk 8, 49 May 19 14:28 sdd1
brw-rw----. 1 root disk 8, 64 May 19 14:28 sde
brw-rw----. 1 root disk 8, 65 May 19 14:28 sde1
brw-rw----. 1 root disk 8, 80 May 19 14:28 sdf
Kết quả trên cho thấy đĩa sdf
đã được thêm vào hệ thống.
Tiếp theo hãy xác nhận đĩa mới chưa tham gia RAID đã được cấu hình hoặc không sử dụng, Bằng việc chạy lệnh mdadm --examine
như sau:
[root@localhost ~]# mdadm --examine /dev/sdf
mdadm: No md superblock detected on /dev/sdf.
Giống như chúng ta đã tạo phân vùng cho bốn đĩa trước đó, tương tự như chúng ta
đã tạo phân vùng mới trên đĩa sdf
bằng lệnh fdisk
thực hiện như sau:
[root@localhost ~]# fdisk /dev/sdf
Welcome to fdisk [util-linux 2.23.2].
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xcb22f5d6.
Command [m for help]: n
Partition type:
p primary [0 primary, 0 extended, 4 free]
e extended
Select [default p]: p
Partition number [1-4, default 1]: 1
First sector [2048-20971519, default 2048]: 2048
Last sector, +sectors or +size{K,M,G} [2048-20971519, default 20971519]: 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command [m for help]: p
Disk /dev/sdf: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size [logical/physical]: 512 bytes / 512 bytes
I/O size [minimum/optimal]: 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcb22f5d6
Device Boot Start End Blocks Id System
/dev/sdf1 2048 20971519 10484736 83 Linux
Command [m for help]: L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec [FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec [FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec [FAT-
4 FAT16 raid10/test10.txt
[root@localhost ~]# cat raid10/test10.txt
This is RAID10
Thiết bị /dev/md0
gắn kết của chúng ta là tạm thời. Nếu hệ điều hành được khởi động lại,
các thư mục được gắn kết này sẽ bị mất. Vì vậy, chúng ta cần phải gắn kết vĩnh viễn. Để thực hiện gắn kết vĩnh viễn phải nhập trong tệp /etc/fstab
. Bạn có thể sử dụng trình soạn thảo vi để nhập dòng bên dưới vào:
/dev/md0 raid10 ext4 defaults 0 0
Thực hiện như bên dưới:
[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 14 10:34:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab[5], findfs[8], mount[8] and/or blkid[8] for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=58253f4e-01e2-47c8-8f0c-49a1e5b0b7bf /boot xfs defaults 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
/dev/md0 raid10 ext4 defaults 0 0
Lưu lại file /etc/fstab
và chạy lệnh:
[root@localhost ~]# mount -a
[root@localhost ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
raid10 : already mounted
Nếu có lỗi, không reboot server để tránh tình trạng server không thể khởi động. Kiểm tra cấu hình
trong file /etc/fstab
và chạy lại lệnh cho tới khi không có thông báo lỗi.
👉 Bước 6: Lưu cấu hình RAID
Theo mặc định, RAID không có tệp cấu hình, vì vậy chúng ta cần lưu tệp thủ công sau khi thực hiện tất cả các bước trên, để duy trì các cài đặt này trong khi khởi động hệ thống.
[root@localhost ~]# mdadm --detail --scan --verbose > /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid10 num-devices=4 metadata=1.2 name=localhost.localdomain:0 UUID=981e3a84:52808df0:5d26b18d:bea511d9
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
6.5.2. Tạo RAID10 bằng RAID1 + RAID0
Đối với cách này chúng ta phải xác định 2 bộ RAID1 và sau đó chúng ta cần xác định RAID0 bằng cách sử dụng hai bộ RAID1 đã tạo.
👉 Bước 1: Cập nhật hệ thống và cài đặt mdadm
để quản lý RAID
Để thiết lập RAID10 trên hệ điều hành Linux chúng ta cần thực hiện cập nhật [update] hệ thống và cài đặt gói mdadm.
👉 Bước 2: Kiểm tra thông tin ổ đĩa trên máy:
Đầu tiên, liệt kê các đĩa có sẵn để tạo RAID10.
[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sde: 10.7 GB, 10737418240 bytes, 20971520 sectors
Qua lệnh kiểm tra trên chúng
ta thấy có 4 đĩa cứng mới được phát hiện. Khi gói mdadm
đã được cài đặt chúng ta thực hiện kiểm tra xem các ổ cứng có sử dụng RAID nào chưa bằng lệnh mdadm
bên dưới.
[root@localhost ~]# mdadm -E /dev/sd[b-e]
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.
mdadm: No md superblock detected on /dev/sdd.
mdadm: No md superblock detected on /dev/sde.
Như kết quả trên, chưa có bất kỳ đĩa nào được phát hiện, có nghĩa là không có RAID nào được xác định.
👉 Bước 3: [Tạo phân vùng đĩa cứng
Để có thể tạo RAID chúng ta cần tạo phân vùng đĩa cứng
cho các đĩa sdb
, sdc
, sdd
và sde
bằng lệnh fdisk
.
Tạo phân vùng trên ổ đĩa sdb.
Chạy lệnh fdisk /dev/sdb
để tạo phân vùng cho sdb
và thực hiện các thao tác sau:
- Nhấn n để tạo phân vùng mới.
- Sau đó chọn p cho phân vùng chính.
- Tiếp theo chọn số phân vùng là 1 .
- Nhập giá trị ban đầu, giá trị kết thúc và nhấn phím Enter.
- Tiếp theo nhấn p để in phân vùng đã được tạo.
Thực hiện các bước sau đây để tạo Linux RAID tự động trên các phân vùng:
- Nhấn L để liệt kê tất cả các loại có sẵn.
- Nhập t để chọn phân vùng.
- Nhập fd để chọn Linux RAID tự động và nhấn Enter để áp dụng.
- Sử dụng phím p để in những thay đổi.
- Cuối cùng chúng ta nhấn phím w lưu các thay đổi.
Các thao tác trên được thực hiện như sau:
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk [util-linux 2.23.2].
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x952f48f1.
Command [m for help]: n
Partition type:
p primary [0 primary, 0 extended, 4 free]
e extended
Select [default p]: p
Partition number [1-4, default 1]: 1
First sector [2048-20971519, default 2048]: 2048
Last sector, +sectors or +size{K,M,G} [2048-20971519, default 20971519]: 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command [m for help]: p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size [logical/physical]: 512 bytes / 512 bytes
I/O size [minimum/optimal]: 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x952f48f1
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20971519 10484736 83 Linux
Command [m for help]: L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec [FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec [FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec [FAT-
4 FAT16 /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=localhost.localdomain:0 UUID=16e08f8b:2eaaf81e:87e6d213:4a3b6c37
devices=/dev/sdb1,/dev/sdc1
MAILADDR
Để chạy mdadm
trong nền và quét chúng ta chạy lệnh sau:
[root@localhost ~]# /sbin/mdadm --monitor --scan --oneshot
Theo mặc định thì mdadm
sẽ kiểm tra các mảng RAID sau 60 giây và gửi thông báo nếu phát hiện có vần đề. Bạn
có thể sửa đổi khoảng thời gian này bằng cách thêm vào tùy chọn --delay
[Ví dụ: --delay 900
có nghĩa là 15 phút sẽ thực hiện một lần].
8.2. Mô phỏng và thay thế một đĩa lưu trữ RAID bị lỗi
Để mô phỏng cho việc hệ thống sẽ gửi mail thông báo sự cố của một trong các thiết bị lưu trữ trong mảng RAID, chúng ta sẽ sử dụng lệnh mdadm
cùng với các tùy chọn --manage
và --set-faulty
như sau:
[root@localhost ~]# mdadm --manage --set-faulty /dev/md0 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1][F] sdb1[0]
10475520 blocks super 1.2 [2/1] [U_]
unused devices:
Lệnh trên sẽ làm cho đĩa
/dev/sdc1
đánh dấu là bị lỗi.
Sau khi thực hiện lệnh trên chúng ta nhận được cảnh báo về sự cố của một đĩa bị lỗi trong RAID.
[root@localhost ~]#
You have mail in /var/spool/mail/root
[root@localhost ~]# cat /var/spool/mail/root
From Fri May 24 08:39:04 2019
Return-Path:
X-Original-To:
Delivered-To:
Received: by localhost.localdomain [Postfix, from userid 0]
id 6D6E63055398; Fri, 24 May 2019 08:39:04 -0400 [EDT]
From: mdadm monitoring
To:
Subject: DegradedArray event on /dev/md0:localhost.localdomain
Message-Id:
Date: Fri, 24 May 2019 08:39:04 -0400 [EDT]
This is an automatically generated mail message from mdadm
running on localhost.localdomain
A DegradedArray event had been detected on md device /dev/md0.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid1]
md0 : active raid1 sdc1[1][F] sdb1[0]
10475520 blocks super 1.2 [2/1] [U_]
unused devices:
Tiếp theo chúng ta thực hiện lệnh sau để xóa đĩa bị lỗi trong RAID:
[root@localhost ~]# mdadm /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 08:32:19 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 1
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Fri May 24 08:55:30 2019
State : clean
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
Events : 49
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
Sau chúng ta thực hiện xoá đĩa bị lỗi trong RAID chúng ta có thể gỡ bỏ nó khỏi máy và thay thế nó bằng một đĩa dự phòng /dev/sdd
.
Sau khi thêm đĩa dự phòng vào chúng ta thực hiện tạo phân vùng cho /dev/sdd
bằng lệnh fdisk
. Khi đã tạo thành công phân
vùng chúng ta chạy lệnh bên dưới thêm đĩa vào RAID:
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdd1
mdadm: added /dev/sdd1
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 08:32:19 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri May 24 08:55:30 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
Events : 49
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
2 8 49 1 active sync /dev/sdd1
Hệ thống sẽ tự động bắt đầu xây dựng lại phần dữ liệu của chúng ta vào đĩa mới thêm vào. Chúng ta có thể kiểm tra bằng cách đánh dấu /dev/sdb1
bị lỗi, xóa nó khỏi RAID và tệp test1.txt vẫn có thể truy cập được tại /raid1:
Trước khi đĩa /dev/sdb1
chưa lỗi:
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 08:32:19 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri May 24 08:55:30 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
Events : 49
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
2 8 49 1 active sync /dev/sdd1
[root@localhost ~]# ls -l raid1
total 20
drwx------. 2 root root 16384 May 24 08:32 lost+found
-rw-r--r--. 1 root root 14 May 24 08:32 test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1
Sau khi đĩa /dev/sdb1
lỗi:
[root@localhost ~]# mdadm --remove /dev/md0 /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 08:32:19 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Update Time : Fri May 24 09:00:23 2019
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
Events : 52
Number Major Minor RaidDevice State
- 0 0 0 removed
2 8 49 1 active sync /dev/sdd1
[root@localhost ~]# ls -l raid1
total 20
drwx------. 2 root root 16384 May 24 08:32 lost+found
-rw-r--r--. 1 root root 14 May 24 08:32 test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1
Qua kết quả trên cho chúng ta thấy sau khi thêm /dev/sdd1
vào RAID thay thế cho /dev/sdc1
việc xây dựng lại dữ liệu đã được
hệ thống tự động thực hiện.
8.3. Phục hồi dữ liệu mất mát
mdadm sẽ tự động xây dựng lại dữ liệu khi một đĩa bị lỗi. Nhưng nếu 2 đĩa /dev/sdb1
và /dev/sdd1
thì sẽ như thế nào . Ví dụ bên dưới sẽ hướng dẫn vấn đề này:
Trước khi thực hiện khôi phục dữ liệu thì dữ liệu của chúng ta như sau:
[root@localhost ~]# ls -l raid1
total 20
drwx------. 2 root root 16384 May 24 08:32 lost+found
-rw-r--r--. 1 root root 14 May 24 08:32 test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1
Đầu tiên có thể minh hoạ khôi phục dữ liệu khi hai đĩa bị lỗi đồng thời chúng ta cần thực hiện các thao tác sau:
[root@localhost ~]# umount raid1
[root@localhost ~]# mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@localhost ~]# mdadm --manage --set-faulty /dev/md0 /dev/sdd1
Để
khôi phục dữ liệu từ /dev/sdb1
vào một phân vùng đĩa /dev/sde1
mới bằng cách sử dụng lệnh ddrescue
:
[root@localhost ~]# ddrescue -r 2 --force /dev/sdb1 /dev/sde1
GNU ddrescue 1.17
Press Ctrl-C to interrupt
rescued: 10736 MB, errsize: 0 B, current rate: 339 MB/s
ipos: 10736 MB, errors: 0, average rate: 466 MB/s
opos: 10736 MB, time since last successful read: 0 s
Finished
Lưu ý: Tạo phân vùng loại fd trong /dev/sde
Bây giờ xây dựng lại RAID bằng hai đĩa /dev/sde1
và /dev/sdf1
:
[root@localhost ~]# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1
mdadm: /dev/sde1 appears to be part of a raid array:
level=raid1 devices=2 ctime=Fri May 24 09:42:31 2019
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Khi hoàn thành tạo RAID mới chúng ta thực hiện kiểm tra dử liệu của chúng ta xem có mất mát gì không:
[root@localhost ~]# mkdir raid1.1
[root@localhost ~]# mount /dev/md0 raid1.1
[root@localhost ~]# ls -l raid1.1
total 20
drwx------. 2 root root 16384 May 24 09:42 lost+found
-rw-r--r--. 1 root root 14 May 24 09:43 test1.txt
[root@localhost ~]# cat raid1.1/test1.txt
This is RAID1
Qua đây chúng ta thấy dữ liệu của chúng ta được thực hiện đầy đũ không bị mất mát dữ liệu.
9. Cách quản lý software RAID bằng công cụ mdadm
Trước đây cho dù bạn có tuân theo tất cả các hướng dẫn trong loạt RAID này, thì quản lý [manage]software RAID trong Linux là công cụ có thể hổ trợ bạn đắt lực.
Trong hướng dẫn này, chúng ta sẽ liệt kê chức năng được cung cấp bởi mdadm
để chúng ta có thể sử dụng nó khi cần.
9.1. Hiểu các tùy chọn và cách sử dụng mdadm
mdadm cung cấp một tuỳ chọn built-in --help
giải thích chức năng mỗi tùy chọn chính khi sử dụng lệnh mdadm
.
[root@localhost ~]# mdadm built-in --help
mdadm is used for building, managing, and monitoring
Linux md devices [aka RAID arrays]
Usage: mdadm --create device options...
Create a new array from unused devices.
mdadm --assemble device options...
Assemble a previously created array.
mdadm --build device options...
Create or assemble an array without metadata.
mdadm --manage device options...
make changes to an existing array.
...
Để xem các nhiệm vụ mdadm --manage
cho phép chúng ta thực hiện là gì chạy lệnh sau:
[root@localhost ~]# mdadm --manage --help
Usage: mdadm arraydevice options component devices...
This usage is for managing the component devices within an array.
The --manage option is not needed and is assumed if the first argument
is a device name or a management option.
The first device listed will be taken to be an md array device, any
subsequent devices are [potential] components of that array.
Options that are valid with management mode are:
--add -a : hotadd subsequent devices to the array
--re-add : subsequent devices are re-added if there were
: recent members of the array
--remove -r : remove subsequent devices, which must not be active
--fail -f : mark subsequent devices a faulty
--set-faulty : same as --fail
--replace : mark device[s] to be replaced by spares. Once
: replacement completes, device will be marked faulty
--with : Indicate which spare a previous '--replace' should
: prefer to use
--run -R : start a partially built array
--stop -S : deactivate array, releasing all resources
--readonly -o : mark array as readonly
--readwrite -w : mark array as readwrite
Một số thao tác thường xuyên sử dụng trong quản lý một RAID bao gồm:
--add
: Thêm một thiết bị vào RAID.--fail
:Đánh dấu một thiết bị là bị lỗi.--remove
: Loại bỏ một thiết bị bị lỗi khỏi RAID.--replace
: Thay thế thiết bị bị lỗi bằng một thiết bị phụ.--run
: Bắt đầu một RAID.--stop
: Dừng một RAID.--readonly
hoặc--readwrite
: Đánh dấu một mảng làro
[chỉ đọc] hoặcrw
[đọc-ghi].
9.2 Quản lý thiết bị RAID
Cú pháp cơ bản để quản lý RAID:
mdadm --manage RAID options devices
Một vài ví dụ về quản lí RAID:
Ví dụ 1: Thêm một thiết bị vào mảng RAID
Chúng ta thực hiện thêm đĩa /dev/sdc1
vào RAID1 hiện có trên hê thống
thực hiện như sau:
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 09:53:56 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri May 24 13:26:54 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : ab832548:73f97be5:49acca17:171a6890
Events : 18
Number Major Minor RaidDevice State
0 8 65 0 active sync /dev/sde1
1 8 81 1 active sync /dev/sdf1
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdc1
mdadm: added /dev/sdc1
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 09:53:56 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Fri May 24 13:26:54 2019
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : ab832548:73f97be5:49acca17:171a6890
Events : 18
Number Major Minor RaidDevice State
0 8 65 0 active sync /dev/sde1
1 8 81 1 active sync /dev/sdf1
2 8 33 - spare /dev/sdc1
Đĩa /dev/sdc1
sau khi được thêm vào RAID1 trở thành đĩa dự phòng. Khi một đĩa bị lỗi và được gỡ khỏi hệ thống nó sẽ được tự động sử dụng để thay thế.
Ví dụ 2: Đánh dấu một thiết bị RAID bị lỗi và xóa nó khỏi RAID
Đây là bước bắt buộc trước khi gỡ bỏ thiết bị khỏi mảng một cách hợp lý và sau đó rút thiết bị vật lý ra khỏi máy - theo thứ tự đó [nếu bạn bỏ lỡ một trong những bước này, bạn có thể sẽ gây ra ảnh hưởng cho thiết bị]:
Để đánh dấu một thiết bị RAID bị lỗi chúng ta thực hiện như sau:
[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md0
Khi một đĩa được chỉ định là một đĩa lỗi chúng ta chạy lệnh sau để xoá thiit bị khỏi RAID:
[root@localhost ~]# mdadm --manage /dev/md0 --remove /dev/sde1
mdadm: hot removed /dev/sde1 from /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 24 09:53:56 2019
Raid Level : raid1
Array Size : 10475520 [9.99 GiB 10.73 GB]
Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri May 24 13:31:19 2019
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Rebuild Status : 30% complete
Name : localhost.localdomain:0 [local to host localhost.localdomain]
UUID : ab832548:73f97be5:49acca17:171a6890
Events : 25
Number Major Minor RaidDevice State
2 8 33 0 spare rebuilding /dev/sdc1
1 8 81 1 active sync /dev/sdf1
Ví dụ 3: Đánh dấu một RAID là ro
Sau khi tạo RAID, bạn phải tạo một hệ thống tập tin trên nó và gắn nó vào một thư mục để sử dụng nó. Bạn có thể đánh dấu RAID là ro
chỉ cho phép đọc được thực hiện trên nó, hoặc rw
ß để ghi vào thiết bị.
Để đánh dấu thiết bị là ro
, đầu
tiên chúng ta phải ngắt kết nối:
[root@localhost ~]# umount raid1
[root@localhost ~]# mdadm --manage /dev/md0 --readonly
[root@localhost ~]# mount /dev/md0 raid1
mount: /dev/md0 is write-protected, mounting read-only
[root@localhost ~]# touch raid1/test1.1.txt
touch: cannot touch ‘raid1/test1.1.txt’: Read-only file system
10. Lời kết
Qua bài trên, giúp cho chúng ta biết cách sử dụng tiện ích mdadm trên hệ điều hành Linux để quản lý RAID. Ngoài ra còn giúp chúng ta biết cách sử dụng các tính năng của mdadm như: cấu hình các RAID, rebuild RAID trên Linux, thay ổ đĩa RAID bị hỏng,... giúp chúng ta đảm bảo dữ liệu của chúng ta một cách an toàn.