본문 바로가기

Operating Systems/Linux

[ Linux ] RAID 활용 ( 1 / 2 ) - CentOS7

실습을 위해 5GB 하드 일곱개를 생성

RAID(Redundant Array of Inexpensive Disks)

여러개의 디스크를 묶어 하나의 디스크 처럼 사용하는 기술

RAID의 구성 방식에 따른 성능, 용량, 기능이 차이가 있음

 

Linear RAID : 모든 디스크를 사용하여 순차적으로 저장됨, 디스크가 고장되면 복구할 수 없음
RAID0 : 모든 디스크에 빠른 성능으로 동시에 저장됨, 디스크가 한대라도 고장되면 복구할 수 없음

RAID1 : 미러링 기능, 데이터 저장에 두 배의 용량이 필요

RAID5 : '디스크 갯수 - 1'의 저장공간을 사용, 패리티 비트를 사용하여 한대의 디스크는 고장이 나도 복구할 수 있음

RAID6 : '디스크 갯수 - 2'의 저장공간을 사용, 짝수 패리티 비트, 홀수 패리티 비트를 사용하여 두대의 디스크는

           고장이나도 복구할 수 있음

RAID1+0 : RAID1으로 만들어진 파티션 두개를 RAID0로 묶어사용

RAID0+1 : RAID0으로 만들어진 파티션 두개를 RAID1로 묶어사용

 

1. RAID0 / RAID1 / RAID5 생성

# yum -y install mdadm

# 현재 디스크 및 파티션 보기 명령어
fdisk -l

# 하드디스크 지정하여 보기
fdisk -l /dev/sda

# 경로를 통한 파티션 정보 확인
ls -la /dev/sd*

# sdb raid 파일타입으로 파티션 생성
# fdisk /dev/sdb
# p : 파티션 정보 확인
# n : 파티션 생성
# n->p : 파티션 번호 지정 
# n->p->1 : 파티션 번호 1번으로 지정
# t : 파티션 파일타입 변경
# t->fd : raid file type
# w : 저장후 종료
fdisk /dev/sdb <<LVM_SETTING
p
n
p
1
2048

t
fd
w
LVM_SETTING

# dump 생성 help 확인
sfdisk --help | grep '\-d'

# dump 생성
sfdisk -d /dev/sdb > /tmp/sdb.dmp

# 생성 dump 확인
cat /tmp/sdb.dmp

# dump 파일 적용
sfdisk --force /dev/sdc < /tmp/sdb.dmp

sfdisk --force /dev/sdd < /tmp/sdb.dmp

sfdisk --force /dev/sde < /tmp/sdb.dmp

sfdisk --force /dev/sdf < /tmp/sdb.dmp

sfdisk --force /dev/sdg < /tmp/sdb.dmp

sfdisk --force /dev/sdh < /tmp/sdb.dmp

# 현재 디스크 및 파티션 보기 명령어
fdisk -l

# raid 0 생성
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

# raid 0 생성 확인 1
mdadm --detail /dev/md0

# raid 0 생성 확인 2
cat /proc/mdstat

# raid 0 디스크 파일 포멧 ext4로 변경
mkfs.ext4 /dev/md0

# mount 할 폴더 생성
mkdir /data0

# raid 0 디스크 mount
mount /dev/md0 /data0

# mount 확인
df -Th | grep "^/dev/md"

# mount 시 생성되는 복구 및 점검 파일 [ lost+found ] 생성 확인
ls -la /data0

echo -e "y\n" | mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

# Resync Status 100%로 완전 동기화 될때까지 대기
until [ 0 -eq `mdadm --detail /dev/md1 | grep -c "Status"` ]; do mdadm --detail /dev/md1 | grep "Status"; sleep 1; done

# 생성 확인
cat /proc/mdstat

# 포멧팅
mkfs.ext4 /dev/md1

# mount 할 폴더 생성
mkdir /data1

# raid 1 디스크 mount
mount /dev/md1 /data1

# 마운트 내용 확인
df -Th | grep "^/dev/md"

# mount 시 생성되는 복구 및 점검 파일 [ lost+found ] 생성 확인
ls -la /data1

# raid 5 생성
mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdf1 /dev/sdg1 /dev/sdh1

# Rebuild Status 100%로 완전 동기화 될때까지 대기
until [ 0 -eq `mdadm --detail /dev/md5 | grep -c "Status"` ]; do mdadm --detail /dev/md5 | grep "Status"; sleep 1; done

# 포멧팅
mkfs.ext4 /dev/md5

# mount 할 폴더 생성
mkdir /data5

# raid 5 디스크 mount
mount /dev/md5 /data5

# 마운트 내용 확인
df -Th | grep "^/dev/md"

# 기존 자동 마운팅 정보 삭제
sed -i "s/^\/dev\/md.*//g" /etc/fstab

sed -i "/^$/d" /etc/fstab

cat <<"RAID_SETTING" >> /etc/fstab
/dev/md0                /data0                  ext4    defaults        0 0
/dev/md1                /data1                  ext4    defaults        0 0
/dev/md5                /data5                  ext4    defaults        0 0
RAID_SETTING

# mount 확인
# 오타 등의 문제로 오류가 발생할 경우 재부팅시 리눅스 접속이 안될 수 있음
# reboot 를 통해 mount 유지 확인
mount -a

 

2. RAID0 / RAID1 / RAID5 장애 복구

# harddisk를 제거후 raid 폴더 파일 내용이 유지 확인을 위해 
# 용량이 큰 파일을 각 레이드 폴더에 붙여넣기
cp /boot/vmlinuz-* /data0

cp /boot/vmlinuz-* /data1

cp /boot/vmlinuz-* /data5

# 복사 확인
ls /data0 /data1 /data5

# 시스템 종료
shutdown -h now

 

Hard Disk 2, 4, 6 삭제
확인 후 부팅
부팅 시 /etc/fstab 의 마운팅 중 하드가 제거로 인한 에러 발생으로 부팅되지 않음 ( 재부팅 )
GNOME 화면에서 e 버튼을 클릭하여 편집모드로 변경
r\o → r\w, rhgb quiet → init=/bin/bash 로 변경
[ Ctrl + x ] 버튼으로 편집 모드 종료 ( 싱글 모드로 부팅됨)
RAID 디스크 mount 주석 처리 후 재부팅

# 기존 자동 마운팅 정보 삭제
sed -i "s/^\/dev\/md.*//g" /etc/fstab
sed -i "s/^#\/dev\/md.*//g" /etc/fstab

sed -i "/^$/d" /etc/fstab

cat <<"RAID_SETTING" >> /etc/fstab
/dev/md0                /data0                  ext4    defaults        0 0
/dev/md1                /data1                  ext4    defaults        0 0
/dev/md5                /data5                  ext4    defaults        0 0
RAID_SETTING

# mount 에러가 나는 것을 확인
mount -a

sed -i "s/^\/dev\/md.*//g" /etc/fstab

sed -i "/^$/d" /etc/fstab

cat <<"RAID_SETTING" >> /etc/fstab
# /dev/md0                /data0                  ext4    defaults        0 0
/dev/md1                /data1                  ext4    defaults        0 0
/dev/md5                /data5                  ext4    defaults        0 0
RAID_SETTING

# RAID0 주석 처리 후 mount 에러가 나지 않는 것을 확인
mount -a

# 폴더에 기존 파일이 존재하는 것을 확인
ls -l /data1 /data5

# 기존 자동 마운팅 정보 삭제
sed -i "s/^\/dev\/md.*//g" /etc/fstab
sed -i "s/^#\/dev\/md.*//g" /etc/fstab

sed -i "/^$/d" /etc/fstab

mount -a

umount /data1 /data5

# 파티션이 inactive 상태인 것 확인
mdadm --detail /dev/md0

# 동작 테스트시 수행되지 않음
mdadm --run /dev/md0

# 디스크 하나가 제거되었지만 active 상태인 것 확인
mdadm --detail /dev/md1

# 동작 테스트가 잘 수행되는 것 확인
mdadm --run /dev/md1

# 디스크 하나가 제거되었지만 active 상태인 것 확인
mdadm --detail /dev/md5

# 동작 테스트가 잘 수행되는 것 확인
mdadm --run /dev/md5

# 디스크 복구를 위해 시스템 종료
shutdown -h now

 

5GB 하드디스크 3개 추가 후 재부팅

# sdb, sdd, sdf 파티션이 없는 것 확인
ls -la /dev/sd*

# 새 하드디스크 RAID 파티션 생성
sfdisk --force /dev/sdb < /tmp/sdb.dmp

sfdisk --force /dev/sdd < /tmp/sdb.dmp

sfdisk --force /dev/sdf < /tmp/sdb.dmp

# disk 추가 확인
fdisk -l

# RAID1 디스크 추가
mdadm /dev/md1 --add /dev/sdb1

# 디스크 동기화 상태 확인
until [ 0 -eq `mdadm --detail /dev/md1 | grep -c "Status"` ]; do mdadm --detail /dev/md1 | grep "Status"; sleep 1; done

# RAID5 디스크 추가
mdadm /dev/md5 --add /dev/sdf1

# 디스크 동기화 상태 확인
until [ 0 -eq `mdadm --detail /dev/md5 | grep -c "Status"` ]; do mdadm --detail /dev/md5 | grep "Status"; sleep 1; done

# 기존 마운트 정보 삭제
sed -i "s/^\/dev\/md.*//g" /etc/fstab

sed -i "/^$/d" /etc/fstab

# RAID1, RAID5 재시작시 마운트 정보 추가
cat <<"RAID_SETTING" >> /etc/fstab
/dev/md1                /data1                  ext4    defaults        0 0
/dev/md5                /data5                  ext4    defaults        0 0
RAID_SETTING

# 마운트 오류 검사 및 마운트 처리 수행
mount -a

# mount 확인
df -Th | grep "^/dev/md"

ls -l /data1 /data5

 

3. RAID0 / RAID1 / RAID5 제거

# 기존 마운트 정보 삭제
sed -i "s/^\/dev\/md.*//g" /etc/fstab

sed -i "/^$/d" /etc/fstab

# mount 문법 오류 체크
mount -a

# mount list 확인
mount | grep md

# 마운트 해제
# unmount시 busy가 뜰 경우 [ fuser -ck /dev/md5 ] 명령어를 통해 강제 종료
umount /dev/md1
umount /dev/md5

# 디스크 파티션 설정 확인
fdisk -l | grep md

# inactive 에 대한 파티션 사용 중지시 [ --misc 옵션 ]을 주어야 중지 가능
mdadm --misc --stop /dev/md0

# RAID 파티션 중지 
mdadm --stop /dev/md1

# RAID 파티션 중지 
mdadm --stop /dev/md5

# 디스크 확인
fdisk -l | grep -v sda | grep sd

# raid 상태 확인
cat /proc/mdstat

# raid 종속 파티션 제거
mdadm --zero-superblock /dev/sdb1

mdadm --zero-superblock /dev/sdc1

mdadm --zero-superblock /dev/sdd1

mdadm --zero-superblock /dev/sde1

mdadm --zero-superblock /dev/sdf1

 

4. RAID6 생성 및 제거

# raid6 파티션 생성
mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 구성 확인
mdadm --detail /dev/md6

mkfs.ext4 /dev/md6

mkdir /data6

mount /dev/md6 /data6

df -Th | grep "^/dev/md"

# raid6 파티션 삭제
umount /dev/md6

# 디스크 파티션 설정 확인
fdisk -l | grep md

# RAID 파티션 중지 
mdadm --stop /dev/md6

# raid 상태 확인
cat /proc/mdstat

# raid 종속 파티션 제거
mdadm --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

 

5. RAID1+0 생성 및 제거

echo -e "y\n" | mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

until [ 0 -eq `mdadm --detail /dev/md1 | grep -c "Status"` ]; do mdadm --detail /dev/md1 | grep "Status"; sleep 1; done

mkfs.ext4 /dev/md1

echo -e "y\n" | mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

until [ 0 -eq `mdadm --detail /dev/md2 | grep -c "Status"` ]; do mdadm --detail /dev/md2 | grep "Status"; sleep 1; done

mkfs.ext4 /dev/md2

echo -e "y\n" | mdadm --create /dev/md10 --level=0 --raid-devices=2 /dev/md1 /dev/md2

mkfs.ext4 /dev/md10

mkdir /data10

mount /dev/md10 /data10

df -Th | grep "^/dev/md"

# raid10 파티션 삭제
umount /dev/md10

# 디스크 파티션 설정 확인
fdisk -l | grep md

# RAID 파티션 중지 
mdadm --stop /dev/md10

mdadm --stop /dev/md1

mdadm --stop /dev/md2

# raid 상태 확인
cat /proc/mdstat

# raid 종속 파티션 제거
mdadm --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

 

6. RAID0+1 생성 및 제거

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

mkfs.ext4 /dev/md1

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

mkfs.ext4 /dev/md2

echo -e "y\n" | mdadm --create /dev/md9 --level=1 --raid-devices=2 /dev/md1 /dev/md2

until [ 0 -eq `mdadm --detail /dev/md9 | grep -c "Status"` ]; do mdadm --detail /dev/md9 | grep "Status"; sleep 1; done

mkfs.ext4 /dev/md9

mkdir /data01

mount /dev/md9 /data01

df -Th | grep "^/dev/md"

# raid01 파티션 삭제
umount /dev/md9

# 디스크 파티션 설정 확인
fdisk -l | grep md

# RAID 파티션 중지 
mdadm --stop /dev/md9

mdadm --stop /dev/md1

mdadm --stop /dev/md2

# raid 상태 확인
cat /proc/mdstat

# raid 종속 파티션 제거
mdadm --zero-superblock /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

 

7. Linear RAID 생성 및 제거

mdadm --create /dev/md8 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1

# 버그로 인해 이전 생성했던 레이드가 생성될경우 제거
mdadm --detail --scan

mkfs.ext4 /dev/md8

mdadm --detail /dev/md8

mkdir /data00

mount /dev/md8 /data00

df -Th | grep "^/dev/md"

# linear raid 파티션 삭제
umount /dev/md8

# 디스크 파티션 설정 확인
fdisk -l | grep md

# RAID 파티션 중지 
mdadm --stop /dev/md8

# raid 상태 확인
cat /proc/mdstat

# raid 종속 파티션 제거
mdadm --zero-superblock /dev/sdb1 /dev/sdc1

 

'Operating Systems > Linux' 카테고리의 다른 글

[ Linux ] PROXY 서버 설치  (0) 2021.10.20
[ Linux ] RAID 활용 ( 2 / 2 ) - Ubuntu20  (0) 2021.10.18
[ Linux ] SAMBA 서버 설치  (0) 2021.10.16
[ Linux ] FTP 서버 설치  (0) 2021.10.15
[ Linux ] TFTP 서버 설치  (0) 2021.10.15