[Centos 7] RAID (Redundant Array of Inexpensive Disks)

2022. 11. 23. 16:25리눅스(Linux)

RAID (Redundant Array of Inexpensive Disks)
   - 장애요인 최대로 제거한 고성능 무 정지 저장장치
   - 여러 개의 disk를 하나의 가상 disk로 구성, 대용량 저장 장치 구축 가능
   - 다수의 disk에 data를 분할, 병렬 전송해 전송 속도 향상
   - Hardware RAID 와 Software RAID로 구분 ( Test 환경은 Software 구성에 해당 )
   - RAID는 Level 이 존재하며, 각 Level 마다 기능이 다르다.  
   - CentOS 7.x 에서는 Raid 0 , 1 , 5 , 6 , 1+0 번을 제공 한다.

   - RAID가 묶일 하드디스크에 속도, 용량이 같아야함

 

RAID 0번 → 잘 사용하지 않음 

RAID 1번 →  OS 영역

RAID 5~ 1+0번 → data 영역

 

$ Hardware RAID 란? 
   - Server에 별도의 Raid Controller를 장착하여 물리적인 Raid구성을 의미한다, 
   - Software RAID에 비해 안정적이고, 속도가 빠르다.

$ Software RAID 란?
   - 기본 OS에 내장되어있는 Raid를 이용하는 것을 말하며, Hardware RAID에 비해 성능이 떨어진다.

 

Raid Level 0 ( Stripe Volume )

   - 최소 2개이상의 HDD가 필요

   - 디스크의 수에 따라 성능 향상, 성능 향상 목적

   - 성능은 향상되나 내결함성이 없음

   - 최대 32개까지 묶을 수 있다. 위험성도 같이 증가

   - 32개중 하나라도 고장나면 망가진 디스크 안에 데이터블록을 읽을 수 없다. 

   - Stripe 볼륨에 데이터 쓰기 발생 시 64kb 블록으로 나뉘어져 배열된 모든 디스크에 균등 분산

   - 데이터를 복구할 방법도 없다. (안정성이 떨어짐)

   - 가정용으로 전략함…

 

Raid Level 1 ( Mirror Volume )

   - 디스크가 짝수개로 구성해야 함

   - 기존의 단순 볼륨을 Mirroring 

   - 사용 가능 디스크의 용량 [ 총 디스크 용량 / 2  ]

   - 내결함성 제공

   - 데이터가 미러링된 RAID에 복사된다. (안정성이 높아진다.)

   - 속도는 느리다 1개의 HDD쓰는것과 같은 성능 (저장공간도 1개 HDD와 같다.)

 

Raid Level 5 ( Stripe With Parity )

   - 디스크 최소 3개 이상 필요 

   - 추가 디스크 하나만으로 내결함성

   - 속도, 안정성 모두 구현 가능

   - Block 영역으로 디스크를 묶음, 한 Block 값은 모두 짝수값이 나와야 함

   - 오류 검사를 위해 parity bit 사용

   - 하나의 Block에 하나의 Parity bit (복구비트)를 포함해야 함

   - Parity를 각 디스크에 나눠서 안정성을 강화

   - 사용 가능 디스크의 용량 [ 총 디스크 용량 - 하나의 디스크 용량  ]

 

Raid Level 6 ( 중복 패리티 )

   - 디스크 최소 4개 이상 필요

   - Raid5의 단점인 2개 이상의 HDD가 Fail 하더라도 복구 가능
   - 오류 검사를 위해 중복 parity bit 사용, 안정성 강화
   - 사용 가능 디스크의 용량 [ 총 디스크 용량 - 두 개의 디스크 용량  ]

 

Raid Level 1 + 0 

   - 디스크 최소 4개 이상 필요

   - A세트 묶고 B세트로 묶고 그 두개의 세트를 다시 묶음

   - Raid 1번 구성 후 Raid 0번으로 재 구성하는 형태 (RAID 1 + RAID 0)
   - 신뢰성과 성능은 우수 하지만, 효율적인 측면이 떨어짐
   - 사용 가능 디스크의 용량 [ 총 디스크 용량 / 2  ]

 

 

parity bit - 디스크 장애 시 데이터를 재 구축하는데 사용할 수 있는 사전에 계산된 값

 

TEST

TEST 환경 구성

-. CentOS에서 Software Raid를 구성하기 위해 필요한 Package  
-. mdadm-3.4-14.el7.x86_64

$ Raid - 0 구성 
[ Raid - 0 을 Test 하기 위해서 새로운 HDD 2개를 추가 ]

# fdisk /dev/sdb -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdc -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w

# mknod /dev/md0 b 9 0



   - Linux에서는 기본적은 장치를 컨트롤 하기 위해 장치 파일이 있어야 한다, 하지만 현재 RAID구성 시 RAID에 관한 장치 파일이 없으므로 장치 파일을 수동으로 생성, 이때 쓰는 명령어가 mknod 명령어 이며, 기본사용 형식은 mknod [생성할 장치파일 이름] [장치파일형식] [주 번호] [보조 번호] 형식이다.

   - 장치 파일형식은 b , (c, u) , p를 사용 각 의미는 b=blocks Device, p=FIFO, c, u = Character 특수파일을 의미 한다. 

   - 주 번호와 보조 번호는 특별한 의미는 없으며, 비슷한 역할을 진행하는 장치 파일간 주 번호는 통일해서 사용하고 보조 번호로 각 장치를 세부 구분하는 형태로 쓰인다. 

   - 통상적으로 md 장치의 주 번호 값은 9번으로 통일하여 사용한다.

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
   - 위에서 생성한 장치 파일에 Raid 0의 정보를 입력 한다.

# mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=RAID:0 UUID=94706d9b:77bf9660:3a4921bf:cfa5ccb7
   - 정보 입력 후 확인하게 되면, 입력 된 정보를 토대로 장치의 UUID값 등이 표시되는 것을 확인
   
# mdadm --query --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jun 22 21:04:51 2017
     Raid Level : raid0
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Thu Jun 22 21:04:51 2017
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : RAID:0  (local to host RAID)
           UUID : 94706d9b:77bf9660:3a4921bf:cfa5ccb7
         Events : 0

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

   - (--scan) 옵션 보다 자세한 정보를 획득 할 수 있다.

# mkfs.xfs /dev/md0 
meta-data=/dev/md0               isize=512    agcount=8, agsize=65408 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
   - 해당 Raid 장치 Format

# mkdir /raid0
# mount /dev/md0 /raid0 
   - Raid 장치 Mount

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.1M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   16K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
/dev/md0        2.0G   33M  2.0G   2% /raid0

# mdadm --detail --scan > /etc/mdadm.conf
   - md 장치 정보 저장 하기, System 재 부팅 시 장치번호가 변경 될 수 있으므로 반드시 저장.
   - fstab 오토마운트 설정시 장치 정보를 읽지 못하면 부팅이 안되는 현상이 발생함


# vi /etc/fstab 
/dev/md0        /raid0          xfs     defaults        0 0
   - Raid 장치 Auto Mount 설정 하기

# reboot 
   - 재 부팅 후 정상적으로 Auto Mount 되는지 확인
   
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.0M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/md0        2.0G   33M  2.0G   2% /raid0
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0



$ Raid - 1 구성 

# fdisk /dev/sdb -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdc -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdd -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w ( 복구 용으로 사용할 Disk )

# mknod /dev/md1 b 9 1
# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
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/md1 started.
   - Raid 1번의 경우 중복데이터를 저장 하기 때문에 기본 적으로 /boot에 관한 부분은 Raid로 
   설정을 하면 안 된다.
   - 즉, 부팅과 관련 된 데이터는 Raid 1번 장치에는 적합한 형태가 아니다.

# mdadm --detail --scan
ARRAY /dev/md1 metadata=1.2 name=RAID:1 UUID=06264731:2b2ba277:c075fdb0:7e7f262b

# mdadm --query --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Fri Jun 23 12:36:17 2017
     Raid Level : raid1
     Array Size : 1046976 (1022.44 MiB 1072.10 MB)
  Used Dev Size : 1046976 (1022.44 MiB 1072.10 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 12:39:12 2017
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : RAID:1  (local to host RAID)
           UUID : 06264731:2b2ba277:c075fdb0:7e7f262b
         Events : 17

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

# mkfs.xfs /dev/md1
meta-data=/dev/md1               isize=512    agcount=4, agsize=65436 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=261744, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mkdir /raid1
# mount /dev/md1 /raid1

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.1M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   16K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
/dev/md1       1020M   33M  987M   4% /raid1

# mdadm --detail --scan > /etc/mdadm.conf 
 - md 장치 정보 저장 하기, System 재 부팅 시 장치번호가 변경 될 수 있으므로 반드시 저장.
 - fstab 오토마운트 설정시 장치 정보를 읽지 못하면 부팅이 안되는 현상이 발생함
 
 # vi /etc/fstab
/dev/md1        /raid1          xfs     defaults        0 0

# reboot 
   - 재 부팅 후 정상적으로 Auto Mount 되는지 확인
   
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.0M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/md1        2.0G   33M  2.0G   2% /raid1
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0


  $ Raid - 1 복구 작업

# halt
   - 시스템 종료
   - VMware 프로그램에서 물리적으로 가상 디스크 한 개를 제거 한다. ( Raid 1번으로 구성 된 HDD를 제거한다 !! )
   - 이 작업으로 인하여 기존에 Raid 1번에 문제가 발생하게 될 것이며, 우리는 새로운 HDD 1GB를 이용 하여 복구 작업을 진행한다.
   
# mdadm --query --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Fri Jun 23 13:09:59 2017
     Raid Level : raid1
     Array Size : 1046976 (1022.44 MiB 1072.10 MB)
  Used Dev Size : 1046976 (1022.44 MiB 1072.10 MB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 13:13:57 2017
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : RAID:1  (local to host RAID)
           UUID : 73caab78:06cf3b92:371e65b7:32c20731
         Events : 21

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


   - Raid 1번으로 묶인 2번째 장치가 Removed 상태인 것을 확인 할 수 있다. ( 위에 HDD를 물리적으로 삭제하였기 때문에 Removed 상태로 표시 된다. )
   - 여기서 주의 할 점으로는 물리적인 HDD를 삭제를 하게 되면 fdisk -l /dev/sd* 명령어를 이용하여 확인하면 각 Disk의 알파벳 이름이 달라진다.
   - 기존에 3개의 HDD에서 2개로 변경되었는데 기존의 이름은 /dev/sdb , /dev/sdc , /dev/sdd 로 표시 되었지만, /dev/sdc Disk 하나를 삭제한 지금 확인해 보면 /dev/sdb, /dev/sdd 가 아닌 /dev/sdb , /dev/sdc 로 표시 되는 것을 확인 할 수 있다

   - 기본 적으로 System이 부팅 되면서 삭제 HDD의 이름을 비어 두고 사용하는 것이 아닌, 삭제 Disk 다음 Disk에게 순차적인 이름부여를 진행하게 된다.

★★★★★ [ 주의 할 점 ] ★★★★★ 
   - 기본적으로 우리는 HDD를 제거 하였기 때문에, Removed 상태로 표시가 된다.
   - 하지만, 실제 업무에서는 HDD가 제거되는 일은 거의 없고 대부분 HDD에 문제가 발생하는 상태이다, 이때 장치의 상태를 Failed 상태라 말한다.
   - Failed 상태일 때에는 문제가 생긴 Failed Disk를 먼저 md 장치에서 제거 후 복구 작업을 진행 해야 한다.

$ Failed 장치 제거 및 복구 순서

1. umount /dev/md1 ( Mount 해제 )
2. mdadm /dev/md1 -r /dev/sdc1 ( Failed 장치 MD장치에서 제거 )
3. 복구 작업 진행 

# mdadm /dev/md1 --add /dev/sdc1
mdadm: added /dev/sdc1
   - 정상적인 HDD 를 md1 장치에 추가해 준다.

# mdadm --query --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Fri Jun 23 13:09:59 2017
     Raid Level : raid1
     Array Size : 1046976 (1022.44 MiB 1072.10 MB)
  Used Dev Size : 1046976 (1022.44 MiB 1072.10 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 13:30:19 2017
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : RAID:1  (local to host RAID)
           UUID : 73caab78:06cf3b92:371e65b7:32c20731
         Events : 40

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       2       8       33        1      active sync   /dev/sdc1
   - 새로운 HDD를 추가 해줌으로써, md1 장치가 정상적인 상태로 돌아 온 것을 확인 할 수 있다.
   
# mdadm --detail --scan > /etc/mdadm.conf 
   - md 장치 정보를 다시 저장 해준다.



$ Raid - 5 구성 

# fdisk /dev/sdb -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdc -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdd -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sde -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdf -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w ( 복구용 HDD )


# mknod /dev/md5 b 9 5
# mdadm --create /dev/md5 --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

# mdadm --detail --scan
ARRAY /dev/md5 metadata=1.2 name=Raid:5 UUID=eb497ba9:59a635f0:e4a4acc1:4876bb0c

# mdadm --query --detail /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Fri Jun 23 12:45:34 2017
     Raid Level : raid5
     Array Size : 3139584 (2.99 GiB 3.21 GB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 12:45:39 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : RAID:5  (local to host RAID)
           UUID : eb497ba9:59a635f0:e4a4acc1:4876bb0c
         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
       4       8       65        3      active sync   /dev/sde1

# mkfs.xfs /dev/md5
meta-data=/dev/md5               isize=512    agcount=8, agsize=98176 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=784896, imaxpct=25
         =                       sunit=128    swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mkdir /raid5
# mount /dev/md5 /raid5

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.1M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   16K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
/dev/md5        3.0G   33M  3.0G   2% /raid5

# mdadm --detail --scan > /etc/mdadm.conf 
   - md 장치 정보 저장 하기, System 재 부팅 시 장치번호가 변경 될 수 있으므로 반드시 저장.
   - fstab 오토마운트 설정시 장치 정보를 읽지 못하면 부팅이 안되는 현상이 발생함

# vi /etc/fstab
/dev/md5        /raid5          xfs     defaults        0 0

# reboot 
   - 재 부팅 후 정상적으로 Auto Mount 되는지 확인
   
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.0M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/md5        3.0G   33M  3.0G   2% /raid5
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0






$ Raid - 5 복구 작업

# halt 
   - 시스템 종료
   - VMware 프로그램에서 물리적으로 가상 디스크 한 개를 제거 한다.
   - 이 작업으로 인하여 기존에 Raid 5번에 문제가 발생하게 될 것이며, 우리는 새로운 HDD 1GB를 이용하여 복구 작업을 진행한다.

# mdadm --query --detail /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Fri Jun 23 12:45:34 2017
     Raid Level : raid5
     Array Size : 3139584 (2.99 GiB 3.21 GB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 12:59:29 2017
          State : clean, degraded
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : RAID:5  (local to host RAID)
           UUID : eb497ba9:59a635f0:e4a4acc1:4876bb0c
         Events : 22

    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
       -       0        0        3      removed
   - 현재 4번째 Disk가 시스템에서 지워진 상태로 표시 된다.


★★★★★ [ 주의 할 점 ] ★★★★★ 
   - 기본적으로 우리는 HDD를 제거 하였기 때문에, Removed 상태로 표시가 된다.
   - 하지만, 실제 업무에서는 HDD가 제거되는 일은 거의 없고 대부분 HDD에 문제가 발생하는 상태이다, 이때 장치의 상태를 Failed 상태라 말한다,
   - Failed 상태일 때에는 문제가 생긴 Failed Disk를 먼저 md 장치에서 제거 후 복구 작업을 진행 해야 한다.

$ Failed 장치 제거 및 복구 순서

1. umount /dev/md5 ( Mount 해제 )
2. mdadm /dev/md5 -r /dev/sdb1 ( Failed 장치 MD장치에서 제거 )
3. 복구 작업 진행 

# mdadm /dev/md5 --add /dev/sde1
mdadm: added /dev/sde1
   - 위에서 생성한 복구용 Disk를 이용하여 md5 장치에 복구 Partition으로 지정한다.

# mdadm --query --detail /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Fri Jun 23 13:51:00 2017
     Raid Level : raid5
     Array Size : 3139584 (2.99 GiB 3.21 GB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 13:55:40 2017
          State : clean, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 95% complete

           Name : RAID:5  (local to host RAID)
           UUID : 5b78e0c0:648d86dd:9fa5f44d:fea935de
         Events : 39

    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
       4       8       65        3      spare rebuilding   /dev/sde1
   - 기본적으로 복구 작업을 진행 하면, Rebuilding Time을 갖고 복구작업을 진행 한다. 
   - 추가 명령어를 입력하고 빠르게 mdadm --query --detail /dev/md5 입력하면, 확인 할 수 있다. 

# mdadm --query --detail /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Fri Jun 23 12:45:34 2017
     Raid Level : raid5
     Array Size : 3139584 (2.99 GiB 3.21 GB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 13:02:36 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : RAID:5  (local to host RAID)
           UUID : eb497ba9:59a635f0:e4a4acc1:4876bb0c
         Events : 41

    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
       4       8       65        3      active sync   /dev/sde1
   - 다시 활성화 상태로 돌아 온 것을 확인 한다. 
   
# mdadm --detail --scan > /etc/mdadm.conf 
   - md 장치 정보를 다시 저장 해준다.



$ Raid - 6 구성

# fdisk /dev/sdb -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdc -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdd -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sde -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdf -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w ( 복구용 HDD )
# fdisk /dev/sdg -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w ( 복구용 HDD )

# mknod /dev/md6 b 9 6
# mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md6 started.

# mdadm --detail --scan
ARRAY /dev/md6 metadata=1.2 name=RAID:6 UUID=d7dfa1f7:3cfbb984:2c40ff2f:d38404f5

# mdadm --query --detail /dev/md6
/dev/md6:
        Version : 1.2
  Creation Time : Fri Jun 23 14:02:07 2017
     Raid Level : raid6
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 14:02:12 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : RAID:6  (local to host RAID)
           UUID : d7dfa1f7:3cfbb984:2c40ff2f:d38404f5
         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

# mkfs.xfs /dev/md6
meta-data=/dev/md6               isize=512    agcount=8, agsize=65408 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mkdir /raid6
# mount /dev/md6 /raid6

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.1M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   16K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
/dev/md6        2.0G   33M  2.0G   2% /raid6

# mdadm --detail --scan > /etc/mdadm.conf 
   - md 장치 정보 저장 하기, System 재 부팅 시 장치번호가 변경 될 수 있으므로 반드시 저장.
   - fstab 오토마운트 설정시 장치 정보를 읽지 못하면 부팅이 안되는 현상이 발생함

# vi /etc/fstab
/dev/md6        /raid6          xfs     defaults        0 0

# reboot 
   - 재 부팅 후 정상적으로 Auto Mount 되는지 확인
   
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.0M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/md6        2.0G   33M  2.0G   2% /raid6
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0


$ Raid - 6 복구 작업

# halt 
   - 시스템 종료
   - VMware 프로그램에서 물리적으로 가상 디스크 두 개를 제거 한다. ( Raid 6는 중복 Parity를 제공 하므로 2개를 삭제해도 복구가 가능하다. )
   - 이 작업으로 인하여 기존에 Raid 6번에 문제가 발생하게 될 것이며, 우리는 HDD 1GB * 2개를 이용하여 복구 작업을 진행한다.

# mdadm --query --detail /dev/md6
/dev/md6:
        Version : 1.2
  Creation Time : Fri Jun 23 14:02:07 2017
     Raid Level : raid6
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 14:09:38 2017
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : RAID:6  (local to host RAID)
           UUID : d7dfa1f7:3cfbb984:2c40ff2f:d38404f5
         Events : 21

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

★★★★★ [ 주의 할 점 ] ★★★★★ 
   - 기본적으로 우리는 HDD를 제거 하였기 때문에, Removed 상태로 표시가 된다.
   - 하지만, 실제 업무에서는 HDD가 제거되는 일은 거의 없고 대부분 HDD에 문제가 발생하는 상태이다, 이때 장치의 상태를 Failed 상태라 말한다,
   - Failed 상태일 때에는 문제가 생긴 Failed Disk를 먼저 md 장치에서 제거 후 복구 작업을 진행 해야 한다.

$ Failed 장치 제거 및 복구 순서

1. umount /dev/md1 ( Mount 해제 )
2. mdadm /dev/md1 -r /dev/sdb1 ( Failed 장치 MD장치에서 제거 )
3. 복구 작업 진행 

# mdadm /dev/md6 --add /dev/sdd1
mdadm: added /dev/sdd1

# mdadm /dev/md6 --add /dev/sde1
mdadm: added /dev/sde1
   - 복구용 HDD를 이용하여, 복구 작업 진행

# mdadm --query --detail /dev/md6
/dev/md6:
        Version : 1.2
  Creation Time : Fri Jun 23 14:02:07 2017
     Raid Level : raid6
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 14:14:09 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

           Name : RAID:6  (local to host RAID)
           UUID : d7dfa1f7:3cfbb984:2c40ff2f:d38404f5
         Events : 58

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       5       8       65        3      active sync   /dev/sde1
   - 복구 작업 완료 후 상태 확인
   
# mdadm --detail --scan > /etc/mdadm.conf
   - md 장치 정보를 다시 저장 해준다.



$ Raid - 1+0 구성  

# fdisk /dev/sdb -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdc -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdd -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sde -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w
# fdisk /dev/sdf -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w ( 복구용 HDD )
# fdisk /dev/sdg -> n -> p -> 1 -> enter -> enter -> t -> fd -> p -> w ( 복구용 HDD )

# mknod /dev/md10 b 9 10

# mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.

# mdadm --detail --scan
ARRAY /dev/md10 metadata=1.2 name=RAID:10 UUID=3d4080a1:2669cb55:1411317c:dcdf8fbd

# mdadm --query --detail /dev/md10
/dev/md10:
        Version : 1.2
  Creation Time : Fri Jun 23 14:42:12 2017
     Raid Level : raid10
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 14:42:22 2017
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : RAID:10  (local to host RAID)
           UUID : 3d4080a1:2669cb55:1411317c:dcdf8fbd
         Events : 17

    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
   - Set-A에는 /dev/sdb1 , /dev/sdd1이 Raid1번으로 묶여 있고, Set-B에는 /dev/sdc1 , 
   /dev/sde1이 묶여있는 것을 확인 할 수 있다.

# mkfs.xfs /dev/md10
meta-data=/dev/md10              isize=512    agcount=8, agsize=65408 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=523264, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

# mkdir /raid10
# mount /dev/md10 /raid10

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.0M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   16K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
/dev/md10       2.0G   33M  2.0G   2% /raid10

# mdadm --detail --scan > /etc/mdadm.conf 
   - md 장치 정보 저장 하기, System 재 부팅 시 장치번호가 변경 될 수 있으므로 반드시 저장.
   - fstab 오토마운트 설정시 장치 정보를 읽지 못하면 부팅이 안되는 현상이 발생함

# vi /etc/fstab 
/dev/md10       /raid10         xfs     defaults        0 0

# reboot 
   - 재 부팅 후 정상적으로 Auto Mount 되는지 확인 
   
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        15G  5.6G  9.5G  37% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.0M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/md10        2.0G   33M  2.0G   2% /raid10
/dev/sda1      1014M  169M  846M  17% /boot
tmpfs            98M   12K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0


$ Raid - 1+0 복구 작업
   - Raid 1+0의 경우 가상 디스크를 강제로 삭제하게 되면, MD장치가 사라지므로, 강제로 Failed 상태로 만든 후 복구 작업을 진행한다.
   - 단, 주의 할 것은 Set으로 묶인 HDD 2개를 동시에 Failed 하면 안 된다, 반드시 각 Set 마다 1개씩만 Failed 할 것.
( /dev/sdb , /dev/sde 를 Failed 하면 된다. )

TIP
   - 복구가 가능한 Raid 1 , Raid 5 , Raid 6 같은 경우에는 HDD를 제거하여도 부팅이 가능하지만, Raid 0 , Raid 1+0은 불가능 하다. 
   - 증명, Raid 1 , 5 , 6을 구성 후 Mount 설정 각 장치에 Data를 생성 HDD 1개 혹은 2개를 지우고 재 부팅해도 해당 Data는 복구가 가능해 정상적으로 표시 된다.

# umount /dev/md10

# mdadm /dev/md10 -f /dev/sdb1 /dev/sde1 
   - 강제로 2개의 HDD를 Failed 시킨다.

# mdadm --query --detail /dev/md10
/dev/md10:
        Version : 1.2
  Creation Time : Fri Jun 23 16:03:46 2017
     Raid Level : raid10
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 16:08:31 2017
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : RAID:10  (local to host RAID)
           UUID : 0eb90845:5d0cbec1:69c9a33d:0371708c
         Events : 19

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

       0       8       17        -      faulty   /dev/sdb1 ( 강제로 Fail 시킨 불완전한 상태의 HDD의 목록 확인 )
       3       8       65        -      faulty   /dev/sde1 ( 강제로 Fail 시킨 불완전한 상태의 HDD의 목록 확인 ) 

# mdadm /dev/md10 -r /dev/sdb1 /dev/sde1 
mdadm: hot removed /dev/sdb1 from /dev/md10
mdadm: hot removed /dev/sde1 from /dev/md10
   - Failed된 Disk 2개 MD10 장치에서 제거

# reboot 
   - 장치 제거 후 재 부팅을 진행 한다.
   
# mdadm --query --detail /dev/md10
/dev/md10:
        Version : 1.2
  Creation Time : Fri Jun 23 16:03:46 2017
     Raid Level : raid10
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 16:13:57 2017
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : RAID:10  (local to host RAID)
           UUID : 0eb90845:5d0cbec1:69c9a33d:0371708c
         Events : 21

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       33        1      active sync set-B   /dev/sdc1
       2       8       49        2      active sync set-A   /dev/sdd1
       -       0        0        3      removed
   - 불완전한 상태의 장치가 목록에서 제거 된 것을 확인 할 수 있다.

# mdadm /dev/md10 --add /dev/sdf1 /dev/sdg1
mdadm: added /dev/sdf1
mdadm: added /dev/sdg1

# mdadm --query --detail /dev/md10
/dev/md10:
        Version : 1.2
  Creation Time : Fri Jun 23 16:03:46 2017
     Raid Level : raid10
     Array Size : 2093056 (2044.00 MiB 2143.29 MB)
  Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Fri Jun 23 16:29:22 2017
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 2

         Layout : near=2
     Chunk Size : 512K

           Name : RAID:10  (local to host RAID)
           UUID : 0eb90845:5d0cbec1:69c9a33d:0371708c
         Events : 48

    Number   Major   Minor   RaidDevice State
       5       8       97        0      active sync set-A   /dev/sdg1
       1       8       33        1      active sync set-B   /dev/sdc1
       2       8       49        2      active sync set-A   /dev/sdd1
       4       8       81        3      active sync set-B   /dev/sdf1
   - 복구용 HDD를 이용하여 다시 Set에 추가 된 것을 확인 할 수 있게 된다.
   
# mdadm --detail --scan > /etc/mdadm.conf 
   - md 장치 정보를 다시 저장 해준다.


$ Raid Array 완전 삭제 하기

1. mount 관련 정보 삭제 하기

# umount /dev/md10
# vi /etc/fstab



2. md 장치 삭제 하기 

# mdadm -S /dev/md10
mdadm: stopped /dev/md10



3. md 장치에서 사용한 Partition superblock 초기화 하기 

# mdadm --zero-superblock /dev/sdb1
# mdadm --zero-superblock /dev/sdc1
# mdadm --zero-superblock /dev/sdd1
# mdadm --zero-superblock /dev/sde1