[RPi] RAID 볼륨 구성

Yoonseung Choi
7 min readMay 9, 2020

--

Rapbian OS를 설치하고, 놀리는 USB 포트를 활용하자

라즈베리파이를 보면 쓸데없이(?) 포트가 네 개나 있다. 여기에 USB 메모리들을 꽂아 RAID 구성을 할 수 있을 듯 하고, 그러면 성능이 얼마나 나올지도 궁금여, 본 글을 남기게 되었다.

  • Raspberry Pi 3b + Raspbian lite (Debian buster) OS
  • 64GB SD Card (Sandisk micro SDXC CLASS10 UHS-I U3) for Boot
  • USB 2.0 Flash Drive (32G) *3ea for RAID Volume

결론적으로, Raspberry PI 3 스펙 상 성능 (USB 2.0 수준 I/O)으로는, Stripe/Parity RAID 구성을 통한 극적인 속도 개선 효과는 기대하기 어렵다. Raspberry PI 4에서 USB3.0 지원이 시작되었는데, 해당 기기부터 성능향상을 기대해볼 수 있을 듯 하다.

Raspbian OS는 최초 원격 SSH 접근이 막혀있다. SSH 접속을 위해, SD 카드에 OS 이미지를 복사한 후, ‘ssh’ 이름으로 파일 하나 만들어준다.

$ touch ssh
SD 카드 꽂고 전원을 넣는다. 노트북과 랜선으로 연결한다. USB NIC가 필요할 수 있다.
맥북은 [설정]-[인터넷 공유] 로, RPi에 인터넷을 공급할 수 있다.

부팅, 랜선 연결 및 인터넷 공유까지 끝났으면, 이제 SSH로 접근할 차례다. IP는 호스트명으로 대충 찾을 수 있다.

  • Windows/Linux: $ ping raspberrypi
  • Mac: $ ping raspberrypi.local
접속하고 나면, password 변경 , 파일시스템 확장(Advanced Setting) 등을 한다. ($ sudo raspi-config)
꽂아둔 USB 메모리가 잘 있다. Disk 경로를 잘 파악해두자 ($ fdisk -l)

라즈베리파이가 잘 켜지고, 메모리도 잘 있다면, 이제 소프트웨어 RAID 구성을 할 차례다. 32G USB 메모리 3개를 RAID 5(Parity) 로 구성하면 64G 볼륨으로 구성되고, 2배 속도를 내며, 메모리 하나가 죽어도 괜찮다. 이를 위해 mdadm 을 설치한다. ($ sudo apt-get install mdadm)

mdadm이 설치되는 동안 fdisk로 USB 메모리 파티션을 설정하자. 위에서 확인했던 디스크 경로로 fdisk를 각각 수행한다.

  • $ fdisk /dev/sda
  • $ fdisk /dev/sdb
  • $ fdisk /dev/sdc
[d] 기존 파티션 삭제 > [n] 신규 primary 파티션 생성> [p] 상태 출력
[t] 파티션 타입 설정 (Linux raid autodetect) > [p] 상태 출력 > [w] 변경사항 저장
변경 결과 확인 ($ fdisk -l |grep sd)
RAID 구성 전, mdadm examine 출력 결과
3개 디스크(sda1,sdb1,sdc1) 로 RAID 5 구성 명령
RAID 구성 명령 후 fdisk 로 볼륨 확인, mdstat로 진행도 확인 ($ watch -n1 cat /proc/mdstat)
[중요] RAID 구성 정보를 저장해둬야, 재 부팅 시에 RAID 볼륨이 올라온다.

여기 까지 진행했으면, RAID 볼륨은 구성 되었다. 라즈베리파이 환경에서는 작업 완료까지 대충 70분 정도가 소요되는 듯 하다. 구성한 볼륨의 상태를 확인하면 ‘clean, degraded, recovering’ 으로 보이는데, 대충 속도는 떨어지지만 사용은 가능하다는 뜻이다. 볼륨이 사용가능하다면, 이제 파일시스템 설정을 진행한다.

RAID 볼륨 상태 확인 ($ mdadm --detail /dev/md0)
md0 볼륨을 ext4 파일시스템으로 설정한다 ($ mkfs.ext4 /dev/md0)
/mnt에 원하는 볼륨명으로 폴더를 만들고 마운트 한다. ($ mount {source} {target} )
fstab에 위의 볼륨을 등록한다.
fstab 등록 예시

이제 성능이 궁금해진다.

  • 쓰기: $ dd if=/dev/zero of=tempfile bs=1M count=128;
  • 읽기: $ dd if=tempfile of=/dev/null bs=1M count=128;

Read 속도 밴치마크를 위해 hdparm 을 쓸 수 있다.

mmcblk: SD카드 / md0: RAID5 Volume / sdd1: usb 메모리

확인한 특이사항으로, RAID5 볼륨은 SD 카드보다는 성능 좋았으나, 단일 USB 보다는 성능이 약간 떨어지는 것으로 확인하였다. 전자는 Raspbian OS 기본 설정 상 SD 속도를 제한하고 있다. 이건 오버클럭으로 해결 된다. 후자는 USB2.0 표준 속도에 기인하는 것으로 추정한다. USB2.0가 낼 수 있는 실질적 속도는 280mbps (약 35MB/S) 수준이며, 여기서 S/W RAID 구성이 병목으로 작용하여, 오히려 약간의 성능 하락이 발생하는 듯 하다.

(+) 예약 주문한 라즈베리파이4 8G 모델이 도착하였다. 본 물건 정격 전력이 15W (5V/3A)라서, 노트북에 연결해서는 경우에 따라 사용이 제한될 수 있어 보인다.

RPi 4부터 전원으로 USB-C 포트를 사용하는데, 요게 OTG 가 가능하다고 한다. 노트북이랑 usb 선 하나로 쉘 접근이 가능하다.지금까지는 라즈베리파이 제로 모델에서만 해당 방법이 통했다.

아무튼 이를 위해, SD 카드에 OS 이미지 설치 직후, config.txt 에 아래 내용 추가한다.

dtoverlay=dwc2

cmdline.txt 내용 중 rootwait 바로 뒤에 아래 내용을 추가한다. (띄어쓰기 구분 주의)

.... rootwait modules-load=dwc2,g_ether ...

ssh 빈 파일 생성까지 마치고, 노트북에서 전원을 연결하면 RNDIS를 통한 인터넷 공유가 가능하다.

이후, 위의 테스트를 반복했으며 usb flash 4개를 RAID5 로 묶고 진행했다. 확실히 쓰기 속도가 개선되었다.

--

--