Profile picture

[Linux] 리눅스 RAID 개념 및 구성하기

JaehyoJJAng2023년 06월 18일

◾️ RAID를 쓰는 이유

서버를 운영함에 있어서 서버 관리자가 겪게 되는 제일 큰 고충은 하드디스크 장애로 인한 데이터 유실일 것이다.

하드디스크는 평생 가는 부품이 아니다. 소모품이기에 언제든 고장날 수 있고, 특히 input/output이 많은 서버에서는 하드디스크의 고장이 잦을 확률이 높다.

데이터는 절대적으로 손실이 되서는 안되는 중요한 자산이기에 백업이 절대적으로 필수적이다.

뿐만 아니라, 여분의 디스크가 생겨 서버에 용량을 증설하려고 할 때 데이터 손실 없이 클린하게 서버 용량을 증설해야 하는 경우가 생길 수 있다.

그래서 서버 관리자는 RAID 구성을 통해 하드디스크의 가용성을 높이고 서버 데이터의 안정성을 확보하기 위해 여러 노력을 해야한다.


◾️ RAID

RAID는 Redundant Array of Inexpensive Disks의 약자이다. 여러 개의 디스크를 배열하여 속도의 증대, 안정성의 증대, 효율성, 가용성의 증대를 높이는데 쓰이는 기술이다.


RAID의 장점

  1. 운용 가용성, 데이터의 안정성 증대
  2. 디스크 용량 증설 용이
  3. 디스크 I/O 성능 향상

📌 패리티(Parity)는 무엇인가?
1. 정수의 홀수 또는 짝수 특성
2. 정보 블록과 연결된 중복 정보, Parity는 오류 발생 시 데이터를 재구축하는데 사용되는 계산된 값이다.


|RAID||장치명|-- level|--raid-device (minimum)| |-----|-----|--------|-----------------------| |RAID 0|/dev/md0|0|2| |RAID 1|/dev/md1|1|2| |RAID 5|/dev/md5|5|3| |RAID 6|/dev/md6|6|4| |RAID 10(1+0)|/dev/md10|10|4|

[장치명은 RAID명을 나타내기 위한 예시이므로 다른 이름을 사용해도 무방]


▪️ RAID 0

RAID 0에는 Concatenate 방식과 Stripe 방식 두 가지 방식이 존재한다.


• Concatenate

  • 두 개 이상의 디스크에 데이터를 순차적으로 쓰는 방법

image


  • 장점
    • 디스크 기본 공간 부족 시 데이터는 보존하며 여분의 디스크를 볼륨에 포함하여 용량 증설 가능
  • 단점
    • RAID 0의 특성 상 디스크 중 어떤 디스크 하나에 장애 발생 시 전체 데이터 복구가 매우 어렵고, parity(오류검출기능)를 지원하지 않는다.
  • 용량
    • 모든 디스크의 용량을 합친 용량 (200GB disk * 2ea = 400GB)

• Stripe

  • 흔히 RAID 0이라고 하면 Stripe 방식을 뜻함.

스트라이핑(stripe or striping) 이라고 불리는 RAID 0 방식은
두 개 이상의 디스크에 데이터를 랜덤하게 쓰는 방법이다.
image


  • 장점
    • 데이터를 사용할 때 I/O를 디스크 수 만큼 분할하여 쓰기 때문에 I/O 성능이 향상됨.
    • I/O Controller나 I/O Board 등 I/O를 담당하는 장치가 별도로 장착된 경우 더 큰 I/O 성능 향상을 기대할 수 있음.
  • 단점
    • RAID 0의 특성 상 디스크 중 어떤 디스크 하나에 장애 발생 시 전체 데이터 복구가 매우 어렵고, parity(오류검출기능)를 지원하지 않는다.
  • 용량
    • 모든 디스크의 용량을 합친 용량 (200GB disk * 2ea = 400GB)

▪️ RAID 1

미러링 이라고 불리는 RAID 1은 두 개 이상의 하드디스크를 이용해 저장하는 데이터를 다른 한쪽에도 똑같이 복사해 저장하는 방법이다
image


  • 장점
    • 볼륨 내 디스크 중 하나의 디스크만 정상이더라도 데이터는 보존되어 운영이 가능하기 때문에 가용성이 높다.
    • 복원이 비교적 매우 간단하다.
  • 단점
    • 용량이 절반(50%)으로 줄고, 쓰기 속도가 느려짐.
  • 용량
    • 모든 디스크의 절반(50%)의 용량 (200GB * 2ea = 200GB)

▪️ RAID 2

RAID 2는 데이터 저장용 디스크와 복구용 디스크를 나누어 저장한다. 이 때 데이터 저장시 RAID 0와 같은 스트라이핑 방식을 사용하며 데이터 복구에는 해밍 코드를 통해 데이터 복구를 수행함
image
하지만 RAID 4의 등장으로 RAID 2는 사용하지 않는다


▪️ RAID 3,4

RAID 3,4는 RAID 0,1의 문제점을 보완하기 위해 등장한 것으로 3,4로 구분되어 있지만 둘의 구성은 비슷하다.
데이터의 저장은 RAID 0와 같이 스트라이핑으로 수행하고 추가적으로 에러체크 및 복구를 위한 parity 정보를 별도의 디스크에 따로 저장한다
image
3,4의 차이점은 3의 경우 byte 단위로 데이터를 저장하고 4는 block 단위로 데이터를 저장한다는 차이를 가진다. block 단위로 데이터 저장 시 데이터의 크기가 작은 파일은 한 번의 작업으로 데이터를 읽을 수 있기 때문에 성능상의 장점이 있고 3은 동기화 과정을 거처야 하기 때문에 3보다는 4을 더 많이 사용한다

또한 RAID 3은 적어도 3개 이상의 하드디스크가 필요한 반면, RAID 4는 2개 이상의 하드디스크만 있으면 구성이 가능하다


▪️ RAID 5

RAID 5는 3,4의 단점을 보완한 방식으로 가장 많이 사용되는 방식 중 하나이다. parity 정보를 한 디스크에 몰아서 저장하는 것이 아닌 모든 디스크에 분산하여 저장한다. 따라서 3개 이상의 디스크를 필요로 하며 RAID 3, RAID 4에서 패리티를 저장하는 디스크와 정보를 저장하는 디스크 1개가 동시에 망가질경우 데이터 복구가 불가능하다는 단점을 5에서는 보완하였다
image


  • 장점
    • RAID 3,4에서 별도의 패리티 정보 디스크를 사용함으로써 발생하는 문제점 보완
    • 패리티 정보를 stripe로 구성된 디스크 내에서 처리
    • 1개의 하드가 고장나더라도 남은 하드들을 통해 데이터 복구

▪️ RAID 6

RAID 6는 5와 같은 개념으로 사용하지만 parity 정보를 하나 더 넣어 여러 하드에 문제가 생겨도 데이터 복구를 가능하게 하여 안정성에 더욱 신경 쓴 방법이다.
image
데이터가 스트라이핑으로 저장되기 때문에 0+1이나 1+0 보다 성능과 신뢰성이 좋지만 2차 parity 정보를 저장하면서
읽기 성능은 5와 비슷해졌고 데이터를 쓰는 경우 작업의 구현이 매우 복잡해지기 때문에 일반적으로 잘 사용이 되지는 않고있다.


▪️ RAID 0+1

RAID 0+1 은 0과 1을 동시에 구현한 방식이다. 먼저 스트라이핑한 디스크를 생성 후 스트라이핑 한 디스크들을 미러링 방식으로 묶어서 구현
image
RAID 0의 장점인 속도 증가와 RAID 1의 데이터 백업을 동시에 지원함


▪️ RAID 1+0

0+1과는 거꾸로 RAID 1을 사용해 미러링으로 구성. 그리고 미러링으로 구성된 디스크들을 스트라이핑을 통해 묶는 방식을 수행
image
0+1과 1+0은 같은 동작을 하는 것 처럼 보여 두 RAID 간 무슨 차이점이 있는지 의아함이 생길 수 있다.
물론 둘은 최종적으로 생성되는 디스크의 용량과 속도가 같지만 디스크의 안정성과 디스크의 복구 성능에서 차이가 발생한다.


안정성 측면

RAID 01은 디스크 0과 2가 동시에 망가질 경우 모든 디스크가 먹통이되지만 10은 0 과2가 동시에 망가져도 전체 디스크가 동작하는데 문제가 없다. 물론 10도 디스크 0과 1이 동시에 망가진다면 전체 디스크가 깨지지만 전체 디스크가 망가질 확률이 01보다 적으므로 안정성 측면에서 RAID 10이 좀더 좋다고 할 수 있다.


복구 측면

망가진 디스크의 복구과정 에서 01의 경우 디스크 0번이 망가진 경우 0번 디스크를 교체한후 재구성하게 되면 디스크 2, 3번으로 구성된 RAID 0 전체가 복사되지만 RAID 10의 경우 0번 디스크를 교체했다면 1번 디스크에서 복사를 하게되어 리소스의 비용이 훨씩 적게들어 시간이 단축된다.


◾️ RAID 구성하기

▪️ 선처리 작업

우선 리눅스에서 RAID를 구성하기 위해 fdisk 명령어를 통해 파티션의 설정을 바꾸어 주어야 한다

$ fdisk -l /dev/sdb

...
Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4194303 4192256   2G 83 Linux

한 개의 단일파티션을 생성했을 경우 'Linux' 라는 단순방식으로 파티션 타입이 설정되어 있다


해당 설정을 변경하기 전에,
fdisk /dev/sdb에서 l을 눌러 확인하면 다양한 파일시스템 유형을 지원하는 것을 확인할 수 있다
그 중 fd(Linux Raid Auto) 방식을 사용하도록 파티션 타입을 'fd'로 변경해보자.

$ fdisk /dev/sdb

Command (m for help): l

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

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

Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xbb1e8d68

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4194303 4192256   2G fd Linux raid autodetect

t 커맨드를 이용하여 파티션의 유형을 변경할 수 있고 raid 구성을 위해 필요한 linux raid auto가 hex 코드 fd를 지니고 있으므로 fd를 입력하면 유형을 변경할 수 있다

선처리 작업이 필요한 이유는 하드디스크 제일 앞부분에 raid로 구성된다는 metadata가 들어있어야 하기 때문에 정보공간 확보를 위해 파일시스템 유형을 미리 바꿔주어야 한다


▪️ mdadm 명령어

  • RAID 구성에 필요한 'mdadm' 명령어에 대해 잠시 알아가보자

해당 명령어는 raid를 구성할 수 있게 해주는 명령어이다. 파티션에 해당 디스크는 raid로 구성할 것이라고 미리 알려주는 메타데이터를 입력하는 과정을 수행 했으므로 이제 mdadm 명령어를 이용해 디스크들을 raid로 묶어주면 된다

$ mdadm --create {장치명} --level={레이드 번호} --raid-devices={구성할 파티션 개수} {구성 파티션 리스트}
$ mdadm --create /dev/raid0 --level=0 --reiad-devices=2 /dev/sdb1 /dev/sdc1

생성

옵션 설명
--create RAID 생성
--level RAID 레벨 설정 0,1,5,6 을 거의 사용함
--raid-devices RAID로 묶을 HDD의 개수

확인

옵션 설명
mdadm --detail --scan RAID 정보 디테일하게 출력
mdadm -Ds 모든 RAID
mdadm -D RAID명 특정 RAID 정보 자세히 확인

추가

옵션 설명
mdadm --add RAID명 디바이스1 디바이스2 ... 장치를 추가하는 명령어로 복구시 망가진 디스크를 빼고 동일 raid에 새로운 하드 추가할 때 사용

정지/재구동

옵션 설명
mdadm --stop raid 장치명 구성되어 있는 RAID 멈춤
mdadm --run raid 장치명 멈춰진 RAID 기동

▪️ RAID 1 구성

  • 미러링 방식을 사용하는 raid 1 구성해보기

구성표

RAID 파티션명 장치명 RAID level 묶을 raid 디바이스 수
RAID 1 /dev/sdb1,/dev/sdc1 /dev/md1 1 2

raid로 묶고자 하는 디스크(sdb1,sdc1) 정보 확인하기

$ fdisk -l /dev/sd{b,c}

Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xbb1e8d68

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4194303 4192256   2G 83 Linux


Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfa32fda1

Device     Boot Start     End Sectors  Size Id Type
/dev/sdc1        2048 2097151 2095104 1023M fd Linux raid autodetect

raid 1으로 구성하기 위해 필요한 2개 디스크의 파티션 작업을 완료한 뒤 mdadm 명령어를 통해 2개의 하드를 raid 1 구성으로 묶어주도록 하자

$ mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

sdb1 , sdc1 파티션을 묶어 RAID level1 로 구성하고 생성되는 raid 장치의 이름은 /dev/md1 로 생성하겠다 라는 걸로 해석이 되겠다
mdadm을 통해 raid를 구성하면 2개의 디스크가 하나로 묶여 /dev/md1 이라는 새로운 하드디스크가 생성된 것이므로 이전에 하드디스크를 사용하기 위한 과정과 동일하게 수행하면 된다 (파일시스템 포맷)


/dev/md1 이 정상적으로 생성되었는지 확인해보자

$ mdadm --detail /dev/md1

/dev/md1:
           Version : 1.2
     Creation Time : Thu Jul 20 16:00:07 2023
        Raid Level : raid1
        Array Size : 1045504 (1021.00 MiB 1070.60 MB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Thu Jul 20 16:04:09 2023
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : c8d8aeb5:c2ea4dfc:6f0591c9:4ca38322
            Events : 17

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

# /proc/mdstat 에서도 RAID가 적용되었는지 확인이 가능하다
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb1[1] sdc1[0]
      1046528 blocks super 1.2 [2/2] [UU]

raid는 파티션을 나눈 뒤 생성하므로 파티션 설정은 이미 생성되어 있는 것과 같고 이제 해당 디스크에 데이터를 저장할 수 있도록 mkfs 명령어를 통해 파일시스템을 포맷/생성 해주도록 하자

$ mkfs.ext4 /dev/md1

OR

$ mkfs -t ext4 /dev/md1

마지막으로 raid로 구성된 디스크에 접근할 수 있도록 마운트 포인트를 생성하도록 하자

$ mkdir /mnt/md1

/mnt/md1 raid 디스크를 /mnt/md1 에 마운트 해보자

$ mount /dev/md1 /mnt/md1

마운트가 정상적으로 되었는지 확인해보자

$ lsblk | grep 'md1'

  └─md1   9:1    0 1021M  0 raid1 /mnt/md1
  └─md1   9:1    0 1021M  0 raid1 /mnt/md1

▪️ RAID 1+0 구성

RAID 1과 0을 혼합하여 구성하는 RIAD 1+0도 단일 구성과 차이점이 거의 없다. 굳이 차이점을 쓰라고 한다면 mdadm을 통해 RAID로 묶는 과정이 추가되는 것 뿐이다.


구성표

RAID 파티션명 장치명 RAID level 묶을 raid 디바이스 수
RAID 0 /dev/sdb1,/dev/sdc1 /dev/md0 0 2
RAID 1 /dev/sdd1,/dev/sde1 /dev/md1 1 2

4개의 디스크를 raid 1으로 구성한다

HDD1 -- raid1 /dev/md0 --
HDD2 -- raid1 /dev/md0 --

-> 각 raid 1으로 구성된 2개의 raid 장치를 다시 raid 0으로 묶으면 RAID 1+0 구성이 완성된다.

HDD3 -- raid1 /dev/md1 --
HDD4 -- raid1 /dev/md1 --


우선 2개의 RAID1을 생성하도록 하자. 이때 해당 raid는 0으로 묶이는 일반 디스크와 같은 역할이므로 파일시스템을 생성하는 작업은 불필요하다

$ mdadm -C /dev/md0 -l 1 -n 2 /dev/sd{b,c}1
$ mdadm -C /dev/md1 -l 1 -n 2 /dev/sd{d,e}1

mdadm 명령을 통해 raid 1으로 생성된 2개의 장치(md1,md2)를 일반 디스크로 raid를 구성할 때와 같이 raid 0으로 설정하여 묶으면 생성한 /dev/md10은 raid 1+0으로 구성되게 된다.

$ mdadm -C /dev/md10 -l 0 -n 2 /dev/md{0..1}

이제 만든 /dev/md10의 파일시스템을 생성해주고 마운트하여 사용하면 끝이다.

하지만 /etc/fstab에 등록하고 재부팅을 해도 md10이 남아있지 않는다.
이 때 mdadm -A /dev/md10 /dev/md0 /dev/md1로 (-A,Assemble) 재조립 시키면 다시 복구가 가능하다. 그리고 다시 마운트 시키면 기존에 존재하던 파일도 그대로 남아있는 걸 확인할 수 있을거다.

그렇다면 위와 같은 오류는 왜 발생한걸까? 이유는 기본 RAID 방식 0 ~ 6 까지는 재부팅 이후에도 RAID 구성이 유지되지만, RAID 0+1 / RAID 1+0 과 같이 혼합한 방식은 RAID가 풀리는 경우가 생긴다.


위와 같은 일을 없게 하려면 mdadm -Ds의 정보를 /etc/mdadm.conf 라는 파일에 저장하면 조립된 결과를 기억하고 있어 레이드 구성이 사라지지 않는다.

$ mdadm -Ds > /etc/mdadm.conf

▪️ RAID 5 구성

구성표

RAID 파티션명 장치명 RAID level 묶을 raid 디바이스 수
RAID1 /dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1
/dev/md1 5 4

raid로 묶고자하는 디스크(/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1) 정보 확인하기

$ fdisk -l /dev/sd{b,c,d,e}

image


raid 5으로 구성하기 전에 서버에 장착한 4개의 디스크의 파티션 작업을 완료한 뒤, mdadm 명령어를 통해 4개의 디스크를 RAID 5 구성으로 묶어주도록 하자.

$ mdadm --create /dev/md1 --level=5 --raid-devices=4 /dev/sd{b,c,d,e}1

sdb1, sdc1, sdd1, sde1 파티션을 묶어서 RAID 5로 구성하고 RAID 장치의 이름은 /dev/md1로 생성함.


위처럼 mdadm을 통해 RAID를 구성하면 4개의 디스크가 하나로 묶여 /dev/md1이라는 새로운 디스크가 생성된 것이므로, 해당 디스크(/dev/md1) 또한 파일 시스템을 포맷한 후 마운트하여 사용하면 된다.


RAID 5(/dev/md1)가 정상적으로 생성되었는지 확인하자.

$ mdadm --detail /dev/md1

image


RAID는 파티션을 나눈 뒤에 생성하므로 파티션 설정은 이미 생성되어 있는 것과 동일하다.
이제 해당 디스크(/dev/md1)에 데이터를 저장할 수 있도록 mkfs 명령어를 통해 파일 시스템을 포맷/생성 해주도록 하자.

$ mkfs.ext4 /dev/md1

# OR

$ mkfs -t ext4 /dev/md1

마지막으로 RAID로 구성된 디스크에 접근이 가능하도록 마운트 포인트를 생성해주도록 하자.

$ mkdir /mnt/md1

이제 해당 마운트 포인트로 /dev/md1를 마운트 시키자.

$ mount /dev/md1 /mnt/md1

마운트가 정상적으로 되었는지 확인

$ df -h | grep 'md1'
/dev/md1         30G   24K   28G   1% /mnt/md1

$ lsblk | grep -A 9 'sdb'
sdb       8:16   0   10G  0 disk
└─sdb1    8:17   0   10G  0 part
  └─md1   9:1    0   30G  0 raid5 /mnt/md1
sdc       8:32   0   10G  0 disk
└─sdc1    8:33   0   10G  0 part
  └─md1   9:1    0   30G  0 raid5 /mnt/md1
sdd       8:48   0   10G  0 disk
└─sdd1    8:49   0   10G  0 part
  └─md1   9:1    0   30G  0 raid5 /mnt/md1
sde       8:64   0   10G  0 disk
└─sde1    8:65   0   10G  0 part

◾️ /etc/fstab 등록

서버가 시작될 때마다 마운트되도록 설정하려면
/etc/fstab 파일을 수정하여 위에서 생성한 RAID 파티션을 자동으로 마운트하도록 지정해야 한다.

/etc/fstab 파일은 파일 시스템 테이블을 정의하는 파일로, 시스템 부팅 시에 자동으로 마운트할 파일 시스템을 지정하는데 사용된다.

여기서는 RAID 5 구성에서 생성했었던 /dev/md5 파티션을 /etc/fstab 파일에 추가해볼거다.


1. UUID 확인
각 파티션의 UUID(Universally Unique Identifier)를 확인

sudo blkid /dev/md5

/dev/md5: UUID="9bbfb9fe-94fa-483e-800a-e054ac25358d" BLOCK_SIZE="4096" TYPE="ext4"

2. fstab 파일 수정
/etc/fstab 파일을 편집기로 실행

vim /etc/fstab

3. 새로운 마운트 지점 추가
파일의 맨 아래에 새로운 파티션 추가

UUID=9bbfb9fe-94fa-483e-800a-e054ac25358d /my-datas ext4  defaults  0 2

◾️ 문제 발생 테스트

RAID 구성

RAID 파티션명 장치명 RAID level 묶을 raid 디바이스 수
RAID 0 /dev/sdb1,/dev/sdc1 /dev/md0 0 2
RAID 1 /dev/sdd1,/dev/sde1 /dev/md1 1 2

image
RAID 레벨별 테스트를 위해 RAID 0과 RAID 1 두개의 레이드를 생성하였다. RAID 0은 1G 디스크 2개를 모두 저장소로 사용하기 때문에 전체 크기가 2G로 출력되고 있고, RAID 1은 하나는 데이터 백업을 위한 저장소로 사용되므로 사이즈가 1G로만 나오는 것을 확인할 수 있다.


디스크에 문제 상황을 일으키기 전에 각 장치의 마운트 포인트에 파일과 디렉토리를 생성해놓도록 하자.

$ mkdir /mnt/md{0..1}/test && touch /mnt/md{0..1}/test.txt

그리고 각각의 RAID를 구성하고 있는 디스크 중 1개씩을 제거해 보았다.
image

raid를 구성하고 있는 HDD 이외의 장비가 제거되어 raid를 구성하고 있는 HDD의 이름이 sdb 등으로 이름으로 바뀌더라도 raid는 그대로 유지가 된다. 하지만 level 0는 결함허용이 되지 않기 때문에 raid를 구성하는 HDD중 하나가 사라지면 데이터 복구가 불가능하기 떄문에 해당 하드를 지우면 데이터를 찾을수 없는걸 확인할 수 있었다.

반면에 raid 1은 하드가 하나 사라지더라도 데이터가 그대로 남아있는것을 확인할 수 있다.

또한 복구를 위해 mdadm --add /dev/md1 /dev/sdd1 이라는 명령을 사용하면 하드를 하나 추가해서 raid1을 복구할 수 있게된다.


Loading script...