본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

디스크 관리, RAID

by YUNZEE 2025. 1. 27.
728x90
RAID( Redundant Array of Independent Disks )

- 여러 개의 하드디스크를 묶어서 성능 향상, 데이터 보호 또는 두가지 다 제공하는 기술

- 용량을 늘리거나, 데이터를 중복으로 저장시킴으로써 속도를 늘리거나 데이터를 안전하게 저장시킬 수 있는 디스크 관리 방식

 

두 가지 명령어 필요

- fdisk : 파티션을 관리.

- mdadm : Multi Disk ADMin , 레이드 명령어.

📌 RAID 0 = Striping(분산 저장), 속도 up(매우 빠름), 데이터 보호 ❌

- 하나의 디스크에 저장을 한다면 속도와 입출력 속도가 늦음, 공간 효율 그대로(100%)

- 나눠서 저장을 한다면 속도가 향상됨,그리고 데이터 입출력도 빠른 속도로 가능

- 단점은 하나의 디스크에 문제가 생기면 모든 데이터가 유실됨

 

📌 질문: 하나의 디스크에 만들어도 똑같은 문제가 발생하지 않나?

답변: 단일 디스크는 하나라고 생각하고 RAID 0은 300개라고 생각을 했을 때 뭐가 더 고장 날 가능성이 높을까 생각해 보자. 근데 300개 중 하나라도 고장 나면 전체 데이터 유실이 됨.

-> 즉, 단일 디스크는 그냥 하나만 사용하니까 당연히 고장 나면 데이터가 날아가는 거고, RAID 0은 여러 개의 디스크를 하나처럼 사용하니까 위험성이 더 커지는 거임

실습

[root@web ~]# yum -y install mdadm

os를 추가하기 위해서는 shut down

- 똑같이 2개 만들기

-  dev/sda 파티션들임

d: 파티션 삭제

l: 리스트

n:파티션 추가

p: 생성한 파티션 확인

w: 저장 후 종료

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아님 enter 했을 때 첫 번째 파티션으로 감)
First sector (2048-2097151, default 2048): 
# ( 2048-2097151 내가 갖고 있는 파티션 범위를 말함)



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): (enter)
First sector (2048-2097151, default 2048): (enter)
Using default value 2048
Last sector, +sectors or +size {K, M, G} (2048-2097151, default 2097151): (enter)
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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: 0x2c671ca8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2097151     1047552   83  Linux

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

Calling ioctl() to re-read partition table.
Syncing disks.


[root@web ~]# 

- 파티션 추가된 걸 확인할 수 있음

 

 

[root@web ~]# mdadm --create /dev/md0 이름 --level=0 Raid 0--raid-devices=2 장치 수 /dev/sdb1 /dev/sdc1 파티
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

-> 잘된 걸 확인할 수 있음

 

[root@web ~]# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: cannot open /dev/sdb1: Device or resource busy

-> 한번 더 입력하면 busy라고 나오니까 알아두삼

[root@client ~]# yum remove -y mdadm

- 혹시 디테일을 쳐도 아무것도 안뜨면 mdadm을 삭제했다가 다시 설치

파티셔닝

- 파티셔닝이 된 상태(/dev/sdb1)와 디스크(/dev/sdb)는 엄연히 다른 상태

- 하나의 물리적인 디스크를 여러 개의 논리적 파트로 나누는 과정임

- 이렇게 나누면 각 파티션을 독립적인 드라이브처럼 사용할 수 있음

💡 즉, 하나의 하드디스크를 여러 개의 작은 가상 디스크처럼 쪼개서 쓰는 것!

- 친절한 설명도 있음

-> 어떤 디스크나 장치, 파티션을 사용하려면 꼭 파일 시스템을 만들어줘야 함

 

[root@web ~]# mkdir /raid0
[root@web ~]# mount /dev/md0 /raid0

- 마운트

- 대소문자 미구분

 

[root@web ~]# cp anaconda-ks.cfg /raid0/

- 테스트를 위해 아무 파일이나

- 장치의 이름 'Hard Disk 3'이 때에 따라서 순서나 이름이 바뀔 수 있기 때문에 내가 지우고 싶은 장치 순번을 명확하게 확인하고 싶다면 advanced를 보면 됨.

 

- 3번째 디스크 삭제

 

- 다시 시작

- 평소랑 다르게 생성되는게 맞음 비번은 root 비번을 입력

- mdadm -D를 통해 디테일을 보면 state가 inactive

📌마운트도 안되고 당연히 데이터를 살릴 수 없음(RAID 0은 뭐다? 모든 데이터 유실 )

 

vi /etc/fstab

- 주석해야됨 그래야 이머전시 버전을 나갈 수 있

혹시라도 디스크를 추가해서 레이드를 재구성하면, 데이터를 살릴 수도 있으니까
전원을 종료 후 디스크를 한 개 추가해 보자.(vm 설정하고 넘어오기)

위에 파란색 상자 내용(중간에 오타 있음)

[root@web ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0

[root@web ~]# mdadm --add /dev/md0 /dev/sdc1
mdadm: error opening /dev/md0: No such file or directory


[root@web ~]# mdadm --run /dev/md0
mdadm: error opening /dev/md0: No such file or directory

-> 원래 문제가 있던 레이드디스크 였기 때문에 stop을 하는 순간 /dev/md0 자체가 사라져 버렸음 

📌 RAID 1 (Mirroring: 동일한 데이터 복사, 단독 보다 느림, 1개 고장 나면 복구 가능)

- 용량 효율: ❌ 50% (2TB + 2TB = 2TB 사용 가능, 나머지는 백업 용도)

- 사용 예시: 중요한 데이터 서버 (예: 금융, 의료)

- 읽기 속도는 두 배 정도 향상

💡 비유: 📂 시험 노트를 두 개 복사해두는 방식 (하나 잃어버려도 다른 한 개 있음)

 

실습

 

[root@client ~]# fdisk /dev/sdd

- 디스크 2개 더 추가 (하나만 했다가 하나 더 추가했음 그래서 내 거에는 sdd랑 sdd1은 있지만 sde는 없음. 그래서 지금 추가하겠음)

[root@client ~]# fdisk /dev/sde

- 추가된 걸 확인할 수 있음

 

[root@client ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

 

[root@client ~]# mdadm --detail /dev/md1

- 잘 만들어졌는지 확인

 

[root@client ~]# mkfs -t ext4 /dev/md1

- 파일시스템 생성

 

= 1GB, 효율 50%

 

[root@client ~]# cp ~/anaconda-ks.cfg /raid1

# 테스트 파일을 복사

 

[root@client ~]# vi /etc/fstab

# 부팅시에도 마운트 유지하도록.

 

(마지막 배열)5번째 디스크 삭제하고 다시 시작했을 때 아까처럼 이머전시 모드가 아닌 일반 모드로 잘 들어가 짐

- 마운트도 잘 되어있고, 데이터도 잘 살아있는 것을 확인 가능

- 잘 동작중이긴 하지만 완벽한 상태는 아님

 

- 서버 전원 종료 후 새로운 디스크를 한 개 추가한 다음 파티션을 잡아주자

[root@client ~]# fdisk /dev/sde

📌 RAID 5 (Striping + Parity(패리티 저장), 빠름, 1개 디스크 고장 복구 가능)

- 패리티비트란? 1 개수를 짝수나 홀수로 맞춤

- 용량 효율: (N-1)/N (예: 4개 디스크 효율 75% → 3개 분량 사용 가능), 효율이 미러링보다 높음

- 사용 예시: 중소기업 데이터 서버

💡 비유: 📂 책을 나눠 필사하면서, 한 명이 실수하면 다른 사람이 힌트를 줘서 다시 쓸 수 있게 하는 방식

 

실습

- 이번에는 4개 더 추가해서 총 9개 디스크 만들기

- 전원 종료 후 1GB 디스크 4개를 추가 후 부팅해 주자

fdisk /dev/sdi로 다 추가해 주기

mdadm --create /dev/md5 --level=5 --raid-devices=4 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1

[root@web ~]# mkdir /raid5
[root@web ~]# mount /dev/md5 /raid5

 

[root@web ~]# cp ~/anaconda-ks.cfg /raid5

 

[root@web ~]# mkdir /raid5
[root@web ~]# mount /dev/md5 /raid5
[root@web ~]# cp ~/anaconda-ks.cfg /raid5
[root@web ~]# vi /etc/fstab

 


[root@web ~]# init 0

- 9번째 디스크 삭제 후 부팅

 

 

- 복구는 아까 해본 적이 있으니까 패스하고, 디스크를 한 개 더 지워보자

- 이머전시 모드로 들어가는 걸 확인 가능함

- 다시 살릴 수 없음

- 목록에 없음

- mdadm --run을 해도 동작을 하지 않는다. (옵션에 명시된 장치 부족)

- 올바르게 코드를 작성했을 때도 이머전시 모드로 들어가는 경우가 있음. 그때 위의 명령어를 입력

 

전원 종료 후 디스크 2개 추가

 

파티션 잡은 후 VM에 mdadm --add를 해보세요

- 파티션 추가해야 하는 장치들

- 추가된 파티션

- 추가도 안되고

- stop후 실행도 안됨

- 결론적으로 reid5는 두 개의 디스크를 삭제하면 복구가 불가능함

 

📌 RAID 6 (Striping + Double Parity, raid 5보다 느림, 2개 디스크 고장 복구 가능)

- RAID 5보다 느림

- 디스크 1개 고장 시 복구 가능

- 용량 효율: (N-1)/N (예: 4개 디스크 → 3개 분량 사용 가능)

- 사용 예시: 중소기업 데이터 서버

💡 비유: 📂 책을 나눠 필사하면서, 한 명이 실수하면 다른 사람이 힌트를 줘서 다시 쓸 수 있게 하는 방식

실습) 1GB짜리 4개의 디스크(10~13, j k l m)를 추가 후 raid6을 구성한 다음 디스크를 두 개 삭제(11,13 삭제) 해도 데이터가 보존되는지 확인해 보세요

- fdisk /dev/sdj, k, m, l 각각 추가해 주기

- n p - - - p w

- 추가된 걸 확인할 수 있음

- raid6니까 level = 6으로 해야 됨

[root@client ~]# mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdj1 /dev/sdk1 /dev/sdl1 /dev/sdm1

- 레이드 생성

[root@client ~]# mkfs.ext4 /dev/md6

 [root@client ~]# mkdir /raid6

[root@client ~]# mount /dev/md6 /raid6

 

[root@client ~]# cp ~/anaconda-ks.cfg /raid6

[root@client ~]# vi /etc/fstab

- 잘된 걸 확인할 수 있음

- vm에서 두 개 삭제하고 다시 시작해 보면 이런 식으로 결과가 나오는 걸 확인할 수 있음

- 복구가 가능하다는 것

📌 RAID 10 ( RAID 1(성능) + RAID 0(안정), raid 0 수준 빠름 , 최소 1개 이상 고장 가능)

- RAID 0 수준으로 빠름

- 안정성: 최소 1개 이상 디스크 고장 가능 (RAID 1 사용)

- 용량 효율: 50%(RAID 적)

- 사용 예시: 중소기업 데이터 서버

- 레이드 조합 시에는 맨 마지막에 파일시스템을 구성함

💡 비유: 📂 책을 나눠 필사하면서, 각 페이지를 두 번씩 쓰는 방식 (속도+안정성)

실습
새로운 서버를 종료 후 디스크 4개를 추가한 후 파티션을 생성해 주자

[root@http ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

#sdb1과 sdc1을 묶어서 md1을 구성하자. 

 

[root@http ~]# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

#sdd1과 sde1을 묶어서 md2를 구성하자.

 

[root@http ~]# mdadm --create /dev/md10 --level=0 --raid-devices=2 /dev/md1 /dev/md2

#위에서 만든 md1과 md2를 갖고 새로운 레이드 0 장치를 구성한다.

 

잘못 만드신 분들은 --stop으로 삭제하고 다시 만드세요.

[root@http ~]# mdadm --stop /dev/md1

[root@http ~]# mkfs.ext4 /dev/md10

 

[root@http ~]# mkdir /raid10

[root@http ~]# mount /dev/md10 /raid10

[root@http ~]# cp ~/anaconda-ks.cfg /raid10

 

- 지울 수 있는 최대한의 디스크를 삭제 한 다음 정상 동작하는지 확인해 보자

 

- 이머전시 화면이 뜨지만 꼭 잘못된 건 아니고 설정만 확인해 보고 잘되어있으면 괜찮음

- 이머전시 모드로 들어가더라도 /dev/md10만 잘 살아 있다면 재 마운트를 하면 되므로 큰 문제는 없다.

- 내용은 다 잘 있기 때문에 괜찮음

 

실습

과제) stg1 , stg2을 만드세요!
stg1 은 nfs-client , stg2는 nfs-server입니다.

클라이언트는 엄청나게 안정적인 디스크 2GB를 원합니다.
따라서 서버관리자는 raid16으로 구성된 스토리지를 통해 nfs-server를 구성하기로 했다.
구성을 하신 다음 최대한 많은 디스크를 삭제하여 클라이언트가 만족할 수 있도록 하세요

제출할 내용
1. 최대 몇 개를 삭제할 수 있는지? /dev/md16의 자세한 정보
2. client와 server에서의 df -h 정보.

 

과제) stg1 , stg2을 만드세요!
stg1 은 nfs-client , stg2는 nfs-server입니다.
* 서버가 두 개 필요함

클라이언트는 엄청나게 안정적인 디스크 2GB를 원합니다.
* 다 날리고 총합으로 2GB가 남는 것을 의미함 

따라서 서버관리자는 raid16으로 구성된 스토리지를 통해 nfs-server를 구성하기로 했다.
* raid16 (1+6)
구성을 한 다음 최대한 많은 디스크를 삭제하여 클라이언트가 만족할 수 있도록 하세요.

 

이것저것 해주고

설치부터

yum -y install mdadm

 

fdisk /dev/sd~각각 추가해 주기

- n p - - - p w

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

mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1

mdadm --create /dev/md4 --level=1 --raid-devices=2 /dev/sdh1 /dev/sdi1

오류/해결

mdadm --create /dev/md16 --level=6 --raid-devices=2 /dev/md1 /dev/md2 /dev/md3 /dev/md4
mdadm: at least 4 raid-devices needed for level 6

-> raid-devices=2 / 4개인데 2개 했죠? 수정하고 해 주니까 잘됨

 

mdadm --create /dev/md16 --level=6 --raid-devices=4 /dev/md1 /dev/md2 /dev/md3 /dev/md4

[root@stg2 ~]# mkdir /raid16
[root@stg2 ~]# mount /dev/md16 /raid16
[root@stg2 ~]# cp ~/anaconda-ks.cfg /raid16
[root@stg2 ~]# vi /etc/fstab

이머전시 화면 나오는 방법

- inactive 확인해 보고 파란색 상자 입력하면 재부팅되면서 탈출

마지막으로 client와 server에서의 df -h 정보

-> NFS를 사용해서 원격지에 존재하는 파일을 마치 내 로컬 파일인 것처럼 사용가능 하도록 만들어줘야 됨

-> NFS를 구축해주기

 

client서버에 보안 설정 해주고

- 권한이 변경된 걸 확인해 주고

 

[root@stg2 ~]# yum install -y nfs-utils

- 설치

[root@stg2 ~]# vi /etc/exports

[root@stg2 ~]# exportfs -r

- 설정 값 반영

[root@stg2 ~]# systemctl restart nfs-server
[root@stg2 ~]# systemctl enable  nfs-server

[root@stg2 ~]# showmount -e

- 공유 여부 확인했으면 이제 client 서버로 넘어감

 

client서버에 설정할 것 해주고

yum install -y nfs-utils

- 설치

처음에 설정한 서버 주소 입력하면 client 서버에 잘 나타나는 걸 확인할 수 있음 

 

[root@stg1 ~]# mount -t nfs 211.183.3.70:raid16 /remote
[root@stg1 ~]# touch /remote/tt.txt
[root@stg1 ~]# echo 'end' > /remote/tt.txt
[root@stg1 ~]# cat /remote/tt.txt

- 마운트가 잘 되어 있는 걸 확인할 수 있음  

 

- client 서버

 

- server

참고

https://velog.io/@kyeun95/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8C%8C%ED%8B%B0%EC%85%94%EB%8B%9DPartitioning%EC%9D%B4%EB%9E%80

728x90