라즈베리파이3 B+ 설치가이드(9) SD card 마운트/사용하기

Updated:

이전 글에서 라즈베리파이에 하드디스크와 SSD를 추가하는 방법을 설명해보았습니다. 이번에는 SD card 혹은 USB 메모리스틱을 라즈베리파이의 USB 포트에 자동 마운트하는 설정을 해보겠습니다. USB포트에 추가 메모리카드를 달아서 스토리지 디바이스로 사용하는 방법입니다. 설정이 완료된 후에는, 마지막으로 SD card와 USB 메모리 스틱의 읽기/쓰기 성능 평가를 살펴보겠습니다.

1. 라즈베리파이에 연결할 SD Card

라즈베리파이는 SD card와 USB 메모리스틱을 USB 포트를 통해 연결할 수 있습니다. SD card의 경우는 USB 어댑터가 있어야 USB 포트에 삽입이 가능하겠죠. SD card와 USB 메모리스틱 모두 플래시 메모리의 한 종류이기에 기기 성격은 동일합니다. 여기서는 16GB SD card를 연결해보도록 하겠습니다.

2. SD Card를 usb 연결하기 및 마운트 확인

SD Ccard를 라즈베리파이에 연결하면 자동 마운트가 실행됩니다. 이미 이전 글에서 살펴본대로 disk, blkid, lsblk 명령어를 사용하여, 장치 연결 상태를 확인합니다. SD Card 장치를 연결하고 결과를 다시 확인해보시죠. 각 명령어 설명은 하드디스크 마운트 설정 글을 참고하세요.

#!/bin/bash
pi@raspberrypi:~ $ sudo lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 14.8G  0 disk
└─sda1        8:1    1 14.7G  0 part /media/pi/67436B3004267B20
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는 블록 디바이스들을 출력해주는 명령어로, 방금 연결한 SD Sard 장치명은 sda로 추가되었습니다. 마운트 포인트는 /media/pi 폴더 밑으로 UUID를 사용하여 자동 생성되었습니다.

#!/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/sda1: UUID="67436B3004267B20" TYPE="ntfs" PTTYPE="dos"
/dev/mmcblk0: PTUUID="0ee4afb4" PTTYPE="dos"

blkid는 블록 디바이스들의 속성을 출력해줍니다. 추가된 SD Card의 UUID 정보를 확인할 수 있습니다. TYPE에서는 연결된 SSD가 NTFS 파일 시스템을 사용하고 있음을 말해줍니다.

3. NTFS 파일시스템 사용하기(ntfs-3g 설치하기)

리눅스(라즈베리파이)에서 NTFS 파일시스템을 사용하기 위해서는 NTFS 파일시스템 지원 패키지인 ntfs-3g를 설치하여야 합니다. NTFS 파일시스템이 윈도우 태생이기에, 라즈베리파이에는 기본으로 설치되어 있지 않습니다. NTFS 파일시스템 장치를 마운트하여도 ntfs-3g를 설치하지 않으면, “read-only file system” 에러만 뿜으면서 쓰기 동작이 안됩니다.

윈도우에서 사용하던 외장 하드디스크나 외장 SSD를 그대로 라즈베리파이에 연결하면, ntfs 파일시스템을 사용하고 있을 것이기에, ntfs-3g 패키지 설치가 필요합니다. ntfs 파일시스템을 사용하는 장치에 쓰기 동작을 할때 “read-only file system” 에러가 발생하는 경우는 ntfs-3g를 설치하여야 합니다.

아래처럼 apt 명령어로 ntfs-3g를 설치합니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo apt install ntfs-3g
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  ntfs-3g
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 375 kB of archives.
After this operation, 1,283 kB of additional disk space will be used.
...
Setting up ntfs-3g (1:2016.2.22AR.1+dfsg-1) ...
Processing triggers for man-db (2.7.6.1-2) ...
Processing triggers for initramfs-tools (0.130) ...
pi@raspberrypi:~ $

ntfs-3g 패키지 설치를 완료하고, 매뉴얼 마운트 방법은 아래처럼 사용하세요. ntfs의 경우는 파일시스템 및 uid/pid 기재가 필요합니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo mkdir usb_storage
pi@raspberrypi:~ $ sudo mount -t ntfs -o uid=pi,gid=pi /dev/sda1 usb_storage/

4. SD Card 장치 포맷

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

이전 글에서 하드디스크와 SSD를 포맷할때, ext4 파일시스템을 사용하였습니다. ext4 파일시스템은 리눅스의 파일시스템입니다.

이번에는 윈도우 파일시스템인 NTFS를 사용하여 포맷을 해보겠습니다. NTFS는 윈도우 파일시스템이지만 지원패키지(ntfs-3g)만 치해주면 리눅스에서도 사용이 가능합니다. SD Card를 라즈베리파이와 윈도우 사이에서 모두 사용할 계획이라면 NTFS가 편할테지요. (ext4 파일시스템도 지원 프로그램 설치를 하면 윈도우에서 사용이 가능하긴 합니다.)

아래처럼 장치를 언마운트 실행 후에 포맷을 합니다. 포맷을 완료하고 나서, blkid로 확인해보면 TYPE이 ntfs로 변경된 것을 확인가능합니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo umount /dev/sda1
pi@raspberrypi:~ $ sudo mkfs.ntfs /dev/sda1
Cluster size has been automatically set to 4096 bytes.
Initializing device with zeroes: 100% - Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.
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/sda1: UUID="67436B3004267B20" TYPE="ntfs" PTTYPE="dos"
/dev/mmcblk0: PTUUID="0ee4afb4" PTTYPE="dos"

4. SD Card 자동 마운트 설정 - fstab

SD Card 사용 준비는 완료되었지만, 재부팅 시 마다 마운트를 다시 해줘야합니다. 이런 경우 필요한 것이 fstab 설정입니다. 리눅스에서 저장장치들에 대한 마운트 방법을 fstab 설정해두면, 자동으로 마운트를 실행합니다. 마우트 포인트 경로를 선정한 뒤, mkdir로 경로를 생성해주고, fstab을 편집하러 갑니다.

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

fstab에 위에서 확인했던 SD Card UUID 정보와 마운트 포인트를 추가합니다. 그리고, 아래와같이 ntfs-3g 파일시스템 옵션과 uid/gid 옵션도 기재합니다.

UUID=67436B3004267B20 /home/pi/usb_storage ntfs-3g uid=1000,gid=1000,umask=007 0 0

fstab 설정 화면입니다.

fstab 설정을 완료하고, 재부팅을 해봅시다. 부팅 완료 후에 SD card가 자동으로 마운트 되어 있으면 설정은 성공입니다. lsblk 명령어로 sda1 디바이스가 pi 홈디렉터리에 usb_storage 마운트 포인트로 마운트 되어 있는 것을 확인할 수 있습니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 14.8G  0 disk
└─sda1        8:1    1 14.7G  0 part /home/pi/usb_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 /

이제 라즈베리파이에서 SD card를 사용하기 위한 설정도 모두 마쳤습니다. 마지막으로 성능 평가만 남았습니다.

5. SD Card 읽기/쓰기 성능 평가

하드디스크 벤치마크 실행한 것과 같이, SD Card에서 벤츠마크를 실행해보겠습니다. 라즈베리파이에서의 SD Card 읽기 쓰기 성능은 카드 별로도 차이가 납니다. 이 점을 고려하여 성능 결과를 살펴봐주세요. 벤치마크 프로그램은 하드디스크 벤치마크와 동일하게 hdparm, dd, iozone을 사용한 Jeff Geerling 블로그를 참고하여, 진행하였습니다.

벤치마크 테스트에 사용한 SD Card는 MB-MJ32G (Samsung sdcard Pro Endurance) 모델입니다.

benchmark hdparm buffered dd write 4K rand read 4K rand write
Samsung Pro Endurance 17.50 MB/sec 10.50 MB/sec 4.39 MB/sec 2.40 MB/sec

hdparm과 dd 테스트는 생각보다는 낮게 나오고, iozone rand read/write 테스트 결과는 그럭저럭 나왔네요.

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


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


Leave a Comment