RAID 구성+복구 실습 -> Window+LinuxINFRA/Linux2024. 6. 27. 23:58
Table of Contents
RAID (Redundant Array of Inexpensive Disk)
- 저장장치 여러 개를 묶어 고용량, 고성능인 저장 장치 한 개와 같은 효과를 얻음
- 여러 개의 Disk를 하나의 가상 Disk로 구성
RAID 구성 (Window 2003)
1. HDD 추가
2. 디스크 초기화 : HDD라고 인식시켜줌
3. 동적 디스크로 변환
단순 볼륨 E:\
스팬 F:\
- 1개 이상의 동적 디스크에 있는 공간을 하나의 논리적 볼륨으로 만든다.
- RAID 아님 → 성능 향상, 오류 복구 기능 X
- E드라이브 1기가 F드라이브 3기가인 상태
- ex) 1.5기가 파일을 저장하면 1기가는 E 드라이브에, 나머지 500메가는 F 드라이브에 저장함. 이때 F 드라이브에 고장이 발생하면 해당 파일을 열 수 없으며, 스팬 볼륨은 데이터 복구를 지원하지 않음
- 즉 여러 디스크에 분산된 공간을 하나의 논리적 볼륨으로 합친 것 → 이는 단순히 용량을 늘리는 것 뿐
RAID 0 == 스트라이프(분산저장) G:\
- 최소 2개 이상의 동적 디스크에 데이터를 저장
- 디스크 1에는 A, 디스크 2에는 B, 디스크 3에는 C와 같이 데이터 분산 저장
- 번갈아가며 분산 저장되기 때문에 용량이 동일한 디스크에만 묶인다.
- 단순 볼륨 E랑, 분산 저장 G에 ABCD저장되어있을때 동시에 ABCD 열려고 하면 분산 저장해둔게 더 빨리뜸
왜냐면 G의 HDD는 각각 AC DB 두글자만 읽으면되는데 E에서는 ABCD 다 읽어야되서 - 단순 볼륨 E:와, 분산 저장 G에 ABC라는 데이터가 저장되어 있을 경우 동시에 ABCD를 열려고 할 때 분산 저장된 G:가 더 빨리 접근된다. 이는 G:의 각각의 HDD가 각각 A B C 한글자만 읽으면 되기 때문
E:는 ABC 다 읽어야 한다. → 분산저장 장점 : 단순, 스팬 볼륨보다 엑세스 속도가 빨라진다. == 성능향상
RAID1 ==미러링 H:\
- 2개의 동적 디스크에 사용자 데이터를 복제 → 오류복구O, 데이터 손실 방지
- H:\ 2개 생성됨 근데 용량이 2GB가 아니고 1GB임 왜냐면 미러링이기 때문
디스크1에도 ABCD적히고 디스크2에도 ABCD적힘 - H:\ 2개 생성되었지만 각 드라이브의 용량이 2GB가 아닌 1GB인 이유는 미러링 구성 때문이다.
즉, 디스크 1과 디스크 2에 동일한 데이터가 저장됨
- 단점
- 하드디스크 낭비 심함 ex) 1테라바이트의 하드디스크를 2개 미러링한다면 사용 가능한 용량은 1테라바이트뿐 → HDD용량 절반밖에 쓸 수 없음
- 성능 향상 X
RAID 5 I:\
- 데이터를 3개 이상의 동적디스크에 스트라이프로 저장한다.
- 데이터의 일부를 손실한 경우 데이터를 복구할 수 있다.
- 첫번째 디스크에 A,C 두번째에 B,D라는 실제 데이터 적고 세번째에 P 실제 데이터 아닌 패리티값을 적는다.
- 패리티실제 데이터 컴퓨터에서 저장된 값
디스크1 가 0 디스크2 나 1 디스크3 P 가,나 XOR연산값 : 1 - 두 비트를 XOR해서 나온값 같으면 0 다르면 1 → 실제 데이터 아님 오류복구하려는 값
- 여기서 디스크2내용 날아가도 패리티 값으로 유추가능
- 디스크 3개를 RAID로 묶으면 총 용량은 3GB이지만, 패리티 값 1GB를 제외해야 하므로 실제 사용 가능한 용량은 2GB (디스크 4개를 묶으면 디스크 1개가 패리티 정보로 사용되어 실제 저장 용량은 3/4)
RAID 상세 설명
- RAID 0
- 성능은 좋지만 오류 복구X
- RAID 1
- 소프트웨어 미러링은 데이터 낭비가 심하기 때문에 주로 OS에서 사용
- RAID 5
- 두 개 이상의 하드디스크가 손상되면 데이터 복구 불가능
- 따라서, 실제로는 RAID 0+1 또는 RAID 1+5 구성을 많이 사용
- RAID 1+5 : 실전에서 많이 사용
- 높은 가용성: RAID 1 미러링을 통해 하나의 디스크가 고장 났을 때도 데이터 손실 없이 시스템을 계속 사용
- 향상된 데이터 무결성: RAID 5의 분산된 패리티 체계를 통해 하나 이상의 디스크가 고장 났을 때도 데이터를 복구
- RAID 1+0 : 가용성을 위해 사용
- 높은 가용성: RAID 1 미러링
- 향상된 성능: RAID 0 스트라이핑을 통해 여러 디스크에 데이터를 분산하여 읽기 및 쓰기 성능을 향상
- RAID 6 : 네 개 이상의 하드디스크에서 사용되며, 두 개 이상의 패리티 값이 저장
RAID 복구
1. a.txt 모든 디스크에 추가함
2. 하드디스크 하나가 고장났다고 가정하고 삭제했다.
- 그 결과, 단순볼륨 E: 스팬 F: RAID 0 G: 사라지고 미러 H: , RAID 5 I: 만 존재한다.
→ 미러, RAID 5만 오류 복구된다는 것을 알 수 있음.
3. 미러 복구 : 복구를 위해 하드디스크 하나 추가
- 복구를 하지 않아도 데이터 접근은 가능하지만, 하드디스크 하나가 손상되었기 때문에 미러가 아닌 단순 볼륨 상태이다. 가용성을 위해 미러를 복구해주어야함.
4. RAID 5 복구
RAID Linux 실습
RAID 0
- mdadm : Software RAID 관리 명령--create Raid 장치 생성 --detail 장치 상세 정보
--stop 중지 --scan 검색 --level 종류 설정 -a, -r, -f Disk 추가, 삭제, 실패상태로 표시
--패키지 설치되었는지 확인
[root@localhost ~]# rpm -qa | grep mdadm
mdadm-4.2-2.el9.x86_64
- 동일한 용량을 갖는 다수의 파티션 생성(RAID 타입)
- fdisk /dev/sdb -> n -> p -> 1 -> enter -> +1G -> t -> fd -> p -> wq
- fdisk /dev/sdc -> n -> p -> 1 -> enter -> +1G -> t -> fd -> p -> wq
--HDD 4개 추가 후 확인
root@localhost ~]# fdisk -l
--파티션 생성 -> 리눅스 RAID 타입으로 변경
Partition number (1, default 1): 1
Hex code or alias (type L to list all): fd
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 2099199 2097152 1G fd Linux raid autodetect
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2099199 2097152 1G fd Linux raid autodetect
2. RAID 0 레벨의 RAID 구성
- mdadm --create /dev/md0 --level=[RAID레벨] --raid-devices=[RAID 구성 수] [장치1] [장치2]
[root@localhost ~]# 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.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc1[1] sdb1[0]
2093056 blocks super 1.2 512k chunks
unused devices: <none>
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 31 17:10:08 2024
Raid Level : raid0
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Fri May 31 17:10:08 2024
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Layout : original
Chunk Size : 512K
Consistency Policy : none
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : d74423ff:d47d4790:666768a7:cb829ad3
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3. RAID 장치 포맷
[root@localhost ~]# mkfs -t xfs /dev/md0
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0 isize=512 agcount=8, agsize=65408 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=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=16384, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
4.RAID 장치 마운트
[root@localhost ~]# mkdir /test_raid0
[root@localhost ~]# mount /dev/md0 /test_raid0
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 872M 0 872M 0% /dev/shm
tmpfs 349M 7.1M 342M 3% /run
/dev/mapper/rl-root 39G 4.6G 34G 12% /
/dev/sda1 1014M 373M 642M 37% /boot
/dev/mapper/rl-home 19G 171M 19G 1% /home
tmpfs 175M 100K 175M 1% /run/user/0
/dev/sr0 7.9G 7.9G 0 100% /run/media/root/Rocky-9-0-x86_64-dvd
/dev/md0 2.0G 47M 1.9G 3% /test_raid0
5. 4는 재부팅시 사라지니 자동마운트
-- RAID 자동구성
[root@localhost ~]# mdadm --detail --scan >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=d74423ff:d47d4790:666768a7:cb829ad3
--마지막 줄에 마운트 정보 추가
[root@localhost ~]# vim /etc/fstab
6. 확인
[root@localhost ~]# tail -3 /etc/fstab
/dev/mapper/rl-home /home xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
/dev/md0 /test_raid0 xfs defaults 0 0
RAID-5
- RAID-0 마운트 해제 및 구성 중지
[root@localhost ~]# umount /test_raid0
[root@localhost ~]# mdadm --stop /dev/md0
mdadm: Value "localhost.localdomain:0" cannot be set as name. Reason: Not POSIX compatible. Value ignored.
mdadm: stopped /dev/md0
2. - 1G 크기의 /dev/sdd1 파티션 생성 후 진행
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 2099199 2097152 1G 83 Linux
3. RAID-5 레벨의 RAID 구성
[root@localhost ~]# mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: Value "localhost.localdomain:0" cannot be set as name. Reason: Not POSIX compatible. Value ignored.
mdadm: /dev/sdb1 appears to be part of a raid array:
level=raid0 devices=2 ctime=Fri May 31 17:10:08 2024
mdadm: /dev/sdc1 appears to be part of a raid array:
level=raid0 devices=2 ctime=Fri May 31 17:10:08 2024
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
4.구성 확인
[root@localhost ~]# mdadm --detail /dev/md5
mdadm: Value "localhost.localdomain:0" cannot be set as name. Reason: Not POSIX compatible. Value ignored.
/dev/md5:
Version : 1.2
Creation Time : Fri May 31 17:28:17 2024
Raid Level : raid5
Array Size : 2093056 (2044.00 MiB 2143.29 MB)
Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Fri May 31 17:28:22 2024
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : localhost.localdomain:5 (local to host localhost.localdomain)
UUID : 3dd2676b:66ff80d3:27b53cf2:63129ffa
Events : 18
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 49 2 active sync /dev/sdd1
5.RAID 장치 포맷
[root@localhost ~]# mkfs -t xfs /dev/md5
mkfs.xfs: /dev/md5 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
6.RAID 장치 마운트
[root@localhost ~]# mkdir /raid5
[root@localhost ~]# mount /dev/md5 /raid5
mount: /raid5: wrong fs type, bad option, bad superblock on /dev/md5, missing codepage or helper program, or other error.
--에러 발생해서 강제로 xfs 포맷 수행 후 진행
[root@localhost ~]# mkfs -t xfs -f /dev/md5
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md5 isize=512 agcount=8, agsize=65408 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=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=16384, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
RAID-5 장애구성
- 1G 크기의 /dev/sde1 파티션 생성 후 진행
Device Boot Start End Sectors Size Id Type
/dev/sde1 2048 2099199 2097152 1G 83 Linux
2. spare 파티션 sde1 추가
[root@localhost ~]# mdadm /dev/md5 -a /dev/sde1
mdadm: Value "localhost.localdomain:0" cannot be set as name. Reason: Not POSIX compatible. Value ignored.
mdadm: added /dev/sde1
--RAID-5 장치 정보 확인
[root@localhost ~]# mdadm --detail /dev/md5
mdadm: Value "localhost.localdomain:0" cannot be set as name. Reason: Not POSIX compatible. Value ignored.
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 49 2 active sync /dev/sdd1
4 8 65 - spare /dev/sde1
3.장애디스크 결함 설정
--장애 디스크 디바이스에 결함이 있음을 설정
[root@localhost ~]# mdadm /dev/md5 -f /dev/sdc1
--확인
[root@localhost ~]# mdadm --detail /dev/md5
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
4 8 65 1 active sync /dev/sde1
3 8 49 2 active sync /dev/sdd1
1 8 33 - faulty /dev/sdc1
4.장애디스크 삭제
--장애 디스크 삭제
[root@localhost ~]# mdadm /dev/md5 -r /dev/sdc1
--확인
[root@localhost ~]# mdadm --detail /dev/md5
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
4 8 65 1 active sync /dev/sde1
3 8 49 2 active sync /dev/sdd1
5. 결론
- RAID-5 에서 디스크 장애가 발생했을 때 스페어 디스크를 사용하여 데이터 손실 없이 시스템을 유지할 수 있음
- 장애 처리 전 RAID 상태
- /dev/sdc1, /dev/sdb1, /dev/sdd1이 활성 상태이며, /dev/sde1은 스페어로 대기 중
- 결함 설정 후
- /dev/sdc1이 실패(faulty)로 표시되고, /dev/sde1이 활성 상태로 전환
- 장애 디스크 제거 후
- /dev/sde1이 /dev/sdc1을 대체하여 RAID-5 정상 작동
'INFRA > Linux' 카테고리의 다른 글
Linux 프로세스 관리 (0) | 2024.06.28 |
---|---|
Linux 디스크 관리 (0) | 2024.06.28 |
Linux 소유권, 허가권, 특수 권한 (0) | 2024.06.27 |
Linux 계정 관리 (0) | 2024.06.27 |
Linux Software 관리 (0) | 2024.06.27 |