라즈베리파이3 B+ 설치가이드(7) 하드디스크(hdd) 마운트/사용하기

Updated:

라즈베리파이에 이제 저장장치를 추가해봅시다. 부팅용 micro sd card는 용량에 한계가 있기때문에 NAS 대용으로 라즈베리파이를 구성하려면 추가 스토리지 장착은 필수입니다. 이번 글에서는 hdd를 연결하고 자동 마운트 설정을 해보겠습니다. 그리고, 마지막에는 하드디스크(hdd) 읽기/쓰기 성능 평가를 살펴보겠습니다.

1. 라즈베리파이에 연결할 하드디스크

라즈베리파이에는 일반 HDD(2.5인치/3.5인치)와 외장용 HDD(USB) 모두 연결이 가능합니다. 다만, 라즈베리파이에서 공급가능한 전류가 1.2A이기때문에, 라즈베리 파이 전원으로는 HDD 구동이 불가합니다. 그래서 HDD를 연결하려면, 전원 공급이 따로 이뤄져야 합니다.

외장HDD의 경우는 USB로 연결이 되는데 USB 전원 라인을 따로 분리해놓은 y케이블이 있습니다. 이런 y케이블로 전용 전원을 공급해줘야 합니다.

일반HDD(SATA 인터페이스)는 SATA-USB 변환 케이블이 필요합니다. 보통 SATA-USB 변환 케이블에는 전원 공급 라인이 따로 구성되어 있으므로, 이를 통해 전원을 공급하면 됩니다.

제가 연결할 HDD는 집에서 놀고 있는 SEAGATE ST2000DM001 모델로 SATA 인터페이스의 3.5인치 사이즈입니다. 라즈베리파이에 연결하기 위해 SATA-USB 변환 케이블은 새로 구매했습니다.

SATA-USB 변환 케이블입니다. 220V 전원을 통해 HDD에 전용 전원을 공급하는 형태입니다.

hdd와 연결한 모습입니다. SATA-USB 변환 케이블에는 ON-OFF 스위치도 있어서 하드 디스크를 사용하지 않을 경우는 스위치로 파워를 꺼줄 수 있습니다.

SATA-USB 변환 케이블을 사용하여 하드디스크를 연결한 모습입니다.

2. 하드디스크(hdd)를 usb 연결하기 및 마운트 확인

하드디스크를 라즈베리파이에 연결하면 자동 마운트가 실행됩니다. 리눅스에서 저장장치 연결상태를 확인할 수있는 명령어는 fdisk, blkid, lsblk 를 많이 사용합니다. 아래 커맨드 예시를 보고 목적에 맞게 사용하시면 되겠습니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  1.8T  0 disk
└─sda1        8:1    0  1.8T  0 part /media/pi/6fb34864-2759-4ad6-bf65-4162ccab1b1e
mmcblk0     179:0    0 29.8G  0 disk
├─mmcblk0p1 179:1    0 43.2M  0 part /boot
└─mmcblk0p2 179:2    0 29.8G  0 part /

lsblk는 블록 디바이스들을 출력해주는 명령어입니다. 장치명이 처음 나오고, 그 밑으로는 파티션 별로 마운트 위치와함께 정보가 나옵니다. 방금 연결한 하드디스크 장치명은 sda로 추가되었습니다. 마운트 포인트는 /media/pi 폴더 밑으로 UUID를 사용하여 생성되었습니다. UUID는 장치를 구별해주는 범용 고유 식별자(Universally Unique Identifier, UUID) 니다. mmcblk0는 부팅용 sd card의 장치명입니다. 부팅용 카드에는 파티션이 2개(boot와 rootfs) 생성되어 있습니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo blkid
/dev/mmcblk0p1: LABEL="boot" UUID="6228-7918" TYPE="vfat" PARTUUID="0ee4afb4-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="6bfc8851-cf63-4362-abf1-045dda421aad" TYPE="ext4" PARTUUID="0ee4afb4-02"
/dev/mmcblk0: PTUUID="0ee4afb4" PTTYPE="dos"
/dev/sda1: UUID="6fb34864-2759-4ad6-bf65-4162ccab1b1e" TYPE="ext4" PARTUUID="49d273cd-01"

blkid는 블록 디바이스들의 속성을 출력해줍니다. 마운트 상태 보다는 장치의 속성 위주로 출력해줍니다. 추가된 하드디스크의 UUID 정보와 파티션 UUID인 PARTUUID를 확인할 수 있습니다. TYPE에서는 파일시스템의 속성을 확인할 수 있습니다. 연결된 하드디스크는 ext4 파일 시스템을 사용하고 있습니다. 윈도우에서 사용하던 하드디스크를 떼어 왔다면 NTFS일 것입니다.

라즈베리파이에서 저장장치 자동 연결을 해주기때문에 UUID를 기반으로 한 디폴트 마운트 포인트를 사용하여 장치를 사용할 수 있습니다. 하지만, UUID 보다는 마운트 포인트를 본인이 원하는 폴더 명으로 생성하는 것이 여러모로 편리합니다. 글의 뒤부분에서 자동 마운트 방법을 포함하여 살펴보도록 하겠습니다.

3. 하드디스크(hdd) 장치 포맷

하드디스크를 포맷하실 분들만 참고하셔요. 기존에 사용하던 데이터를 계속 사용할 분들은 하드디스크 포맷하시면 안됩니다. 하드디스크 포맷하면 자료 다 날라가요~~~

하드디스크를 포맷하려면 파일시스템을 지정해야 합니다. 크게 2가지 파일시스템을 사용할 수 있습니다. ext4와 NTFS 입니다. ext4는 리눅스의 파일시스템이고, NTFS는 윈도우에서 사용하는 파일시스템입니다. 때문에, 하드디스크 포맷을 하려면 ext4로 하기를 권합니다. NTFS의 기술을 가진 마이크로 소프트사에서 NTFS 기술을 완전공개하지 않았기 때문에, 리눅스에서 구현한 NTFS 쓰기 동작이 불안하다는 의견이 있습니다. 윈도우에서 사용하던 저장장치는 보통 NTFS 파일시스템 사용하고 있을 것입니다. NTFS 파일시스템을 사용하고 있는 장치를 인식하고 싶으면, 설치가이드(9) SD card 마운트/사용하기를 참고해주세요.

여기서는 하드디스크를 ext4 파일시스템으로 포맷하고 사용하는 방법을 알아봅시다. ext4 파일시스템으로 포맷은 mke2fs 명령어를 사용합니다. ext4 파일시스템으로 포맷을 할 경우, mke2fs 명령어는 mkfs.ext4 로 기재합니다.

일단 위에서 확인했던 디바이스 명을 사용하여 언마운트합니다. 언마운트 명령어로 리눅스에서 장치 연결을 모두 해제합니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo umount /dev/sda1

언마운트 후에 디바이스 명을 사용하여 ext4 파일 시스템 포맷을 실행합니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo mkfs.ext4 /dev/sda1

포맷 후에는, 마운트를 진행할 폴더를 생성하고, 그 경로를 사용하여 mount를 실행합니다. mount 명령어는 mount [디바이스 명] [마운트 할 위치] 형식으로 사용합니다.

#!/bin/bash
pi@raspberrypi:~ $ mkdir ~/hdd_storage
pi@raspberrypi:~ $ sudo mount /dev/sda1 ~/hdd_storage

완료 후, lsblk로 결과를 확인하면 지정된 마운트 포인트로 마운트가 된 것을 확인할 수 있습니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  1.8T  0 disk
└─sda1        8:1    0  1.8T  0 part /home/pi/hdd_storage
mmcblk0     179:0    0 29.8G  0 disk
├─mmcblk0p1 179:1    0 43.2M  0 part /boot
└─mmcblk0p2 179:2    0 29.8G  0 part /
pi@raspberrypi:~ $

4. 하드디스크(hdd) 자동 마운트 설정 - fstab

하드디스크 사용 준비는 완료되었지만, 재부팅 할때 마다 다시 마운트를 해줘야합니다. 이런 경우 필요한 것이 fstab 설정입니다. fstab에는 부팅시 리눅스에서 디바이스들을 어떻게 처리할지를 기재해두고, 기재해둔 설정대로 처리합니다. 아래처럼 fstab 파일을 편집합니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo vi /etc/fstab

fstab에 본인의 하드디스크 정보와 마운트 포인트를 추가합니다.

fstab 설정 옵션을 간단히 살펴보면, 첫번째는 마운트할 디바이스 정보입니다. 디바이스는 LABLE, UUID, PARTUUID 등을 기재할 수 있습니다. 두번째는 마운트 포인트입니다. 세번째는 해당 디바이스의 파일 시스템을 기재합니다. 네번째는 마운트 옵션이며, defaults를 기재하면, rw, nouser, auto, exec, suid 속성을 모두 가집니다. defaults 외에 noatime만 추가해줍니다. noatime 옵션은 access time에 대해 기록을 하지 않아 약간 성능 향상을 볼 수 있습니다. 다섯번째는 dump 설정으로 0은 덤프하지 않는 파일시스템 설정입니다. 여섯번째는 fsck 실행 옵션입니다. 0은 fsck를 실행하지 않도록 합니다.

fstab 설정을 완료하고, 재부팅을 실행하면 하드디스크가 자동으로 마운트 되어 있습니다. lsblk 명령어로 sda1 디바이스가 pi 홈디렉터리에 hdd_storage 마운트 포인트로 마운트 되어 있는 것을 확인할 수 있습니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  1.8T  0 disk
└─sda1        8:1    0  1.8T  0 part /home/pi/hdd_storage
mmcblk0     179:0    0 29.8G  0 disk
├─mmcblk0p1 179:1    0 43.2M  0 part /boot
└─mmcblk0p2 179:2    0 29.8G  0 part /
pi@raspberrypi:~ $

이제 라즈베리파이에서 하드디스크를 사용하기 위한 준비가 완료되었습니다. 재부팅을 해도 라즈베리파이는 장치 UUID를 읽어서 자동으로 하드디스크를 마운트하게 됩니다.

5. 하드디스크(hdd) 읽기/쓰기 성능 평가

하드디스크 사용을 위한 모든 설정은 완료되었습니다. 그럼 라즈베리파이에서 하드디스크 사용 시에 벤치마크를 사용하여 읽기 쓰기 성능을 측정해봅니다. 벤치마크 프로그램은 hdparm, dd, iozone을 사용한 Jeff Geerling 블로그를 참고하여, 동일하게 진행하였습니다.

benchmark hdparm buffered dd write 4K rand read 4K rand write
HDD SEAGATE ST2000DM001 33.12 MB/sec 34.83 MB/sec 0.77 MB/sec 1.30 MB/sec

hdparm과 dd 테스트는 속도가 생각보다 잘 나왔는데, iozone 4K rand read/write 테스트 결과가 많이 낮습니다. 이는 Jeff Geerling의 테스트 스크립트를 살펴보면, hdparm 테스트가 100MB, dd 테스트가 약 400MB write를 하는데 반해, iozone은 4K 단위의 사이즈로 100MB 만큼 테스트를 진행하는 것을 알 수 있습니다. hdparm과 dd 테스트가 대용량 쓰기를 한다면, iozone 테스트 설정은 작은 단위를 쓰기를 합니다. 즉, HDD는 대용량 쓰기는 잘하나, 작은 단위의 잦은 write 동작에는 큰 지연이 발생했다고 볼 수 있습니다.

HDD 외 다른 스토리지 read/write 벤치마크 결과는 설치가이드(6) 저장장치 선택하기를 참고해주세요.


더 많은 라즈베리파이 이야기 Pi Guide 보러가기


Leave a Comment