Tạo raid 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

RAID là từ viết tắt của cụm từ "Redundant Array of Inexpensive Disks" hoặc "Redundant Arrays of Independent Disks", là hình thức ghép nhiều ổ đĩa vật lý lại với nhau nhằm dung lỗi và tăng tốc.

RAID là một tập hợp các đĩa trong một nhóm để trở thành một logical volume. RAID chứa các nhóm hoặc bộ [set] hoặc mảng [array]. Số đĩa tối thiểu 2 được kết nối với một bộ điều khiển [controller] RAID và tạo ra một logical volume hoặc nhiều ổ đĩa hơn có thể nằm trong một nhóm. Chỉ có một cấp độ RAID có thể được áp dụng trong một nhóm các đĩa. RAID được sử dụng khi chúng ta cần hiệu suất tuyệt vời. Theo cấp độ RAID đã chọn của chúng ta, hiệu suất sẽ khác nhau. Lưu dữ liệu của chúng ta bằng khả năng chịu lỗi và tính sẵn sàng cao.

Lợi thế của việc sử dụng RAID:

  • Dự phòng
  • Hiệu quả cao
  • Giá thành thấp

2. Software RAID và Hardware RAID

Software RAID có hiệu suất thấp do sử dụng nguồn tài nguyên từ máy chủ, nó cần tải để đọc dữ liệu từ software RAID volumes. Không cần phần cứng vật lý trong các software RAID không tốn chi phí.

Hardware RAID có hiệu năng cao, không sử dụng tài nguyên từ máy chủ. Nó là một bộ điều khiển [controller] RAID chuyên dụng được xây dựng về mặt vật lý bằng cách sử dụng thẻ PCI express, có NVRAM cho bộ nhớ cache để đọc và viết. Lưu trữ bộ đệm để xây dựng lại ngay cả khi mất điện, nó sẽ lưu trữ bộ đệm bằng các bản sao lưu sử dụng năng lượng pin. Chi phí rất tốn kém cho một quy mô lớn. Hardware RAID Card có hình dạng như sau:

3. Các khái niệm về RAID

Parity là một phương pháp tạo lại nội dung bị mất từ ​​thông tin parity. Chúng được ứng dụng trong RAID5 và RAID6 dựa trên parity.

Stripe chia sẻ dữ liệu ngẫu nhiên vào nhiều đĩa. Việc chia sẻ dữ liệu này thì sẽ không có dữ liệu đầy đủ trong một đĩa.

Mirroring được sử dụng trong RAID1 và RAID10. Mirroring tạo một bản sao của cùng một dữ liệu. Trong RAID 1, nó sẽ lưu cùng một nội dung vào đĩa khác.

Hot spare là một ổ đĩa dự phòng trong máy chủ nó có thể tự động thay thế các ổ đĩa bị lỗi. Nếu bất kỳ một trong các ổ đĩa bị lỗi, ổ đĩa dự phòng này sẽ được sử dụng và xây dựng lại tự động.

Chunks là một kích thước của dữ liệu có thể tối thiểu từ 4KB trở lên. Bằng cách xác định kích thước chunks, chúng ta có thể tăng hiệu suất I/O.

Các cấp độ RAID thường được sử dụng:

  • RAID0
  • RAID1
  • RAID5
  • RAID6
  • RAID10

4. Cấp độ của RAID

4.1. RAID0

RAID0 [Striping] dữ liệu sẽ được ghi vào đĩa bằng phương pháp chia sẻ, một nửa nội dung sẽ nằm trong một đĩa và một nửa khác sẽ được ghi vào đĩa khác. RAID0 cho phép ghi và đọc được hoàn thành nhanh hơn. Tuy nhiên, không giống như các cấp RAID khác, RAID0 không có tính Parity. Khi phân chia đĩa mà không có dữ liệu parity không có dự phòng hoặc khả năng chịu lỗi. Nếu một ổ đĩa bị lỗi, tất cả dữ liệu trên ổ đĩa đó sẽ bị mất.

RAID0 được sử dụng tốt nhất để lưu trữ văn bản có yêu cầu đọc và ghi tốc độ cao. Bộ nhớ đệm phát trực tiếp video và chỉnh sửa video là những cách sử dụng phổ biến cho RAID 0 do tốc độ và hiệu suất.

Ưu điểm của RAID0 là cải thiện hiệu năng. RAID0 tránh tình trạng nghe lỏm bằng cách không sử dụng dữ liệu parity và bằng cách sử dụng tất cả dung lượng lưu trữ dữ liệu có sẵn. RAID0 có chi phí thấp nhất trong tất cả các cấp RAID và được hỗ trợ bởi tất cả các bộ điều khiển phần cứng.

Nhược điểm của RAID0 là khả năng phục hồi thấp. Nó không nên được sử dụng để lưu trữ quan trọng.

4.2. RAID1

RAID1 [Mirroring] là sự sao chép dữ liệu vào hai hoặc nhiều đĩa. RAID1 là một lựa chọn tốt cho các ứng dụng đòi hỏi hiệu năng cao và tính sẵn sàng cao, như các ứng dụng giao dịch, email,... Cả hai đĩa đều hoạt động, dữ liệu có thể được đọc từ chúng đồng thời làm cho hoạt động đọc khá nhanh. Tuy nhiên, thao tác ghi chậm hơn vì thao tác ghi được thực hiện hai lần.

RAID1 yêu cầu tối thiểu hai đĩa vật lý, vì dữ liệu được ghi đồng thời đến hai nơi. Nếu một đĩa bị lỗi, đĩa kia có thể truy xuất dữ liệu.

4.3. RAID5

RAID5 [Distributed Parity] được sử dụng ở cấp doanh nghiệp. RAID5 hoạt động theo phương pháp parity. Thông tin chẵn lẻ sẽ được sử dụng để xây dựng lại dữ liệu. Nó xây dựng lại từ thông tin còn lại trên các ổ đĩa tốt còn lại. Điều này sẽ bảo vệ dữ liệu của chúng ta khi ổ đĩa bị lỗi. Dử liệu trên RAID5 có thể tồn tại sau một lỗi ổ đĩa duy nhất, nếu các ổ đĩa bị lỗi nhiều hơn 1 sẽ gây mất dữ liệu.

Một số ưu điểm của RAID5:

  • Đọc sẽ cực kỳ rất tốt về tốc độ.
  • Ghi sẽ ở mức trung bình, chậm nếu chúng tôi không sử dụng card điều khiển RAID.
  • Xây dựng lại từ thông tin parity từ tất cả các ổ đĩa.

RAID5 Có thể được sử dụng trong các máy chủ tập tin, máy chủ web, sao lưu rất quan trọng.

4.4. RAID6

RAID6 [Two Parity Distributed Disk] giống như RAID5 hoạt động theo phương pháp parity. Chủ yếu được sử dụng trong một số lượng lớn các mảng. Chúng ta cần tối thiểu 4 ổ đĩa, khi có 2 ổ đĩa bị lỗi, chúng ta có thể xây dựng lại dữ liệu trong khi thay thế các ổ đĩa mới.

Rất chậm so với RAID5, vì nó ghi dữ liệu cho cả 4 trình điều khiển cùng một lúc. Sẽ có tốc độ trung bình trong khi chúng ta sử dụng card điều khiển RAID. Nếu chúng ta có 6 số ổ cứng 1TB thì 4 ổ đĩa sẽ được sử dụng cho dữ liệu và 2 ổ đĩa sẽ được sử dụng cho parity.

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

  • Hiệu suất kém.
  • Hiệu suất đọc sẽ tốt.
  • Hiệu suất ghi sẽ kém nếu chúng tôi không sử dụng card điều khiển RAID.
  • Xây dựng lại từ 2 ổ đĩa parity.
  • Không gian 2 đĩa sẽ nằm dưới parity.
  • Có thể được sử dụng trong mảng lớn.
  • Có thể được sử dụng trong mục đích sao lưu, truyền phát video, được sử dụng ở quy mô lớn.

4.5. RAID10

RAID10 có thể được gọi là RAID1 + RAID0 hoặc RAID0 + RAID1. RAID10 sẽ làm cả hai công việc của Mirror và Striping. Mirror sẽ là đầu tiên và Stripe sẽ là thứ hai trong RAID10. Stripe sẽ là đầu tiên và mirror sẽ là thứ hai trong RAID01. RAID10 tốt hơn so với RAID01.

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

  • Hiệu suất đọc và viết tốt.
  • Nửa không gian sẽ bị mất trong tổng công suất.
  • Xây dựng lại nhanh chóng từ sao chép dữ liệu.
  • Có thể được sử dụng trong lưu trữ cơ sở dữ liệu cho hiệu suất cao và tính sẵn sàng.

5. Cài đặt mdadm

RAID được quản lý bằng gói mdadm trong hầu hết các bản phân phối Linux. Để kiểm tra xem gói mdadm có khả dụng trên hệ thống của chưa bằng cách chạy lệnh sau:

[root@localhost ~]# mdadm  --version
mdadm - v4.1-rc1 - 2018-03-22

Nếu gói mdadm không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Để bắt đầu cài đặt, bạn phải thêm repo bằng cách thực hiện lệnh sau:

    add-apt-repository ppa:eugenesan/ppa
    

    Tiếp theo chúng ta cần cập nhật [update] hệ thống:

    apt-get update
    

    Chạy lệnh sau để cài đặt gói mdadm:

    apt-get install mdadm
    
  • Đối với với bản phân phối RHEL/CentOS:

    Để thực hiện cài đặt gói mdadm chúng ta cần thực hiện cập nhật [update] hệ thống:

    yum update 
    

    Chạy lệnh bên dưới để thực hiện cài đặt gói mdadm:

    yum install mdadm
    

6. Hướng dẫn tạo RAID

Lưu ý: Tất cả các hướng dẫn bên dưới điều được thực hiện trên bản phân phối Centos7.

6.1. Hướng dẫn tạo RAID0

Khi sử dụng RAID0 nếu chúng ta có hai đĩa và lưu nội dung vào logical volume thì nó sẽ được lưu vào cả hai đĩa vật lý bằng cách chia nội dung. RAID0 sẽ không thể lấy dữ liệu nếu một trong các ổ đĩa bị lỗi.

Ưu điểm của RAID0:

  • RAID 0 có hiệu năng cao.
  • Không có dung lượng sẽ bị lãng phí.
  • Zero Fault Tolerance [Không thể lấy lại dữ liệu nếu bất kỳ một trong các đĩa bị lỗi].
  • Viết và đọc sẽ là tuyệt vời.

Chú ý: RAID0 có thể mất dữ liệu nếu ổ cứng hỏng

Trong ví dụ dưới đây yêu cầu: Số lượng đĩa ít nhất để tạo RAID0 là 2 bạn có thể thêm nhiều đĩa hơn nhưng thứ tự sẽ gấp đôi 2, 4, 6, 8. Nếu bạn có thẻ RAID vật lý có đủ cổng, bạn có thể thêm nhiều đĩa hơn.

Ví dụ bên dưới chúng ta không sử dụng Hardware RAID các thiết lập này phụ thuộc vào Software RAID.

6.1.1. Tạo RAID0

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

Để thiết lập RAID0 trên hệ điều hành Linux chúng ta cần thực hiện cập nhật [update] hệ thống và cài đặt gói mdadm.

👉 Bước 2: Kiểm tra thông tin ổ đĩa trên máy:

Trước khi tạo RAID0, cần đảm bảo có ít nhất hai ổ đĩa cứng chạy lệnh sau để kiểm tra:

[root@localhost ~]# fdisk -l |grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors

Qua lệnh kiểm tra trên chúng ta thấy có 2 đĩa cứng mới được phát hiện, bây giờ chúng ta thực hiện kiểm tra xem các ổ cứng có sử dụng RAID nào chưa bằng lệnh mdadm cùng với tùy chọn --examine như bên dưới.

[root@localhost ~]# mdadm --examine /dev/sd[b-c]
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.

Kết trên trả về cho chúng ta biết rằng không có RAID nào được áp dụng cho hai ổ 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  raid1/test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      10475520 blocks super 1.2 [2/2] [UU]

unused devices: 

Để tự động gắn kết /dev/md0 khi khởi động lại hệ thống chúng ta cần tạo một mục trong tệp /etc/fstab. Bạn có thể sử dụng trình soạn thảo vi để nhập dòng bên dưới vào:

/dev/md0        raid1   ext4    defaults         0 0

Thực hiện như sau:

[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 14 10:34:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab[5], findfs[8], mount[8] and/or blkid[8] for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=58253f4e-01e2-47c8-8f0c-49a1e5b0b7bf /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
/dev/md0        raid1   ext4    defaults         0 0

Lưu lại và chạy lệnh sau để kiểm tra xem có bất kỳ lỗi nào trong mục /etc/fstab không.

[root@localhost ~]# mount -a
[root@localhost ~]# mount -av
/                        : ignored
/boot                    : already mounted
swap                     : ignored
raid1                    : already mounted

Nếu có lỗi, không reboot server để tránh tình trạng server không thể khởi động. Kiểm tra cấu hình trong file /etc/fstab và chạy lại lệnh cho tới khi không có thông báo lỗi.

👉 Bước 6: Lưu cấu hình RAID1 theo cách thủ công vào tệp mdadm.conf bằng lệnh bên dưới.

[root@localhost ~]#  mdadm --detail --scan --verbose >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=localhost.localdomain:0 UUID=6e8d46d8:d307ecf4:13ec9c89:52955fe6
   devices=/dev/sdb1,/dev/sdc1

👉 Bước 7: Kiểm tra dữ liệu sau khi hỏng đĩa

Mục đích chính của chúng ta là sau khi bất kỳ ổ cứng nào bị hỏng hoặc sập dữ liệu chúng ta có khôi phục dữ liệu từ đĩa khác.

Đầu tiên chúng ta chạy lệnh sau kiểm tra RAID1 đã được tạo và sử dụng phân vùng /dev/sdb1/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  raid6/test6.txt
[root@localhost ~]# cat raid6/test6.txt
This is RAID6

Để tự động gắn kết /dev/md0 khi khởi động lại hệ thống chúng ta cần tạo một mục trong tệp /etc/fstab. Bạn có thể sử dụng trình soạn thảo vi để nhập dòng bên dưới vào:

/dev/md0        raid6   ext4    defaults         0 0

Thực hiện như sau:

[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 14 10:34:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab[5], findfs[8], mount[8] and/or blkid[8] for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=58253f4e-01e2-47c8-8f0c-49a1e5b0b7bf /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
/dev/md0        raid6   ext4    defaults         0 0

Lưu lại và chạy lệnh sau để kiểm tra xem có bất kỳ lỗi nào trong mục /etc/fstab không.

[root@localhost ~]# mount -a
[root@localhost ~]# mount -av
/                        : ignored
/boot                    : already mounted
swap                     : ignored
raid6                    : already mounted

Nếu có lỗi chúng ta không được reboot server mà chúng ta cần tìm sữa lỗi đến khi chạy lệnh trên không còn lỗi.

👉 Bước 6: Lưu cấu hình RAID 6

RAID mặc định không có tệp cấu hình. Chúng ta phải lưu nó bằng cách sử dụng lệnh bên dưới và sau đó xác minh trạng thái của thiết bị /dev/md0.

[root@localhost ~]# mdadm --detail --scan --verbose >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid6 num-devices=4 metadata=1.2 name=localhost.localdomain:0 UUID=39a8d4b6:ea69722c:371c0aa2:9eff943c
   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

👉 Bước 7: Thêm một ổ đĩa dự phòng

Chúng ta đã có 4 đĩa và có sẵn hai thông tin parity. Nếu bất kỳ một trong các đĩa bị lỗi, chúng tôi có thể lấy dữ liệu, bởi vì có 2 parity trong RAID6.

Các bước sau đây sẽ giúp chúng ta có thể thêm một ổ đĩa dự phòng sau khi bất kỳ đĩa nào bị lỗi.

Đầu tiên chúng ta gắn thêm 1 đĩa mới vào hệ thống của chúng ta chạy lệnh bên dưới để kiểm tra:

[root@localhost ~]# ls -l /dev/ | grep sd
brw-rw----. 1 root disk      8,   0 May 19 14:28 sda
brw-rw----. 1 root disk      8,   1 May 19 14:28 sda1
brw-rw----. 1 root disk      8,   2 May 19 14:28 sda2
brw-rw----. 1 root disk      8,  16 May 19 14:28 sdb
brw-rw----. 1 root disk      8,  17 May 19 14:28 sdb1
brw-rw----. 1 root disk      8,  32 May 19 14:28 sdc
brw-rw----. 1 root disk      8,  33 May 19 14:28 sdc1
brw-rw----. 1 root disk      8,  48 May 19 14:28 sdd
brw-rw----. 1 root disk      8,  49 May 19 14:28 sdd1
brw-rw----. 1 root disk      8,  64 May 19 14:28 sde
brw-rw----. 1 root disk      8,  65 May 19 14:28 sde1
brw-rw----. 1 root disk      8,  80 May 19 14:28 sdf

Kết quả trên cho thấy đĩa sdf đã được thêm vào hệ thống.

Tiếp theo hãy xác nhận đĩa mới chưa tham gia RAID đã được cấu hình hoặc không sử dụng, Bằng việc chạy lệnh mdadm --examine như sau:

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

Giống như chúng ta đã tạo phân vùng cho bốn đĩa trước đó, tương tự như chúng ta đã tạo phân vùng mới trên đĩa sdf bằng lệnh fdisk thực hiện như sau:

[root@localhost ~]# fdisk /dev/sdf
Welcome to fdisk [util-linux 2.23.2].

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xcb22f5d6.

Command [m for help]: n
Partition type:
   p   primary [0 primary, 0 extended, 4 free]
   e   extended
Select [default p]: p
Partition number [1-4, default 1]: 1
First sector [2048-20971519, default 2048]: 2048
Last sector, +sectors or +size{K,M,G} [2048-20971519, default 20971519]: 20971519
Partition 1 of type Linux and of size 10 GiB is set

Command [m for help]: p

Disk /dev/sdf: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size [logical/physical]: 512 bytes / 512 bytes
I/O size [minimum/optimal]: 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xcb22f5d6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1            2048    20971519    10484736   83  Linux

Command [m for help]: L

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec [FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec [FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec [FAT-
 4  FAT16  raid10/test10.txt
[root@localhost ~]# cat  raid10/test10.txt
This is RAID10

Thiết bị /dev/md0 gắn kết của chúng ta là tạm thời. Nếu hệ điều hành được khởi động lại, các thư mục được gắn kết này sẽ bị mất. Vì vậy, chúng ta cần phải gắn kết vĩnh viễn. Để thực hiện gắn kết vĩnh viễn phải nhập trong tệp /etc/fstab. Bạn có thể sử dụng trình soạn thảo vi để nhập dòng bên dưới vào:

/dev/md0        raid10  ext4    defaults         0 0

Thực hiện như bên dưới:

[root@localhost ~]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue May 14 10:34:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab[5], findfs[8], mount[8] and/or blkid[8] for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=58253f4e-01e2-47c8-8f0c-49a1e5b0b7bf /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
/dev/md0        raid10  ext4    defaults         0 0

Lưu lại file /etc/fstab và chạy lệnh:

[root@localhost ~]# mount -a
[root@localhost ~]# mount -av
/                        : ignored
/boot                    : already mounted
swap                     : ignored
raid10                   : already mounted

Nếu có lỗi, không reboot server để tránh tình trạng server không thể khởi động. Kiểm tra cấu hình trong file /etc/fstab và chạy lại lệnh cho tới khi không có thông báo lỗi.

👉 Bước 6: Lưu cấu hình RAID

Theo mặc định, RAID không có tệp cấu hình, vì vậy chúng ta cần lưu tệp thủ công sau khi thực hiện tất cả các bước trên, để duy trì các cài đặt này trong khi khởi động hệ thống.

[root@localhost ~]# mdadm --detail --scan --verbose > /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid10 num-devices=4 metadata=1.2 name=localhost.localdomain:0 UUID=981e3a84:52808df0:5d26b18d:bea511d9
   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

6.5.2. Tạo RAID10 bằng RAID1 + RAID0

Đối với cách này chúng ta phải xác định 2 bộ RAID1 và sau đó chúng ta cần xác định RAID0 bằng cách sử dụng hai bộ RAID1 đã tạo.

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

Để thiết lập RAID10 trên hệ điều hành Linux chúng ta cần thực hiện cập nhật [update] hệ thống và cài đặt gói mdadm.

👉 Bước 2: Kiểm tra thông tin ổ đĩa trên máy:

Đầu tiên, liệt kê các đĩa có sẵn để tạo RAID10.

[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sde: 10.7 GB, 10737418240 bytes, 20971520 sectors

Qua lệnh kiểm tra trên chúng ta thấy có 4 đĩa cứng mới được phát hiện. Khi gói mdadm đã được cài đặt chúng ta thực hiện kiểm tra xem các ổ cứng có sử dụng RAID nào chưa bằng lệnh mdadm bên dưới.

[root@localhost ~]#  mdadm -E /dev/sd[b-e]
mdadm: No md superblock detected on /dev/sdb.
mdadm: No md superblock detected on /dev/sdc.
mdadm: No md superblock detected on /dev/sdd.
mdadm: No md superblock detected on /dev/sde.

Như kết quả trên, chưa có bất kỳ đĩa nào được phát hiện, có nghĩa là không có RAID nào được xác định.

👉 Bước 3: [Tạo phân vùng đĩa cứng

Để có thể tạo RAID chúng ta cần tạo phân vùng đĩa cứng cho các đĩa sdb, sdc, 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  /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=1.2 name=localhost.localdomain:0 UUID=16e08f8b:2eaaf81e:87e6d213:4a3b6c37
   devices=/dev/sdb1,/dev/sdc1
MAILADDR 

Để chạy mdadm trong nền và quét chúng ta chạy lệnh sau:

[root@localhost ~]# /sbin/mdadm --monitor --scan --oneshot

Theo mặc định thì mdadm sẽ kiểm tra các mảng RAID sau 60 giây và gửi thông báo nếu phát hiện có vần đề. Bạn có thể sửa đổi khoảng thời gian này bằng cách thêm vào tùy chọn --delay [Ví dụ: --delay 900 có nghĩa là 15 phút sẽ thực hiện một lần].

8.2. Mô phỏng và thay thế một đĩa lưu trữ RAID bị lỗi

Để mô phỏng cho việc hệ thống sẽ gửi mail thông báo sự cố của một trong các thiết bị lưu trữ trong mảng RAID, chúng ta sẽ sử dụng lệnh mdadm cùng với các tùy chọn --manage--set-faulty như sau:

[root@localhost ~]# mdadm --manage --set-faulty /dev/md0 /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1][F] sdb1[0]
      10475520 blocks super 1.2 [2/1] [U_]

unused devices: 

Lệnh trên sẽ làm cho đĩa /dev/sdc1 đánh dấu là bị lỗi.

Sau khi thực hiện lệnh trên chúng ta nhận được cảnh báo về sự cố của một đĩa bị lỗi trong RAID.

[root@localhost ~]#
You have mail in /var/spool/mail/root
[root@localhost ~]# cat  /var/spool/mail/root
From   Fri May 24 08:39:04 2019
Return-Path: 
X-Original-To: 
Delivered-To: 
Received: by localhost.localdomain [Postfix, from userid 0]
	id 6D6E63055398; Fri, 24 May 2019 08:39:04 -0400 [EDT]
From: mdadm monitoring 
To: 
Subject: DegradedArray event on /dev/md0:localhost.localdomain
Message-Id: 
Date: Fri, 24 May 2019 08:39:04 -0400 [EDT]

This is an automatically generated mail message from mdadm
running on localhost.localdomain

A DegradedArray event had been detected on md device /dev/md0.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1]
md0 : active raid1 sdc1[1][F] sdb1[0]
      10475520 blocks super 1.2 [2/1] [U_]

unused devices: 

Tiếp theo chúng ta thực hiện lệnh sau để xóa đĩa bị lỗi trong RAID:

[root@localhost ~]# mdadm /dev/md0 --remove /dev/sdc1
mdadm: hot removed /dev/sdc1 from /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri May 24 08:32:19 2019
        Raid Level : raid1
        Array Size : 10475520 [9.99 GiB 10.73 GB]
     Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
      Raid Devices : 1
     Total Devices : 1
       Persistence : Superblock is persistent

       Update Time : Fri May 24 08:55:30 2019
             State : clean
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  [local to host localhost.localdomain]
              UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
            Events : 49

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

Sau chúng ta thực hiện xoá đĩa bị lỗi trong RAID chúng ta có thể gỡ bỏ nó khỏi máy và thay thế nó bằng một đĩa dự phòng /dev/sdd.

Sau khi thêm đĩa dự phòng vào chúng ta thực hiện tạo phân vùng cho /dev/sdd bằng lệnh fdisk. Khi đã tạo thành công phân vùng chúng ta chạy lệnh bên dưới thêm đĩa vào RAID:

[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdd1
mdadm: added /dev/sdd1
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri May 24 08:32:19 2019
        Raid Level : raid1
        Array Size : 10475520 [9.99 GiB 10.73 GB]
     Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri May 24 08:55:30 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  [local to host localhost.localdomain]
              UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
            Events : 49

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

Hệ thống sẽ tự động bắt đầu xây dựng lại phần dữ liệu của chúng ta vào đĩa mới thêm vào. Chúng ta có thể kiểm tra bằng cách đánh dấu /dev/sdb1 bị lỗi, xóa nó khỏi RAID và tệp test1.txt vẫn có thể truy cập được tại /raid1:

Trước khi đĩa /dev/sdb1 chưa lỗi:

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri May 24 08:32:19 2019
        Raid Level : raid1
        Array Size : 10475520 [9.99 GiB 10.73 GB]
     Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri May 24 08:55:30 2019
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  [local to host localhost.localdomain]
              UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
            Events : 49

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       2       8       49        1      active sync   /dev/sdd1
[root@localhost ~]# ls -l raid1
total 20
drwx------. 2 root root 16384 May 24 08:32 lost+found
-rw-r--r--. 1 root root    14 May 24 08:32 test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1

Sau khi đĩa /dev/sdb1 lỗi:

[root@localhost ~]# mdadm --remove /dev/md0 /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri May 24 08:32:19 2019
        Raid Level : raid1
        Array Size : 10475520 [9.99 GiB 10.73 GB]
     Used Dev Size : 10475520 [9.99 GiB 10.73 GB]
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

       Update Time : Fri May 24 09:00:23 2019
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:0  [local to host localhost.localdomain]
              UUID : 16e08f8b:2eaaf81e:87e6d213:4a3b6c37
            Events : 52

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       2       8       49        1      active sync   /dev/sdd1
[root@localhost ~]# ls -l raid1
total 20
drwx------. 2 root root 16384 May 24 08:32 lost+found
-rw-r--r--. 1 root root    14 May 24 08:32 test1.txt
[root@localhost ~]# cat raid1/test1.txt
This is RAID1

Qua kết quả trên cho chúng ta thấy sau khi thêm /dev/sdd1 vào RAID thay thế cho /dev/sdc1 việc xây dựng lại dữ liệu đã được hệ thống tự động thực hiện.

8.3. Phục hồi dữ liệu mất mát

mdadm sẽ tự động xây dựng lại dữ liệu khi một đĩa bị lỗi. Nhưng nếu 2 đĩa /dev/sdb1/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.

Bài Viết Liên Quan

Chủ Đề