Linux 실습일지

Linux 실습일지(5) - Linux RAID

s-jiun 2023. 2. 1. 18:59
반응형
반응형
실습과제

 

실습과제로 Server(b)에 RAID 5를 구성해보았다. 해당 내용은 아래 링크를 통해 들어가보면 확인할 수 있다.

https://devlog-j.tistory.com/10

 

리눅스에 RAID 구성하기 (RAID 5)

RAID 5를 선택한 이유 RAID는 여러 개의 하드디스크를 하나의 하드디스크처럼 사용할 수 있도록 해준다. 이번 실습 시간에는 리눅스에 Linear RAID, RAID0, RAID1, RAID5를 구성해보고 각각의 차이를 비교해

devlog-j.tistory.com

 

 

새로 배운 내용

 

이번 수업시간에는 리눅스의 파일 시스템과 하드디스크의 구성 요소(플래터/섹터/자기 헤드/스윙 암), 디스크 관리에 대해 배웠다.

하드디스크를 관리하는 방법에는 SATA 와 SCSI가 있는데, SATA의 경우 하드디스크/광학 드라이브와 데이터 전송 목적으로 만들어진 컴퓨터 버스이고 SCSI는 컴퓨터에 기기를 직렬 방식으로 연결하기 위한 표준이다. VMware는 기본적으로 CD, DVD는 SATA로 연결하고 하드디스크는 SCSI로 연결한다(물론 다른 방식으로 연결할 수도 있다).

첫번째 실습으로는 리눅스 Server에 하드디스크를 하나 추가해보는 실습을 진행하였다.

우선 VMware Sever의 Edit virtual machine settings에서 SCSI방식의 1GB짜리 하드디스크를 single file로 생성해준다. 이를 수행하고 나서 Server의 터미널로 접속한 뒤, fdisk 명령어를 입력하여 새로이 생성된 sdb 하드디스크에 대한 파티션을 생성해준다.

하드디스크의 파티션은 Primary, Extended, Logical의 3가지 종류가 있는데, 여기서는 Primary 파티션으로 설정하였다. w를 눌러 저장해준 뒤 mkfs -t ext4 /dev/sdb1을 입력하여 sdb1 파일시스템을 포맷해주었다. 여기서 ext4란 파일시스템의 종류를 의미하고 sdb1은 방금 생성한 파티션이다.

이후 mydata라는 디렉토리를 생성해준 후 /boot/vmlinuz 파일을 mydata의 test1 파일로 복사해주었다.

다음으로 mydata에 sdb1을 마운트해주면 아래와 같이 나타나게 된다.

위 사진을 보면 sdb1이 마운트 된 후 test1 파일이 보이지 않는다는 것을 확인할 수 있다. 하지만 이는 test1 파일이 사라진 것이 아니고, mydata에 sdb1이 마운트 되면서 잠시 숨어 있게 된 것으로 이해하면 된다. 이후에 test2 파일을 생성했을 때, test2는 sdb1에 바로 저장되므로 화면 상에 나타나는 것이다. 다음으로 Server를 구동할 때마다 sdb1이 mydata에 자동으로 마운트될 수 있도록 설정해주었다. 우선 nano로 /etc/fstab 파일을 열어 다음 문장을 추가해준다.

/dev/sdb1    /mytdata    ext4    defaults    0    0

이를 저장한 후, Server를 재부팅하고 ls -l /mydata를 입력하면 mydata에 sdb1이 정상적으로 마운트 되어있음을 확인할 수 있다.

다음으로는 여러 개의 하드디스크를 하나의 하드디스크처럼 사용할 수 있도록 RAID를 구성하는 실습을 진행하였다. RAID는 기본적으로 Linear RAID, RAID0 부터 RAID5까지로 나누어 볼 수 있다. 이 중 Linear RAID, RAIID0, RAID1, RAID5, RAID6에 대해 간단히 정리해보면, Linear RAID의 경우 2개의 하드디스크가 있을 때 첫 번째 하드디스크를 모두 사용하고 난 후 두번째 하드디스크에 데이터를 저장하는 방식이다.

반면 RAID0의 경우 2개의 하드디스크가 존재할 때 데이터를 반으로 나누어 '동시에' 각각의 하드디스크에 저장하는 방식으로, 데이터 저장 속도가 Linear RAID에 비해 2배 정도 빨라진다는 장점이 있다. 이러한 저장 방식을 Stripping 이라고 한다.

다음으로 RAID1의 경우 하드디스크가 2개 있을 때 데이터를 복사하여 각각의 하드디스크에 동일한 데이터를 저장한다. 때문에 용량 효율은 좋지 못하지만, 데이터 하나를 복사(Mirroring)해놓으므로 하드디스크 하나가 고장나더라도 데이터를 복구하여 사용할 수 있다는 장점이 있다. 이를 '결함 허용을 제공한다'고 한다.

RAID5의 경우 패리티 데이터를 사용하여 데이터를 복구할 수 있도록 하는 방식으로, RAID1에 비해 공간 효율이 좋다. 이는 곧 RAID5가 결함 허용을 제공하는 동시에 공간 효율도 잡은 RAID 방식임을 의미한다. 하지만 앞서 나온 RAID 방식들은 2개 이상의 하드디스크만 있어도 구성이 가능하지만 RAID5를 구성하기 위해서는 최소한 3개 이상의 하드디스크가 필요하다.

마지막으로 RAID6는 RAID5의 확장판으로 이해할 수 있다. RAID6는 RAID5와 달리 중복 페리티 데이터를 이용하는데, 이것의 장점은 하드디스크 2개가 동시에 고장나도 데이터를 복구할 수 있다는 것이다. 앞서 말한 RAID5의 경우 1개의 하드디스크가 고장났을 경우에만 데이터 복구가 가능하고, 2개 이상의 하드디스크가 동시에 고장날 경우 데이터를 복구할 수 없게 된다. RAID6이 경우 페리티 데이터를 2개 저장하므로, 하드디스크가 최소한 4개 이상 존재해야 구성할 수 있다.

RAID를 구성하는 과정은 앞서 첨부한 실습과제 링크를 타고 가면 확인할 수 있다. 실습과제에서는 RAID5만 구성했지만, 나머지 RAID 방식들도 구성하는 과정이 이와 거의 유사하므로 따로 구성 과정을 첨부하지는 않겠다.

마지막으로 RAID에 문제가 발샹하였을 때 이를 복구하는 과정을 실습하였다. 우선 각각의 RAID에 testFile을 생성하고, VMware Server의 Edit virtual machine settings에서 SCSI 0:2, SCSI 0:4, SCSI 0:6, SCSI 0:9에 연결된 하드디스크를 삭제하여 고의로 RAID에 문제를 발생시켜 보았다. 하드디스크들을 삭제한 후 Server의 터미널에서 df명령어를 입력하면 아래와 같이 생성했던 raid들이 연결되지 않은 것을 확인할 수 있다.

raid1을 동작시킨 후 확인해보니 하드디스크 하나가 제거된 상태임을 알 수 있다.

하지만 raid1의 경우 RAID1 방식이므로 데이터의 복사본이 하나 저장되어 있다. 따라서 /dev/md1을 raid1에 다시 마운트를 해보면 아래와 같이 testFile이 복구된 것을 확인할 수 있다.

동일한 방식으로 raid5의 testFile도 다시 복구할 수 있다.

하지만 Linear RAID 방식인 md9과 RAID0방식인 md0는 구동 자체가 되지 않음을 확인할 수 있다.

우선 md0와 md9의 동작을 멈춰준 후 /etc/fstab으로 가서 두 파일시스템에 대한 내용을 주석 처리해준다. 이를 저장한 후 Server를 종료하고, 다시 하드디스크를 생성해준다. 그리고 다시 Server에 접속한 뒤 새로 생성한 하드디스크의 파티션을 생성한 후, mdadm 명령어로 md9과 md0의 RAID를 다시 구성해준다.

그러면 아래와 같이 md9과 md0가 다시 정상적으로 구동하는 것을 확인할 수 있다.

앞서 md1과 md5에서도 하드디스크 한 개가 연결되지 않은 상태이므로, 두 개의 RAID에 대해서도 하드디스크를 추가해주어야 한다. 이때 add 명령어를 사용하며, 작업한 결과는 다음과 같다.

마지막으로 mdadm의 버그를 해결하기 위해 4개의 RAID의 ARRAY 내용을 madam --detail --scan에서 읽어와 텍스트 파일로 저장한 뒤 이를 /etc/mdadm/mdadm.conf에 삽입하고 중간의 name=server:번호를 지워주면 된다. 재부팅하기 전에 update-initramfs -u를 통해 설정한 내용을 적용시켜주는 것을 잊지 말자. 재부팅 후 ls 명령어를 입력해보면 raidLinear, raid0, raid1, raid5가 모두 정상적으로 연결되어 있는 것을 확인할 수 있으며, 모두 testFile이 잘 살아있는 것을 확인할 수 있다.

위의 사진은 대표적으로 raidLinear만을 보인 것이다. 한 가지 특이한 점은 raid0에도 testFile이 살아있다는 점인데, 이는 testFile의 크기가 워낙 작아서 testFile이 둘로 나눠지지 않고 바로 저장되어 그런 것 같다.

 

 

문제가 발생하거나 고민한 내용 + 해결 과정

 

이번에는 실습을 진행하면서 힘들었던 부분이 두 번 발생했다. 우선 첫 번째는 4개의 RAID의 ARRAY 내용을 madam --detail --scan에서 읽어와 텍스트 파일로 저장한 뒤 이를 /etc/mdadm/mdadm.conf에 삽입하는 과정에서 발생하였다. 처음에 nano 편집기를 사용하여 ARRAY 내용을 잘라내어 /etc/mdadm/mdadm.conf에 붙여넣으려고 했는데, 아무리 마우스로 드래그를 하고 잘라내어도 첫 번째 라인만 잘라내어지고 나머지는 그대로 있는 상황이 반복되었다. 그래서 구글링을 해서 원인을 찾아보니, nano 편집기에서 Ctrl + k는 '라인 잘라내기' 기능이라 커서가 위치한 라인만 삭제된다는 것을 알게 되었다. 그래서 좀 더 찾아보니 Ctrl + ^로 블럭을 설정한 뒤 Ctrl + k로 잘라내면 한꺼번에 잘라낼 수 있다는 것을 알 수 있었고 그대로 시행해보니 문제 없이 잘라졌다. 하지만 정작 붙여넣으려고 보니 이전 파일을 저장하지 않고 그대로 닫아 잘라내기가 무효화 되었는지 붙여지지가 않았다. 그래서 강의를 이어서 계속 보니 교수님께서 파일을 삽입하시는 것을 볼 수 있었고 Ctrl + r을 눌러 ARRAY 내용들이 저장된 파일을 삽입하였다. 그래도 nano 편집기에 대해서 좀 더 알 수 있었던 시간이었으니 헛된 시간이었다고 생각하지 않는다.

두 번째로 힘들었던 순간은 실습과제를 하는 과정에서 발생하였는데, RAID5를 생성하고 이를 Server(b)가 구동될 때 자동으로 마운트되도록 설정하는 과정에서 내가 과정을 자꾸 건너뛰고 바로 재부팅을 해버려서 문제가 발생하였다. 처음에는 /etc/mdadm/mdadm.conf에 md5의 ARRAY 내용을 붙여넣고는 name=server-b:5를 지우지 않아 재부팅 후에도 md5가 연결되지 않았고, 두번째로는 update-initramfs -u를 하지 않은 채 재부팅을 하여 재부팅 후에도 md5가 연결되지 않았다. 처음 오류가 났을 때는 어디서 잘못된건지를 몰라 당황했는데, 차분히 교재를 찾아보니 내가 무엇을 빼먹었는지 알 수 있었다.

 

참고할 만한 내용

 

아래 링크는 내가 nano 편집기를 사용하면서 어려움이 발생했을 때 찾아본 것이다.

리눅스 nano 편집기 단축키 : 네이버 블로그 (naver.com)

 

리눅스 nano 편집기 단축키

nano 편집기 실행 및 기본서너줄의 간단한 테스트 파일을 만들기 위해서 ‘echo’ 명령어를 사용할 수 있습...

blog.naver.com

 

회고

 

이번 실습은 이전 수업과 비교했을 때 실습 분량이 엄청 많은 것도 아니었는데 수업을 듣는 내내 머릿속이 정리가 안되고 복잡한 기분이었다. 나중에 후반부에 가서는 내가 만든 파일이 뭐가 뭔지 헷갈려서 수업을 이해하는 데 어려움이 있었다. 그래서 수업을 잠시 멈추고 RAID에 관한 내용을 다시 한 번 읽어본 후 내가 만든 raid가 각각 무엇인지 정리해보았더니 이해가 되기 시작했다. 이후 실습 과제를 하면서 RAID를 구성하는 과정 또한 머릿속으로 정리해 볼 수 있었다. 아무래도 4가지의 RAID를 한꺼번에 생성하고 지웠다가 다시 연결하고 이러는 과정을 반복하다보니 머릿속에서 내용이 엉켰던 것 같다. 수업 내용이 이해가 되지 않을 때는 이렇게 한 번씩 내용을 환기하고 다시 수업을 듣는 것도 좋은 방법인 것 같다.

반응형