Software RAID toàn tập trên Linux Image Software RAID toàn tập trên Linux

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

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:

Hardware RAID Card

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)

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)

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)

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)

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 (Mirror & Stripe)

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 ổ sdbsdc.

👉 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à sdbsdc 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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Tương tự như vậy chúng ta tạo phân vùng cho sdc.

Sau khi tạo xong chúng ta chạy lệnh bên dưới kiểm tra xem phân vùng được tạo hay chưa.

[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
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdc1            2048    20971519    10484736   fd  Linux raid autodetect

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]#  mdadm --examine /dev/sd[b-c]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]#  mdadm --examine /dev/sd[b-c]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.

👉 Bước 4: Tạo RAID0

Chúng ta chạy lệnh sau để tạo RAID0:

[root@localhost ~]# mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Trong đó:

  • -C: Tạo RAID mới.
  • -l: Level của RAID.
  • -n: Không có thiết bị RAID.

Ngoài ra lệnh tạo RAID0 sau đây cũng có ý nghĩa như lệnh chúng ta vừa chạy:

mdadm --create /dev/md0 --level=stripe --raid-devices=2 /dev/sd[b-c]1

Kiểm tra lại RAID vừa tạo bằng các cách sau:

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc1[1] sdb1[0]
      20951040 blocks super 1.2 512k chunks

unused devices: <none>

Qua kết quả trên cho chúng ta thấy RAID0 đã được tạo với hai phân vùng sdb1sdc1. Chúng ta cũng có thể kiểm tra bằng lệnh bên dưới:

[root@localhost ~]# mdadm -E /dev/sd[b-c]1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 98cffedb:dd23fd6d:07b60209:b92643bd
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 11:40:09 2019
     Raid Level : raid0
   Raid Devices : 2

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18352 sectors, after=0 sectors
          State : clean
    Device UUID : fedf81e4:0cea1e46:3f96f2c1:9c4fa897

    Update Time : Sun May 19 11:40:09 2019
  Bad Block Log : 512 entries available at offset 8 sectors
       Checksum : af1ccef - correct
         Events : 0

     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 98cffedb:dd23fd6d:07b60209:b92643bd
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 11:40:09 2019
     Raid Level : raid0
   Raid Devices : 2

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18352 sectors, after=0 sectors
          State : clean
    Device UUID : 7abd085c:5144fc8f:5a200101:4a70369c

    Update Time : Sun May 19 11:40:09 2019
  Bad Block Log : 512 entries available at offset 8 sectors
       Checksum : ff2af79 - correct
         Events : 0

     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

Hoặc có thể chạy lệnh sau để kiểm tra:

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun May 19 11:40:09 2019
        Raid Level : raid0
        Array Size : 20951040 (19.98 GiB 21.45 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sun May 19 11:40:09 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 98cffedb:dd23fd6d:07b60209:b92643bd
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

👉 Bước 5: Tạo file system (ext4) cho thiết bị RAID /dev/md0

[root@localhost ~]#  mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5237760 blocks
261888 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Tiếp theo tạo thư mục gắn kết raid0 để gắn thiết bị /dev/md0 thực hiện như bên dưới.

[root@localhost ~]# mkdir raid0
[root@localhost ~]# mount /dev/md0 raid0/

Tiếp theo, chạy lệnh df để kiểm tra xem thiết bị /dev/md0 được gắn trong thư mục /root/raid0 không.

[root@localhost ~]# 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/raid0

Tạo một tệp raid0/test0.txt, thêm nội dung vào tệp đã tạo và xem nội dung của tệp.

[root@localhost ~]# ls -l raid0/
total 20
drwx------. 2 root root 16384 May 19 13:36 lost+found
[root@localhost ~]# echo "This is RAID0" > raid0/test0.txt
[root@localhost ~]# cat raid0/test0.txt
This is RAID0

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        raid0   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        raid0   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
raid0                    : 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

Lưu cấu hình RAID vào một tệp để giữ cấu hình để sử dụng trong tương lai.

Chúng ta sử dụng lệnh mdadm với các tùy chọn -s(quét) và -v (dài dòng) như sau:

[root@localhost ~]# mdadm -E -s -v >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md/0  level=raid0 metadata=1.2 num-devices=2 UUID=98cffedb:dd23fd6d:07b60209:b92643bd name=localhost.localdomain:0
   devices=/dev/sdc1,/dev/sdb1

Qua các bước trên chúng ta đã tạo thành công RAID0 trên Centos7.

6.2. Hướng dẫn tạo RAID1

RAID1 tạo ra để bảo vệ chống mất dữ liệu do lỗi đĩa. Mỗi đĩa trong RAID1 liên quan đến một bản sao của dữ liệu. Khi một đĩa bị lỗi, dữ liệu tương tự có thể được lấy từ đĩa khác.

Yêu cầu:

Ít nhất hai đĩa để tạo RAID1, nhưng bạn có thể thêm nhiều đĩa hơn bằng cách sử dụng hai lần là 2, 4, 6, 8. Để thêm nhiều đĩa, hệ thống của bạn phải có bộ điều khiển vật lý RAID(thẻ phần cứng).

Ví dụ bên dưới chúng ta sử dụng software RAID, nếu hệ thống của bạn có thẻ RAID bạn có thể truy cập nó với giao diện người dùng tiện ích của nó hoặc sử dụng tổ hợp phím Ctrl + I.

6.2.1 Tạo RAID1

👉 Bước 1: Cập nhật hệ thống và cài đặt mdadm để quản lý RAID

Để thiết lập RAID1 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 RAID1, chúng ta cần 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. 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-c]
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.

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

Tạo phân vùng đĩa sdbsdc cho RAID bằng lệnh fdisk như bên dưới.

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 0x9603d7a3.

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: 0x9603d7a3

   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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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: 0x9603d7a3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Tương tự cách tạo trên chúng ta thực hiện tạo phân vùng trên sdc.

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]# mdadm -E /dev/sd[b-c]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]# mdadm -E /dev/sd[b-c]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.

Kết quả trên cho thấy không có bất kỳ RAID nào được xác định trên các phân vùng sdb1sdc1.

👉 Bước 4: Tạo RAID1

Tiếp theo chúng ta sẽ tạo thiết bị RAID1 có tên /dev/md0 bằng cách sử dụng lệnh sau và xác thực RAID1 đã được tạo.

[root@localhost ~]# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[b-c]1
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.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      10475520 blocks super 1.2 [2/2] [UU]
      [=>...................]  resync =  7.0% (740096/10475520) finish=0.6min speed=246698K/sec

unused devices: <none>

Trong quá trình tạo hệ thống yêu cầu chúng ta xác nhận tạo RADI thì bấm phím y để xác nhận.

Qua kết quả trên cho chúng ta thấy RAID1 đã được tạo với hai phân vùng sdb1sdc1. Chúng ta có thể kiểm tra bằng lệnh bên dưới:

[root@localhost ~]# mdadm -E /dev/sd[b-c]1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 6e8d46d8:d307ecf4:13ec9c89:52955fe6
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 13:34:48 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 10475520 (9.99 GiB 10.73 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : active
    Device UUID : 0abdd700:2ba093e6:0ef69271:7dc4690d

    Update Time : Sun May 19 13:35:18 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 1bff3521 - correct
         Events : 9


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 6e8d46d8:d307ecf4:13ec9c89:52955fe6
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 13:34:48 2019
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 10475520 (9.99 GiB 10.73 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : active
    Device UUID : 41b745a4:6003de2d:e0bd8fc8:0c6b891e

    Update Time : Sun May 19 13:35:18 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 6ed400ef - correct
         Events : 9


   Device Role : Active device 1
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

Hoặc có thể chạy lệnh sau để kiểm tra:

[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:35:41 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

Từ 2 kết quả trên chúng ta có thể thấy RAID1 đã được tạo và sử dụng phân vùng /dev/sdb1/dev/sdc1 và bạn cũng có thể thấy trạng thái là đồng bộ hóa.

👉 Bước 5: Tạo file system (ext4) cho thiết bị RAID /dev/md0

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2618880 blocks
130944 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Tiếp theo tạo thư mục gắn kết raid1 để gắn thiết bị /dev/md0 thực hiện như bên dưới.

[root@localhost ~]# mkdir raid1
[root@localhost ~]# mount /dev/md0 raid1/

Tiếp theo, chạy lệnh df để kiểm tra xem thiết bị /dev/md0 được gắn trong thư mục /root/raid1 không.

root@localhost ~]# 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

Tạo một tệp raid1/test1.txt, thêm nội dung vào tệp đã tạo và xem nội dung của tệp.

[root@localhost ~]# ls -l raid1/
total 16
drwx------. 2 root root 16384 May 19 13:36 lost+found
[root@localhost ~]# echo "This is RAID1" > 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: <none>

Để 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/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, sdcsdd để 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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Tương tự cách tạo phân vùng trên chúng ta thực hiện tạo phân dùng cho sdcsdd.

Sau khi chúng ta đã tạo xong phân vùng chúng ta cần chạy lệnh sau để kiểm tra xem các phân vùng đã được tạo chưa:

[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
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdc1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdd1            2048    20971519    10484736   fd  Linux raid autodetect

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]# mdadm -E /dev/sd[b-d]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdd:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]# mdadm -E /dev/sd[b-d]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.
mdadm: No md superblock detected on /dev/sdd1.

Kết quả trên cho thấy không có bất kỳ RAID nào được xác định trên các phân vùng sdb1sdc1sdd1.

👉 Bước 4: Tạo RAID5

Tiếp theo chúng ta sẽ tạo thiết bị RAID5 có tên /dev/md0 bằng cách sử dụng lệnh sau và xác thực RAID5 đã được tạo.

[root@localhost ~]# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      20951040 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [=>...................]  recovery =  5.7% (600192/10475520) finish=0.5min speed=300096K/sec

unused devices: <none>

Qua kết quả trên cho chúng ta thấy RAID5 đã được tạo với ba phân vùng sdb1,sdc1sdd1. Chúng ta có thể kiểm tra bằng lệnh bên dưới:

[root@localhost ~]# mdadm -E /dev/sd[b-d]1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : ea6753b0:d8a3f6d8:571dfcd9:340fc3cd
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:01:42 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : 29f0ca70:c405053e:da7ad71f:29c46aca

    Update Time : Sun May 19 14:02:21 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 41d2ad27 - correct
         Events : 13

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : ea6753b0:d8a3f6d8:571dfcd9:340fc3cd
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:01:42 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : e4d4fe70:2a25816c:5e568c67:0af8ca28

    Update Time : Sun May 19 14:02:21 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 1697c0ae - correct
         Events : 13

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x2
     Array UUID : ea6753b0:d8a3f6d8:571dfcd9:340fc3cd
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:01:42 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
Recovery Offset : 15713376 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : af9ff7ef:cd637be0:69dd80bf:6009b0a9

    Update Time : Sun May 19 14:02:21 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : e35426e2 - correct
         Events : 13

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)

Hoặc có thể chạy lệnh sau để kiểm tra:

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun May 19 14:01:42 2019
        Raid Level : raid5
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Sun May 19 14:02:34 2019
             State : clean
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : ea6753b0:d8a3f6d8:571dfcd9:340fc3cd
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1

Từ 2 kết quả trên chúng ta có thể thấy RAID5 đã được tạo và sử dụng phân vùng /dev/sdb1, /dev/sdc1/dev/sdd1.

👉 Bước 5: Tạo file system (ext4) cho thiết bị RAID5 /dev/md0

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5237760 blocks
261888 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Tiếp theo tạo thư mục gắn kết raid5 để gắn thiết bị /dev/md0 thực hiện như bên dưới.

[root@localhost ~]# mkdir raid5
[root@localhost ~]# mount /dev/md0 raid5/

Tiếp theo, chạy lệnh df để kiểm tra xem thiết bị /dev/md0 được gắn trong thư mục /root/raid5 không.

[root@localhost ~]# 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              20G   45M   19G   1% /root/raid5

Tạo một tệp raid1/test5.1.txt, raid1/test5.2.txt, raid1/test5.3.txt, raid1/test5.4.txt, raid1/test5.5.txt, thêm nội dung vào tệp đã tạo và xem nội dung của tệp.

[root@localhost ~]# ls -l raid5/
total 16
drwx------. 2 root root 16384 May 19 14:03 lost+found
[root@localhost ~]# touch raid5/test5.{1..5}.txt
[root@localhost ~]# ls -l raid5
total 16
drwx------. 2 root root 16384 May 19 14:03 lost+found
-rw-r--r--. 1 root root     0 May 19 14:05 test5.1.txt
-rw-r--r--. 1 root root     0 May 19 14:05 test5.2.txt
-rw-r--r--. 1 root root     0 May 19 14:05 test5.3.txt
-rw-r--r--. 1 root root     0 May 19 14:05 test5.4.txt
-rw-r--r--. 1 root root     0 May 19 14:05 test5.5.txt
[root@localhost ~]# echo  "This is RAID5" > raid5/test5.1.txt
[root@localhost ~]# cat  raid5/test5.1.txt
This is RAID5
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      20951040 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

Để 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        raid5   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        raid5   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
raid5                    : 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=raid5 num-devices=3 metadata=1.2 name=localhost.localdomain:0 UUID=ea6753b0:d8a3f6d8:571dfcd9:340fc3cd
   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1

Trong phần này chúng ta đã thiết lập RAID5 bằng ba đĩa. Qua đây giúp các bạn có thể hiểu hơn về RAID5.

6.4. Hướng dẫn tạo RAID6

RAID6 là phiên bản nâng cấp của RAID5 nó có hai parity, cung cấp khả năng phục hồi dữ liệu khi hai ổ đĩa bị lỗi.

Ưu và nhược điểm của RAID6:

  • Hiệu suất là tốt.
  • RAID 6 đắt tiền, vì nó yêu cầu hai ổ đĩa độc lập được sử dụng cho các chức năng tương đương.
  • Sẽ mất dung lượng hai đĩa để sử dụng thông tin parity.
  • Không mất dữ liệu, ngay cả khi hai đĩa bị lỗi.
  • Đọc sẽ tốt hơn RAID 5, vì nó đọc từ nhiều đĩa, nhưng hiệu suất ghi sẽ rất kém nếu không có bộ điều khiển RAID.

Để có thể thiết lập RAID6 chúng ta cần ít nhất 4 đĩa. Nếu bạn muốn thêm nhiều đĩa hơn, bạn phải có bộ điều khiển RAID. Trong software RAID, chúng ta sẽ không có hiệu năng tốt hơn trong RAID6. Vì vậy, chúng ta cần một bộ điều khiển RAID vật lý.

6.4.1. Tạo RAID6

👉 Bước 1: Cập nhật hệ thống và cài đặt mdadm để quản lý RAID

Để thiết lập RAID6 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 RAID6, cần đảm bảo có ít nhất 4 ổ đĩ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/sde: 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

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ỳ 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

Trước khi tạo RAID chúng ta cần tạo phân vùng đĩa cho 4 đĩa sdb, sdc, sddsde 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 0x161d682d.

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: 0x161d682d

   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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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: 0x161d682d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Thực hiện tương tự cho việc tạo phân vùng trên đĩa sdc, sdd, sde.

Sau khi chúng ta đã tạo xong phân vùng chúng ta cần chạy lệnh sau để kiểm tra xem các phân vùng đã được tạo chưa:

[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
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sde: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sde1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdd1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdc1            2048    20971519    10484736   fd  Linux raid autodetect

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]# mdadm -E /dev/sd[b-e]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdd:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sde:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]# mdadm -E /dev/sd[b-e]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.
mdadm: No md superblock detected on /dev/sdd1.
mdadm: No md superblock detected on /dev/sde1.

Kết quả trên cho thấy không có bất kỳ RAID nào được xác định trên các phân vùng sdb1, sdc1, sdd1sde1.

👉 Bước 4: Tạo RAID6

Tiếp theo chúng ta sẽ tạo thiết bị RAID6 có tên /dev/md0 bằng cách sử dụng lệnh sau và xác thực RAID6 đã được tạo.

[root@localhost ~]# mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      20951040 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
      [===>.................]  resync = 15.5% (1631872/10475520) finish=0.8min speed=181319K/sec

unused devices: <none>

Qua kết quả trên cho chúng ta thấy RAID6 đã được tạo với bốn phân vùng sdb1,sdc1, sdd1sde1. Chúng ta có thể kiểm tra bằng lệnh bên dưới:

[root@localhost ~]# mdadm -E /dev/sd[b-e]1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:18:15 2019
     Raid Level : raid6
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : 3df397e4:3b9028de:6c9ddd6d:7387f28a

    Update Time : Sun May 19 14:19:13 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : f52e1e16 - correct
         Events : 17

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:18:15 2019
     Raid Level : raid6
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : dd9d84a2:e0418c7b:67027378:4276d174

    Update Time : Sun May 19 14:19:13 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 44f2ce26 - correct
         Events : 17

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:18:15 2019
     Raid Level : raid6
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : 8ca436af:e5cc2b9a:ff98b804:7746464a

    Update Time : Sun May 19 14:19:13 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : d1fec6a7 - correct
         Events : 17

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:18:15 2019
     Raid Level : raid6
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : clean
    Device UUID : 86e552f7:9810ebbc:959fd02a:e9554be2

    Update Time : Sun May 19 14:19:13 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : faf7615e - correct
         Events : 17

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 3
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

Hoặc có thể chạy lệnh sau để kiểm tra:

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun May 19 14:18:15 2019
        Raid Level : raid6
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun May 19 14:19:13 2019
             State : clean
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1

Từ 2 kết quả trên chúng ta có thể thấy RAID6 đã được tạo và sử dụng phân vùng /dev/sdb1, /dev/sdc1, /dev/sdd1/dev/sde1.

👉 Bước 5: Tạo file system (ext4) cho thiết bị RAID6 /dev/md0

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5237760 blocks
261888 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Thực hiện tạo thư mục gắn kết raid6 để gắn thiết bị /dev/md0 như bên dưới.

[root@localhost ~]# mkdir raid6
[root@localhost ~]# mount /dev/md0 raid6/

Tạo một tệp raid6/test6.txt, thêm nội dung vào tệp đã tạo và xem nội dung của tệp.

[root@localhost ~]# ls -l raid6/
total 16
drwx------. 2 root root 16384 May 19 14:20 lost+found
[root@localhost ~]# touch raid6/test6.txt
[root@localhost ~]# ls -l raid6
total 16
drwx------. 2 root root 16384 May 19 14:20 lost+found
-rw-r--r--. 1 root root     0 May 19 14:21 test6.txt
[root@localhost ~]# echo "This is RAID6" > 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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Sau khi tạo phân vùng mới trên /dev/sdf chạy lệnh bên dưới để xác định phân vùng và đĩa mới chính xác là của RAID:.

[root@localhost ~]# mdadm --examine /dev/sdf
/dev/sdf:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]# mdadm --examine /dev/sdf1
mdadm: No md superblock detected on /dev/sdf1.

Tiếp theo chúng ta thực hiện thêm phân vùng mới tạo vào /dev/md0 và kiểm tra xem chúng ta thêm thành công chưa thực hiện như sau:

[root@localhost ~]# mdadm --add /dev/md0 /dev/sdf1
mdadm: added /dev/sdf1
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun May 19 14:18:15 2019
        Raid Level : raid6
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Sun May 19 14:31:22 2019
             State : clean
    Active Devices : 4
   Working Devices : 5
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1

       4       8       81        -      spare   /dev/sdf1

Sau khi thực hiện các thao tác trên thì chúng ta sẽ kiểm tra xem ổ đĩa dự phòng có hoạt động tự động hay không, nếu bất kỳ một đĩa nào bị lỗi.

Để kiểm tra vấn đề trên bạn hãy đánh dấu một ổ đĩa bị lỗi. Trong ví dụ bên dưới thì chúng ta thực hiện đánh dấu /dev/sdd1 là ổ đĩa bị lỗi:

[root@localhost ~]# mdadm --manage --fail /dev/md0 /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md0

Để kiểm tra thông tin chi tiết về bộ RAID và kiểm tra xem đĩa dự phòng của chúng ta có tự động đồng bộ hóa không.

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun May 19 14:18:15 2019
        Raid Level : raid6
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Sun May 19 14:32:39 2019
             State : clean, degraded, recovering
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 26% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 39a8d4b6:ea69722c:371c0aa2:9eff943c
            Events : 24

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       81        2      spare rebuilding   /dev/sdf1
       3       8       65        3      active sync   /dev/sde1

       2       8       49        -      faulty   /dev/sdd1

Qua ví dụ trên chúng ta thấy đĩa dự phòng đã tự động xây dựng lại dữ liệu và đĩa /dev/sdd1liệt kê là bị lỗi.

Chúng ta có thể theo dõi quá trình xây dựng bằng cách sử dụng lệnh sau:

[root@localhost ~]#  cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdf1[4] sde1[3] sdd1[2](F) sdc1[1] sdb1[0]
      20951040 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]

unused devices: <none>

Qua các bước trên giúp cho chúng ta có thể thiết lập RAID6, cách thêm đĩa mới vào RAID6.

6.5. Hướng dẫn tạo RAID10 trên CentOS 7

RAID10 là sự kết hợp của RAID0RAID1 để tạo thành RAID10.

Ư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.

Yêu cầu:

Trong RAID10, chúng tôi cần ít nhất 4 đĩa, 2 đĩa đầu cho RAID0 và 2 đĩa khác cho RAID1. Nếu chúng tôi cần mở rộng nhóm RAID, chúng ta phải tăng đĩa tối thiểu 4 đĩa.

6.5.1. Tạo RAID10 với level=10

👉 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:

Trước khi tạo RAID10, cần đảm bảo có ít nhất 4 ổ đĩ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/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 -E 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, cho chúng ta thấy 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 thực hiện tạo phân vùng đĩa cứng cho sdb, sdc, sddsde để RAID có thể sử dụng 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.


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: 0xb2985f24

   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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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: 0xb2985f24

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Chúng ta sẽ tạo các phân vùng mới cho các đĩa /dev/sdc, /dev/sdd, /dev/sde giống như trên.

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]# mdadm -E /dev/sd[b-e]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdd:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sde:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]# mdadm -E /dev/sd[b-e]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.
mdadm: No md superblock detected on /dev/sdd1.
mdadm: No md superblock detected on /dev/sde1.

Kết quả trên cho thấy không có bất kỳ RAID nào được xác định trên các phân vùng sdb1, sdc1, sdd1sde1.

👉 Bước 4: Tạo RAID10

Tiếp theo chúng ta sẽ tạo thiết bị RAID10 có tên /dev/md0 bằng cách sử dụng lệnh sau:

[root@localhost ~]#  mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      20951040 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [==>..................]  resync = 11.4% (2400128/20951040) finish=1.4min speed=218193K/sec

unused devices: <none>

Qua kết quả trên cho chúng ta thấy RAID10 đã được tạo với bốn phân vùng sdb1,sdc1, sdd1sde1. Chúng ta có thể kiểm tra bằng lệnh bên dưới:

[root@localhost ~]# mdadm --examine /dev/sd[b-e]1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 981e3a84:52808df0:5d26b18d:bea511d9
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:47:06 2019
     Raid Level : raid10
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : active
    Device UUID : 962b4dad:7554c2f1:6eb596fe:f5eef325

    Update Time : Sun May 19 14:47:39 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 17a3b621 - correct
         Events : 5

         Layout : near=2
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 981e3a84:52808df0:5d26b18d:bea511d9
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:47:06 2019
     Raid Level : raid10
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : active
    Device UUID : ee730425:4d0c33ff:49513846:64ee626b

    Update Time : Sun May 19 14:47:39 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 29dc519b - correct
         Events : 5

         Layout : near=2
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 981e3a84:52808df0:5d26b18d:bea511d9
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:47:06 2019
     Raid Level : raid10
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : active
    Device UUID : 268eaaee:9eca2565:5c49d81d:5618a9a0

    Update Time : Sun May 19 14:47:39 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 665b4c2a - correct
         Events : 5

         Layout : near=2
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sde1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 981e3a84:52808df0:5d26b18d:bea511d9
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
  Creation Time : Sun May 19 14:47:06 2019
     Raid Level : raid10
   Raid Devices : 4

 Avail Dev Size : 20951040 (9.99 GiB 10.73 GB)
     Array Size : 20951040 (19.98 GiB 21.45 GB)
    Data Offset : 18432 sectors
   Super Offset : 8 sectors
   Unused Space : before=18280 sectors, after=0 sectors
          State : active
    Device UUID : 31e08df5:f216eca4:8b08157e:c24d91ad

    Update Time : Sun May 19 14:47:39 2019
  Bad Block Log : 512 entries available at offset 136 sectors
       Checksum : 1a29df26 - correct
         Events : 5

         Layout : near=2
     Chunk Size : 512K

   Device Role : Active device 3
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

Hoặc có thể chạy lệnh sau để kiểm tra:

[root@localhost ~]#  mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun May 19 14:47:06 2019
        Raid Level : raid10
        Array Size : 20951040 (19.98 GiB 21.45 GB)
     Used Dev Size : 10475520 (9.99 GiB 10.73 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Sun May 19 14:48:05 2019
             State : clean, resyncing
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

     Resync Status : 60% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 981e3a84:52808df0:5d26b18d:bea511d9
            Events : 9

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync set-A   /dev/sdb1
       1       8       33        1      active sync set-B   /dev/sdc1
       2       8       49        2      active sync set-A   /dev/sdd1
       3       8       65        3      active sync set-B   /dev/sde1

Từ 2 kết quả trên chúng ta có thể thấy RAID10 đã được tạo và sử dụng phân vùng /dev/sdb1, /dev/sdc1, /dev/sdd1/dev/sde1.

👉 Bước 5: Tạo file system (ext4) cho thiết bị RAID10 /dev/md0 chạy lệnh sau:

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5237760 blocks
261888 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Sau khi tạo file system (ext4), gắn kết hệ thống tệp đã tạo trong raid10 và liệt kê nội dung của điểm gắn kết bằng lệnh ls -l thực hiện như bên dưới:

[root@localhost ~]# mkdir raid10
[root@localhost ~]# mount /dev/md0 raid10
[root@localhost ~]# ls -l raid10
total 16
drwx------. 2 root root 16384 May 19 14:48 lost+found

Tiếp theo thêm một tệp dưới điểm gắn kết, tiến hành thêm nội dung vào tệp và xem nội dung:

[root@localhost ~]# touch raid10/test10.txt
[root@localhost ~]# ls -l raid10
total 16
drwx------. 2 root root 16384 May 19 14:48 lost+found
-rw-r--r--. 1 root root     0 May 19 14:49 test10.txt
[root@localhost ~]# echo "This is RAID10" > 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, sddsde 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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Tương tự như việc tạo phân vùng của đĩa /dev/sdb chúng ta sẽ tạo phân vùng cho cho các đĩa còn lại là /dev/sdc, /dev/sdd/dev/sdc.

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]# mdadm --examine /dev/sd[b-e]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sdd:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
/dev/sde:
   MBR Magic : aa55
Partition[0] :     20969472 sectors at         2048 (type fd)
[root@localhost ~]# mdadm --examine /dev/sd[b-e]1
mdadm: No md superblock detected on /dev/sdb1.
mdadm: No md superblock detected on /dev/sdc1.
mdadm: No md superblock detected on /dev/sdd1.
mdadm: No md superblock detected on /dev/sde1.

Kết quả trên cho thấy không có bất kỳ RAID nào được xác định trên các phân vùng sdb1, sdc1, sdd1sde1.

👉 Bước 4: Tạo RAID1

Tạo 2 bộ RAID1 có tên lần lượt là /dev/md1/dev/md2 bằng 4 đĩa sdb1, sdc1, sdd1sde1. Mỗi bộ RAID1 sử dụng 2 đĩa thực hiện như sau:

[root@localhost ~]# mdadm --create /dev/md1 --metadata=1.2 --level=1 --raid-devices=2 /dev/sd[b-c]1
mdadm: array /dev/md1 started.
[root@localhost ~]# mdadm --create /dev/md2 --metadata=1.2 --level=1 --raid-devices=2 /dev/sd[d-e]1
mdadm: array /dev/md2 started.

Chạy lệnh bên dưới để kiểm tra các RAID được tạo:

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sde1[1] sdd1[0]
      10475520 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 22.9% (2400128/10475520) finish=0.6min speed=200010K/sec

md1 : active raid1 sdc1[1] sdb1[0]
      10475520 blocks super 1.2 [2/2] [UU]
      [=========>...........]  resync = 49.6% (5200128/10475520) finish=0.4min speed=208005K/sec

unused devices: <none>

👉 Bước 5: Tạo RAID0

Chúng ta thực hiện tạo RAID0 bằng thiết bị /dev/md1/dev/md2.

[root@localhost ~]# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/md1 /dev/md2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Thực hiện lệnh bên dưới để kỉim tra xem các RAID đã được tạo chưa:

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1] [raid0]
md0 : active raid0 md2[1] md1[0]
      20932608 blocks super 1.2 512k chunks

md2 : active raid1 sde1[1] sdd1[0]
      10475520 blocks super 1.2 [2/2] [UU]
      [==================>..]  resync = 91.2% (9558016/10475520) finish=0.0min speed=203812K/sec

md1 : active raid1 sdc1[1] sdb1[0]
      10475520 blocks super 1.2 [2/2] [UU]

unused devices: <none>

👉 Bước 6: Tạo file system (ext4) cho thiết bị RAID10 /dev/md0 chạy lệnh sau:

[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5237760 blocks
261888 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Sau khi tạo file system (ext4), gắn kết hệ thống tệp đã tạo trong raid10 và liệt kê nội dung của điểm gắn kết bằng lệnh ls -l thực hiện như bên dưới:

[root@localhost ~]# mkdir raid10
[root@localhost ~]# mount /dev/md0 raid10
[root@localhost ~]# ls -l raid10
total 16
drwx------. 2 root root 16384 May 19 14:48 lost+found

Tiếp theo thêm một tệp dưới điểm gắn kết, tiến hành thêm nội dung vào tệp và xem nội dung:

[root@localhost ~]# touch raid10/test10.txt
[root@localhost ~]# ls -l raid10
total 16
drwx------. 2 root root 16384 May 19 14:48 lost+found
-rw-r--r--. 1 root root     0 May 19 14:49 test10.txt
[root@localhost ~]# echo "This is RAID10" > 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 7: Lưu cấu hình RAID

Chúng ta cần lưu cấu hình trong tệp /etc/mdadm.conf để tải tất cả các thiết bị RAID trong mỗi lần khởi động lại.

[root@localhost ~]# mdadm --detail --scan --verbose >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md1 level=raid1 num-devices=2 metadata=1.2 name=localhost.localdomain:1 UUID=b29f79fa:c450f0b0:e11129a4:3822ec99
   devices=/dev/sdb1,/dev/sdc1
ARRAY /dev/md2 level=raid1 num-devices=2 metadata=1.2 name=localhost.localdomain:2 UUID=06f4ca55:57d38725:d1695bed:95b0cd9e
   devices=/dev/sdd1,/dev/sde1
ARRAY /dev/md0 level=raid0 num-devices=2 metadata=1.2 name=localhost.localdomain:0 UUID=b02148a6:39dc970c:f59fb3a6:e6c89c8b
   devices=/dev/md1,/dev/md2

7. Phát triển một mảng RAID và loại bỏ các đĩa lỗi trong RAID

Mảng chỉ là một bộ sưu tập các đĩa hay mảng là một tập hợp hoặc nhóm. Mảng (array) RAID chứa số lượng đĩa, nó có thể là 2, 4, 6, 8, 12, 16,...

Trong ví dụ bên dưới chúng ta đang sử dụng 2 đĩa trong một mảng để tạo thành một RAID và trong một số trường hợp nếu chúng ta cần thêm không gian trong nhóm đó, chúng ta có thể mở rộng kích thước của một mảng bằng lệnh mdadm -grow. Sau khi phát triển (thêm đĩa vào một mảng hiện có), chúng ta sẽ xem cách loại bỏ một trong các đĩa bị lỗi khỏi mảng.

Các tính năng của tăng trưởng RAID:

  • Có thể mở rộng kích thước của bất kỳ bộ RAID nào.
  • Có thể loại bỏ đĩa bị lỗi sau khi thêm đĩa mới vào RAID.
  • Phát triển mạng RAID mà không có thời gian chết.

Yêu cầu:

  • Để phát triển một mảng RAID, chúng ta cần một bộ RAID hiện có. Chúng ta cần thêm đĩa để phát triển Array.

7.1.Phát triển một mảng RAID hiện có

Bước 1: Trước khi phát triển một mảng, trước tiên hãy liệt kê mảng RAID hiện có bằng lệnh sau.

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 23 04:17: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 : Thu May 23 04:19:58 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 : d5a64756:00be081e:3429ccfb:3300a5ac
            Events : 19

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

Kết quả trên cho chúng ta thấy có hai đĩa trong mảng RAID với cấp RAID1. Sau đây chúng ta sẽ thêm một đĩa vào một mảng RAID hiện có.

Bước 2: Thêm đĩa mới sdd vào hệ thống và thực hiện tạo một phân vùng mới trên đĩa /dev/sdd 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/sdd
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 0x9533c853.

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-31457279, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-31457279, default 31457279): 31457279
Partition 1 of type Linux and of size 15 GiB is set

Command (m for help): p

Disk /dev/sdd: 16.1 GB, 16106127360 bytes, 31457280 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: 0x9533c853

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    31457279    15727616   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 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdd: 16.1 GB, 16106127360 bytes, 31457280 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: 0x9533c853

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    31457279    15727616   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Chạy lệnh sau để kiểm tra phân vùng đã được tạo chưa:

[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
/dev/sdb1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
/dev/sdc1            2048    20971519    10484736   fd  Linux raid autodetect
Disk /dev/sdd: 16.1 GB, 16106127360 bytes, 31457280 sectors
/dev/sdd1            2048    31457279    15727616   fd  Linux raid autodetect

Qua đây chúng ta thấy phân vùng /dev/sdd1 đã được tạo thành công.

Tiếp theo chúng ta chạy lệnh bên dưới để kiểm tra xem các đĩa hiện có tham gia RAID nào không:

[root@localhost ~]# mdadm --examine /dev/sdd1
mdadm: No md superblock detected on /dev/sdd1.

Kết quả trên cho thấy không có bất kỳ RAID nào được xác định trên các phân vùng sdd1.

Bước 3: Thêm phân vùng mới /dev/sdd1 trong mảng /dev/md0 hiện có, sử dụng lệnh sau.

[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdd1
mdadm: added /dev/sdd1

Đĩa mới đã được thêm, kiểm tra đĩa đã thêm trong mảng của chúng ta chưa chạy lệnh bên dưới:

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 23 04:17: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 : 3
       Persistence : Superblock is persistent

       Update Time : Thu May 23 04:33:00 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 : d5a64756:00be081e:3429ccfb:3300a5ac
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

       2       8       49        -      spare   /dev/sdd1

Bạn có thể thấy ổ đĩa đã được thêm vào như một ổ đĩa phụ.

Bước 4: Để phát triển mảng sử dụng đĩa mới thêm vào thì chúng ta phải sử dụng lệnh dưới đây:

[root@localhost ~]# mdadm --grow --raid-devices=3 /dev/md0
raid_disks for /dev/md0 set to 3

Chúng ta có thể thấy đĩa thứ ba (sdd1) đã được thêm vào mảng, sau khi thêm đĩa thứ ba, nó sẽ đồng bộ dữ liệu từ hai đĩa khác.

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 23 04:17: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 : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Thu May 23 04:38:00 2019
             State : clean, degraded, recovering
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

Consistency Policy : resync

    Rebuild Status : 85% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : d5a64756:00be081e:3429ccfb:3300a5ac
            Events : 37

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      spare rebuilding   /dev/sdd1

Như vậy chúng ta đã phát triển mảng RAID thành công.

7.2. Loại bỏ đĩa khỏi mảng

Sau khi dữ liệu được đồng bộ hóa với đĩa mới /dev/sdd1 từ hai đĩa khác và cả ba đĩa hiện có cùng một nội dung.

Giả sử rằng đĩa /dev/sdb1 là một đĩa yếu và cần phải được gỡ bỏ khỏi mảng RAID, trước khi nó bị lỗi.

Bước 1: Trước khi loại bỏ một đĩa chúng ta phải đánh dấu đĩa đó là fail như sau:

[root@localhost ~]# mdadm --fail /dev/md0 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 23 04:17: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 : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Thu May 23 04:45:01 2019
             State : clean, degraded
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : d5a64756:00be081e:3429ccfb:3300a5ac
            Events : 43

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1

       0       8       17        -      faulty   /dev/sdb1

Từ kết quả trên, chúng ta thấy rằng đĩa /dev/sdb1 được đánh dấu là bị lỗi ở phía dưới.

Bây giờ chúng ta loại bỏ ổ đĩa bị lỗi khỏi mảng RAID và phát triển mảng RAID với 2 thiết bị.

[root@localhost ~]# mdadm --remove /dev/md0 /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0

Khi ổ đĩa bị lỗi được gỡ bỏ, chúng ta sẽ phát triển mảng RAID bằng 2 đĩa.

[root@localhost ~]# mdadm --grow --raid-devices=2 /dev/md0
raid_disks for /dev/md0 set to 2
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu May 23 04:17: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 : Thu May 23 04:48:57 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 : d5a64756:00be081e:3429ccfb:3300a5ac
            Events : 47

    Number   Major   Minor   RaidDevice State
       1       8       33        0      active sync   /dev/sdc1
       2       8       49        1      active sync   /dev/sdd1

Kết quả trên cho chúng ta rằng mảng RAID chỉ có 2 thiết bị.

Qua đây gíúp cho chúng ta biết cách phát triển một RAID hiện có và cách xóa đĩa bị lỗi khỏi một mảng sau khi đồng bộ hóa lại nội dung hiện có. Tất cả các bước này có thể được thực hiện mà không có bất kỳ thời gian chết. Trong quá trình đồng bộ hóa dữ liệu, người dùng hệ thống, tệp và ứng dụng sẽ không bị ảnh hưởng trong mọi trường hợp.

8. Cách khôi phục dữ liệu và xây dựng lại lỗi Software RAID

Trong hướng dẫn dưới đây, chúng ta sẽ thực hiện cách xây dựng lại một software RAID mà không mất dữ liệu khi xảy ra lỗi đĩa và được thực hiện trên RAID1. Nhưng các khái niệm và lệnh sau đây áp dụng được cho tất cả các RAID khác.

8.1. Thiết lập giám sát RAID

Có nhiều lý do khiến thiết bị lưu trữ có thể bị hỏng, vì thế chúng ta cần biết sự cố có thể xảy ra bất cứ lúc nào và cần chuẩn bị để thay thế và đảm bảo an toàn cho dữ liệu của bạn.

Bạn có thể sử dụng phương pháp thủ công là xem /proc/mdstat để kiểm tra trạng thái của RAID, nhưng có một phương pháp tiết kiệm thời gian bằng việc chạy mdadm ở chế độ nền và quét, sẽ gửi thông báo qua email đến người nhận.

Để sử dụng phương pháp này chúng ta phải thêm vào tệp /etc/mdadm.conf cú pháp như sau:

MAILADDR user@<domain or localhost>

Bây giờ chúng ta thực hiện thêm như sau:

[root@localhost ~]# echo "MAILADDR root@localhost.localdomain" >> /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 root@localhost.localdomain

Để 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--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: <none>

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 root@localhost.localdomain  Fri May 24 08:39:04 2019
Return-Path: <root@localhost.localdomain>
X-Original-To: root@localhost.localdomain
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
	id 6D6E63055398; Fri, 24 May 2019 08:39:04 -0400 (EDT)
From: mdadm monitoring <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: DegradedArray event on /dev/md0:localhost.localdomain
Message-Id: <20190524123904.6D6E63055398@localhost.localdomain>
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: <none>

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/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/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ặc rw (đọ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.