별의 공부 블로그 🧑🏻‍💻
728x90
728x170

mdadm 

  • Linux Software RAID  MD를 구성하는 명령

 

 

 

사용법

# mdadm options <raiddevice> <component-devices>

 

주요 옵션

옵션 설명
-C - RAID 장치를 생성하는 옵션
- (--create)
-l - -C 옵션과 함께 사용됨.
- RAID 레벨값을 지정함.
▶ linear
▶ raid0
▶ stripe
▶ raid1
▶ 1
▶ mirror
▶ raid4
▶ 4
▶ raid5
▶ 5
▶ raid6
▶ 6
▶ multipath
▶ mp
▶ faulty
▶ container
- (--level= )
-n - -C 옵션과 함께 사용됨.
- 구성할 디바이스 개수(Number)를 지정함.
- (--raid-devices= )
-D - 지정한 RAID의 자세한 정보를 보여줌.
- (--detail)
-S - 구성된 RAID의 배열을 비활성화하여 모든 자원을 해제함.
- (--stop)
-Q - 지정한 RAID 장치의 간단한 정보를 보여줌.
- (--query)
-f - 특정 장치에 오류를 발생시킬 때 사용함.
- (--fail)
-a - 작동중인 RAID에 디바이스를 추가할 때 사용함.
- (--add)
-r - RAID에서 디바이스를 제거함.
- (--remove)

 

사용 예

예 1
  • /dev/sdb1, /dev/sdc1을 RAID-0로 하여 /dev/md0을 생성함.
# mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdc1

 

 

예 2
  • /dev/md0의 자세한 정보를 보여줌.
# mdadm -D /dev/md0

 

예 3
  • /dev/md0로 구성된 배열을 비활성화하여 모든 자원을 해제함.
# mdadm -S /dev/md0

 

예 4
  • 작동중인 장치를 찾아 관련 정보를 출력함.
# mdadm --detail --scan

 

예 5
  • /dev/md1의 /dev/sdb6 장치에 강제적으로 오류를 발생시킴.
# mdadm /dev/md1 -f /dev/sdb6

 

예 6
  • /dev/md2에서 /dev/sdb8 장치를 제거함.
# mdadm /dev/md2 -r /dev/sdb8

 

예 7
  • /dev/md2에 /dev/sdb14 장치를 추가함.
# mdadm /dev/md2 -a /dev/sdb14

 

 

(참고) RAID 실습

더보기
  • RAID 도 본래의 특성을 살리기 위해서는 물리적으로 다른 디스크 장치를 묶어서 구성해야 함.
    • 예) /dev/sdb, /dev/sdc1, /dev/sdd1
  • 이 페이지에서는 RAID의 개념과 구축 방법 에 대해 실습할 것이므로, /dev/sdb 장치에서 파티션을 분할한 후, 해당 장치 파일을 이용해서 구성하도록 함.

 

(1) RAID-0 구성하기

  • 2개의 파티션을 사용해서 처리 속도를 높이는 Stripe 기술 기반의 RAID-0을 구성함.
    • 2개의 파티션은 각각 2GB 씩 할당함.
    • 장치 파일명은 /dev/md0을 부여함.
    • /rdata0라는 디렉터리로 마운트함.
  • 구성 후 확인해볼 사항
    • RAID-0 이므로, /rdata0 디렉터리의 용량이 약 4GB 인지 여부 검사

 

 fdisk로 파티션 생성 및 속성 변경

  • fdisk /dev/sdb를 실행해서 파티션을 생성하고, 파티션의 속성을 RAID 속성으로 변경함.
  • 파티션 정보 확인 후, t를 눌러서 변경하려는 파티션을 선택하고 fd를 누름.
  • 변경 후에는 반드시 재부팅하거나 partprobe 명령을 실행함.
  • 관련 절차
# fdisk /dev/sdb
...

Command (m for help): p

...

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

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

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

...

 

② 재부팅 후에 관련 장치 파일명 확인

# fdisk -l /dev/sdb

 

 RAID 장치 생성

# mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2

 

④ 파일 시스템 생성

# mkfs.xfs /dev/md0

 

⑤ 마운트할 디렉터리 생성

# mkdir /rdata0

 

⑥ 마운트 실행

# mount -t xfs /dev/md0 /rdata0

 

 mount  df 명령으로 확인

# df -h

 

⑧ 시스템 재부팅 시에도 계속 사용하려면 /etc/fstab 파일에 등록

# vi /etc/fstab
/dev/md0            /rdata0         xfs     defaults    0   0

 

(2) RAID-1 구성하기

  • 2개의 파티션을 사용해서 디스크 오류에 대체 가능한 Mirroring 기술 기반의 RAID-1 을 구성함.
    • 2개의 파티션은 각각 2GB 씩 할당함.
    • 장치 파일명은 /dev/md1을 부여함.
    • /rdata1이라는 디렉터리로 마운트함.
  • 구성 후 확인해볼 사항
    • RAID-1 이므로, /rdata1 디렉터리의 용량이 약 2GB 인지 여부 검사

 

 fdisk로 파티션 생성 및 속성 변경

  • fdisk /dev/sdb를 실행해서 나머지 공간을 확장 파티션 선언한 후에 2개의 논리 파티션을 생성하고, 파티션의 속성을 RAID 속성(fd)으로 변경함.
  • 변경 후에는 반드시 재부팅하거나 partprobe 명령을 실행함.
  • 관련 절차
# fdisk /dev/sdb
...

Command (m for help): p

...

Command (m for help): t
Partition number(1, 2, default 2): 5
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): t
Partition number(1, 2, default 2): 6
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

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

...

 

② 재부팅 후에 관련 장치 파일명 확인

# fdisk -l /dev/sdb
# cat /proc/partitions

 

 RAID 장치 생성

# mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb5 /dev/sdb6

 

④ 파일 시스템 생성

# mkfs.xfs /dev/md1

 

⑤ 마운트할 디렉터리 생성

# mkdir /rdata1

 

⑥ 마운트 실행

# mount -t xfs /dev/md1 /rdata1

 

 mount  df 명령으로 확인

# df -h

 

⑧ 시스템 재부팅 시에도 계속 사용하려면 /etc/fstab 파일에 등록

# vi /etc/fstab
/dev/md1            /rdata1         xfs     defaults    0   0

 

(3) RAID-5 구성하기

  • RAID-5 에서 최소 디스크 조건  3개이므로 3개의 파티션을 사용해서 구성함.
    • 3개의 파티션은 각각 2GB 씩 할당함.
    • 장치 파일명은 /dev/md2을 부여함.
    • /rdata5이라는 디렉터리로 마운트함.
  • 구성 후 확인해볼 사항
    • RAID-5  1개의 디스크를 패리티(Parity) 로 사용하므로, /rdata5 디렉터리의 용량이 약 4GB 인지 여부 검사
  • 참고
    • 4개의 디스크를 준비해서 3개의 디스크는 RAID-5 로 구성하고, 1개의 디스크는 여분(Spare) 디스크 로 구성해서 오류에 대처하기도 함.

 

 fdisk로 파티션 생성 및 속성 변경

  • fdisk /dev/sdb를 실행해서 RAID 속성의 파티션 3개를 구성한 후에 재부팅함.
  • 관련 절차
# fdisk /dev/sdb
/dev/sdb7, /dev/sdb8, /dev/sdb9

 

② 재부팅 후에 관련 장치 파일명 확인

# fdisk -l /dev/sdb
# cat /proc/partitions

 

 RAID 장치 생성

# mdadm -C /dev/md2 -l 5 -n 3 /dev/sdb7 /dev/sdb8 /dev/sdb9

 

④ 파일 시스템 생성

# mkfs.xfs /dev/md2

 

⑤ 마운트할 디렉터리 생성

# mkdir /rdata5

 

⑥ 마운트 실행

# mount -t xfs /dev/md2 /rdata5

 

 mount  df 명령으로 확인

# df -h

 

⑧ 시스템 재부팅 시에도 계속 사용하려면 /etc/fstab 파일에 등록

# vi /etc/fstab
/dev/md2            /rdata5         xfs     defaults    0   0

 

(4) RAID-6 구성하기

  • RAID-6 에서 최소 디스크 조건  4개이므로 4개의 파티션을 사용해서 구성함.
    • 4개의 파티션은 각각 2GB 씩 할당함.
    • 장치 파일명은 /dev/md3을 부여함.
    • /rdata6이라는 디렉터리로 마운트함.
  • 구성 후 확인해볼 사항
    • RAID-6  2개의 디스크를 패리티(Parity) 로 사용하므로, /rdata6 디렉터리의 용량이 약 4GB 인지 여부 검사

 

 fdisk로 파티션 생성 및 속성 변경

  • fdisk /dev/sdb를 실행해서 RAID 속성의 파티션 4개를 구성한 후에 재부팅함.
  • 관련 절차
# fdisk /dev/sdb
/dev/sdb10, /dev/sdb11, /dev/sdb12, /dev/sdb13

 

② 재부팅 후에 관련 장치 파일명 확인

# fdisk -l /dev/sdb
# cat /proc/partitions

 

 RAID 장치 생성

# mdadm -C /dev/md3 -l 6 -n 4 /dev/sdb10 /dev/sdb11 /dev/sdb12 /dev/sdb13

 

④ 파일 시스템 생성

# mkfs.xfs /dev/md3

 

⑤ 마운트할 디렉터리 생성

# mkdir /rdata6

 

⑥ 마운트 실행

# mount -t xfs /dev/md3 /rdata6

 

 mount  df 명령으로 확인

# df -h

 

⑧ 시스템 재부팅 시에도 계속 사용하려면 /etc/fstab 파일에 등록

# vi /etc/fstab
/dev/md3            /rdata6         xfs     defaults    0   0

 

 

(참고) RAID 상태 확인

더보기
  • RAID 관련 장치의 상태 정보는 /proc/mdstat에 저장됨.
  • 파티션 정보를 저장하는 /proc/partitions에서도 장치명과 용량을 확인할 수 있음.

(1) /proc/mdstat

# cat /proc/mdstat
Personalities : 
unused devices: <none>

 

(2) /proc/partitions

# cat /proc/mdstat
major minor  #blocks  name

   8        0   20971520 sda
   8        1    1048576 sda1
   8        2   19921920 sda2
  11        0    4601856 sr0
 253        0   17821696 dm-0
 253        1    2097152 dm-1

 

 

 

(참고) RAID 결함 허용 테스트

더보기
  • Striping 기술
    • RAID-0 의 기반 기술
    • 처리 속도를 높이기 위한 기술
    • 2개의 디스크 중 하나라도 오류가 발생하면 데이터가 손실됨.
  • Mirroring 기술
    • RAID-1 의 기반 기술
    • 2개의 디스크에 동일한 데이터를 모두 저장하는 방식
    • 오류 허용
      • RAID-1
        • 1개의 디스크 오류를 허용함.
      • RAID-6
        • 2차 패리티 로 구성해서 2개의 디스크 오류까지 허용함.

 

(1) RAID-1 동작 점검

  • mdadm -D /dev/md1 명령
    • /dev/md1에 대한 구성 정보를 확인할 수 있음.
  • 이 페이지에서는 /dev/sdb5와 /dev/sdb6으로 구성된 /dev/md1 장치를 /rdata1으로 마운트하였음.
  • /rdata1 디렉터리에 특정 파일을 복사하면, Mirroring 기술이 적용되기 때문에 /dev/sdb5와 /dev/sdb6 파티션 모두에 저장됨.
  • 특정 파일을 복사하고, 2개의 파티션 중 임의의 파티션에 오류를 발생시킨 후에 관련 정보 확인이 가능한지 점검함.

 

① 임의의 파일을 /rdata1에 복사 후 내용 확인

# cp /etc/passwd /rdata1
# ls /rdata1

 

 2개의 파티션 중, 임의의 파티션에 강제적 오류를 발생시킴.

# mdadm /dev/md1 -f /dev/sdb6

 

 RAID 장치 상태 확인

# mdadm -D /dev/md1
...

    Number    Major   Minor   RaidDevice State
        0       8       21          0    active sync      /dev/sdb5
        1       0        0          1    removed

        1       8       22          -    faulty           /dev/sdb6
  • /dev/sdb6의 상태가 faulty로 바뀐 것을 확인할 수 있음.

 

④ 파일 내용 확인

# ls /rdata1
# cat /rdata1/passwd

 

(2) RAID-5 동작 점검

  • mdadm -D /dev/md2 명령
    • /dev/md2에 대한 구성 정보를 확인할 수 있음.
  • 이 페이지에서는 /dev/sdb{7,8,9}로 구성된 /dev/md2 장치를 /rdata5으로 마운트하였음.
  • RAID-5  1개의 디스크를 패리티로 사용하기 때문에 1개의 디스크에 오류가 발생하더라도 데이터의 확인이 가능함.
  • 임의의 파티션 1개에 오류를 발생시키고, 데이터가 확인 가능한지를 점검함.

 

① 임의의 파일을 /rdata5에 복사 후 내용 확인

# cp /etc/passwd /rdata5
# ls /rdata5

 

 3개의 파티션 중, 임의의 파티션에 강제적 오류를 발생시킴.

# mdadm /dev/md2 -f /dev/sdb8

 

 RAID 장치 상태 확인

# mdadm -D /dev/md2
...

    Number    Major   Minor   RaidDevice State
        0       8       21          0    active sync      /dev/sdb7
        1       0        0          1    removed
        3       8       25          2    active sync      /dev/sdb9

        1       8       24          -    faulty           /dev/sdb8
  • /dev/sdb8의 상태가 faulty로 바뀐 것을 확인할 수 있음.

 

④ 파일 내용 확인

# ls /rdata5
# cat /rdata5/passwd

 

(3) RAID-6 동작 점검

  • mdadm -D /dev/md3 명령
    • /dev/md3에 대한 구성 정보를 확인할 수 있음.
  • 이 페이지에서는 /dev/sdb{10,11,12,13}로 구성된 /dev/md3 장치를 /rdata6으로 마운트하였음.
  • RAID-6  2개의 디스크를 패리티로 사용하기 때문에 2개의 디스크에 오류가 발생하더라도 데이터의 확인이 가능함.
  • 임의의 파티션 2개에 오류를 발생시키고, 데이터가 확인 가능한지를 점검함.

 

① 임의의 파일을 /rdata5에 복사 후 내용 확인

# cp /etc/passwd /rdata6
# ls /rdata6

 

 3개의 파티션 중, 임의의 파티션에 강제적 오류를 발생시킴.

# mdadm /dev/md3 -f /dev/sdb10 /dev/sdb13

 

 RAID 장치 상태 확인

# mdadm -D /dev/md3
...

    Number    Major   Minor   RaidDevice State
        1       0        0          1    removed
        1       8       27          1    active sync      /dev/sdb11
        2       8       28          2    active sync      /dev/sdb12
        3       0        0          3    removed

        0       8       26          -    faulty           /dev/sdb10
        0       8       29          -    faulty           /dev/sdb13
  • /dev/sdb{10,13}의 상태가 faulty로 바뀐 것을 확인할 수 있음.

 

④ 파일 내용 확인

# ls /rdata6
# cat /rdata6/passwd

 

 

(참고) RAID 오류 디스크 교체

더보기
  • RAID 를 사용하는 시스템의 디스크는 대부분 핫 스왑 베이(Hot Swap Bay) 형태로 전원을 끄지 않아도, 외부에서 손쉽게 디스크를 교체할 수 있음.
  • 결함이 허용되는 RAID 레벨
    • 오류가 발생한 디스크를 제거하고, 새로운 디스크를 장착하면 자동으로 복구가 됨.
  • 이 항목에서는 테스트한 RAID-5 의 예를 기반으로 디스크를 복구하는 절차를 수행함.

 

① 오류 발생 디스크 제거

# mdadm /dev/md2 -r /dev/sdb8

 

② 새로운 디스크 장착

# mdadm /dev/md2 -a /dev/sdb14          // /dev/sdb14 : 새로운 디스크

 

③ 상태 확인

# mdadm -D /dev/md2
...
Rebuild Status : 9% complete

          Name : www:2    (local to host www)
          UUID : 6b571fca:242f3923:12938fd1239:2319024e2
        Events : 48

    Number    Major   Minor   RaidDevice State
        0       8       23          0    active sync      /dev/sdb17
        4       8       30          1    spare rebuilding      /dev/sdb14
        3       8       25          2    active sync      /dev/sdb9
  • Rebuild Status 항목에서 진행 상황을 알 수 있음.
  • 해당 디스크의 State 항목에서는 spare rebuilding이라고 표시됨.
  • 진행이 완료될 경우
    • Rebuild Status 항목이 사라짐.
    • 해당 디스크의 State 항목도 active sync로 전환됨.
728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖