본문 바로가기

Operating Systems/Linux

[ Linux ] RAID 활용 ( 2 / 2 ) - Ubuntu20

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

1. RAID0 / RAID1 / RAID5 생성

apt-get -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

sed -i "s/^ARRAY \/dev\/md.*//g" /etc/mdadm/mdadm.conf

sed -i "/^$/d" /etc/mdadm/mdadm.conf

# 디스크가 고장난후 재부팅시 RAID 디스크 명이 변경되는 버그가 있어 RAID 디스크 명을 고정
echo ARRAY /dev/md0 UUID=`mdadm --detail /dev/md0 | grep UUID | awk '{print $3}'` >> /etc/mdadm/mdadm.conf

echo ARRAY /dev/md1 UUID=`mdadm --detail /dev/md1 | grep UUID | awk '{print $3}'` >> /etc/mdadm/mdadm.conf

echo ARRAY /dev/md5 UUID=`mdadm --detail /dev/md5 | grep UUID | awk '{print $3}'` >> /etc/mdadm/mdadm.conf

update-initramfs -u

# 시스템 종료
shutdown -h now

Hard Disk 2, 4, 6 삭제
확인 후 부팅

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

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

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

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

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

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

# 기존 자동 마운팅 정보 삭제
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

# 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

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

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

# sdb, sdd, sdf 파티션이 없는 것 확인
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

sfdisk -d /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

echo -e "y\n" | 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

echo -e "y\n" | 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

echo -e "y\n" | mkfs.ext4 /dev/md1

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

echo -e "y\n" | 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 ] PXE 서버 설치 [ 임시 작성 ]  (0) 2021.10.21
[ Linux ] PROXY 서버 설치  (0) 2021.10.20
[ Linux ] RAID 활용 ( 1 / 2 ) - CentOS7  (0) 2021.10.18
[ Linux ] SAMBA 서버 설치  (0) 2021.10.16
[ Linux ] FTP 서버 설치  (0) 2021.10.15