ODROID-N2+에 SSD를 설치하는 방법

리눅스
이 글은 읽는데 약 9분이 걸립니다.

간단한 서버 용도로 잘 사용하던 ODROID-N2+가, 어느날 재부팅을 시도한 이후로 부팅이 되지 않는 문제가 발생했어요. 모니터에 연결해서 확인해 본 결과, Petitboot에서 boot 파티션이 있는 microSD로 부팅을 시도하면 ‘_(언더스코어)’ 문자만 표시된 상태로 그대로 멈춰 있는 증상이었어요.

예전에 Raspberry Pi 4B를 사용했을 때, 메인 저장장치로 사용하던 microSD 카드의 짧은 수명 때문에 얼마 사용하지도 않았는데 비슷한 문제가 생기는 경우가 많았어요. 그래서 처음에는 microSD 고장이 의심되어 microSD 카드의 교체를 고려했죠(결과적으로 부팅에 실패하는 문제가 microSD 때문이었는지는 끝까지 알지 못했지만요).

하지만 얼마 안 가서 고장날 microSD 카드를 메인 저장장치로 계속 사용하는 것보다는 속도와 수명 측면에서 훨씬 우등한 SSD를 사용하는 것이 낫다고 판단했어요. 마침 집에 남는 SSD와 NVMe to USB 어댑터도 있었구요.

검색을 통해 찾아보니, ODROID-N2+의 root 파티션을 SSD에 설치하여 사용하는 방법은 두 가지가 있었고, 다음과 같아요.

  1. SSD에 boot 파티션과 root 파티션을 설정하여, microSD 없이 SSD 단독으로 사용하는 방법
  2. microSD에는 boot 파티션을, SSD에 나머지 파티션을 설정하여 microSD로 부팅한 한 후에 나머지 부팅과 root 파티션의 실질적인 사용을 SSD에서 하는 방법

결론부터 말씀드리자면 두 번째 방법을 추천드리고 싶어요. 이유는 첫 번째 방법을 시도해본 결과, 부팅을 시도할 때마다 랜덤 가챠 돌리듯이 부팅이 됐다가 안 됐다가 하는 등, 너무 불안정했기 때문이에요.

본 포스팅에서는 두 가지 방법을 모두 설명해 드리니, 각자의 상황에 맞게 선택해 주세요.

첫 번째 방법: SSD 단독

(하기 내용은 James A. Chambers의 “ODROID N2+ Petitboot SSD Boot Guide“를 참고했어요)

첫 번째 방법은 SSD에 boot 파티션을 포함한 모든 파티션을 설정하고, SSD 단독으로 사용하는 방법이에요.

우선 ODROID 공식 웹 사이트에서 N2+용 설치 이미지를 다운로드하고, Balena Etcher 등의 이미지 플래싱 툴로 microSD에 플래싱해주세요.

ODROID-N2+에 플래싱된 microSD와 SSD가 연결된 USB를 연결하여 부팅한 후, lsblk 명령을 실행하면 아래와 같은 결과가 나와요.

odroid@odroid:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 128M 0 part /media/usb0
│ /media/boot
└─sda2 8:2 0 14.4G 0 part /media/usb1

위 경우에는 SSD가 SATA 인터페이스로 연결되어 device name이 sda로 되어 있는데, 만약 SSD가 NVMe 프로토콜을 지원한다면 device name이 sda 대신 nvme0으로 인식될 수도 있어요.

sudo fdisk /dev/{device name} 명령을 실행해서 연결된 SSD의 파티션을 삭제해 주세요.

odroid@odroid:~$ sudo fdisk /dev/sda

microSD가 연결된 디바이스 파일(mmcblk0)의 내용물을 cat 명령과 ‘>‘(리다이렉션 연산자)를 사용해서 SSD의 디바이스 파일(sda)에 Overwrite해요.

odroid@odroid:~$ sudo cat /dev/mmcblk0 > /dev/sda

위 명령을 통해 Linux가 설치된 microSD의 파티션 구조와 데이터가 SSD로 복사되었고, 복사된 boot 파티션 덕분에 SSD로도 부팅할 수 있는 상태가 돼요.

ODROID-N2+의 전원을 끄고, microSD를 본체로부터 제거한 다음에 다시 전원을 켜세요.

그리고 Petitboot에서 SSD가 부팅 가능한 장치로 인식되는지 확인하세요. 아래와 같이 표시되면 정상적으로 인식된 거예요.

(https://jamesachambers.com/odroid-n2-petitboot-ssd-boot-guide/)

SSD로 부팅하기 전에, 해당 Boot device entry에 커서를 올린 다음, e 키를 눌러 Boot arguments 항목의 root 필드가 제대로 /dev/sda(또는 /dev/nvme0n1)로 설정되었는지 확인해야 해요.

Boot arguments 항목의 값은 Boot device의 boot 파티션의 boot.ini에서 자동으로 가져오기 때문에 보통 자동으로 설정되어 있는데요, 그렇지 않고 여전히 mmcblk0로 설정되어 있다면 SSD의 device name으로 변경해 주어야 해요.

(https://jamesachambers.com/odroid-n2-petitboot-ssd-boot-guide/)

이후 SSD의 Boot entry를 선택하면 정상적으로 부팅이 진행될 거예요.

다만 루트 파티션의 용량이 SSD의 총 용량보다 작을 수 있는데, 이는 microSD의 파티션 구조를 그대로 복사한 것이기 때문에 그래요. 만약 루트 파티션 크기를 재조정하고 싶다면, SSD를 다른 컴퓨터에 연결하여 파티셔닝과 포맷을 해야 해요. 이후 기존 루트 파티션의 내용물을 rsync 명령 등을 통하여 포맷된 새로운 파티션에 복사해야 해요. 또, 수정된 UUID를 이전의 것으로 되돌리거나, 혹은 UUID를 참조하는 값들을 새로운 UUID로 변경하는 과정도 필요하죠.(e.g. /etc/fstab)

끝이에요! 이것으로 SSD 단독으로 부팅할 수 있어요. 다만, 제 환경에서는 ODROID-N2+의 Petitboot가 USB 3.0으로 연결된 SSD를 인식하지 못하는 증상이 있었어요. USB 2.0으로 연결하면 인식도, 부팅도 잘 되긴 하지만, USB 2.0의 속도는 메인 저장장치로 사용하기에는 너무 느리죠(microSD와 얼추 비슷해요). 만약 USB 3.0로 인식되지 않는다면, 두 번째 방법을 시도해 보세요.

제 환경에서는 첫 번째 방법에서 부팅시 SSD가 연결된 USB 장치를 인식하지 못하거나, 혹은 부팅시 프리즈 상태가 되는 경우가 있었어요. USB 2.0의 속도가 너무 느린 것도 두 번째 방법을 시도하는 계기가 되었죠.

두 번째 방법: SSD와 microSD 둘 다 사용

microSD에 boot 파티션을, SSD에 나머지 파티션을 설정하여 부팅만 microSD로 진행하고, 나머지 부팅과 실질적인 사용을 SSD에서 하는 방법이에요.

우선 첫 번째 방법처럼 microSD에 ODROID 공식 웹 사이트에서 제공하는 설치 이미지를 플래시해 주세요. 그리고, 마찬가지로 fdisk 명령어로 SSD를 파티셔닝 해주세요.

odroid@odroid:~$ sudo fdisk /dev/sda

생성된 파티션을 알맞은 파일시스템으로 포맷해 주세요.(e.g. ext4 및 swap 영역 등)

odroid@odroid:~$ sudo mkfs.ext4 /dev/sda1

깨끗하게 포맷된 SSD의 루트 파티션에 microSD의 루트 파티션을 그대로 복사해 주세요.

sudo rsync -avzhP mmcblk's_rootfs_path SSD's_rootfs_path

이렇게 하면, microSD를 통해 SSD에서 Linux를 사용할 수 있는 상태가 돼요.

이후, microSD와 SSD가 연결된 USB를 연결한 채로 전원을 켜면 Petitboot가 microSD의 boot 파티션을 불러와 Boot entry에 표시돼요.

(https://jamesachambers.com/odroid-n2-petitboot-ssd-boot-guide/)

현 상태에서는 microSD의 boot.ini에서 불러온 Boot arguments의 root 필드가 여전히 mmcblk0를 가리키고 있기 때문에, 루트 파티션을 SSD의 것으로 사용할 수 없어요. root 필드를 microSD의 루트 파티션에서 SSD의 루트 파티션으로 변경하면, microSD의 Boot entry를 선택했을 때 SSD의 루트 파티션으로 부팅하게 돼요.

(https://jamesachambers.com/odroid-n2-petitboot-ssd-boot-guide/)

두 번째 방법의 장점은 첫 번째 방법 대비 안정적이라고 할 수 있어요. 첫 번째 방법에서는 Petitboot에서 SSD에 연결된 USB 장치가 인식되기까지 2초 이상 걸리고, 경험상 멀쩡하게 잘 동작하다가도 재부팅을 시도하면 부팅 도중 프리징 상태가 되는 경우가 잦았어요.

반면 두 번째 방법은 microSD를 통해 부팅하기 때문에 Petitboot에도 바로 인식되며, 다른 저장장치에 영향을 받지 않도록 Petitboot에서 Boot entry를 microSD only로 고정할 수도 있어서, USB 장치 대비 훨씬 안정적이라고 할 수 있죠.

참고적으로, 부팅용으로 사용되는 microSD의 boot 파티션 용량은 고작 100MB을 조금 넘기 때문에 1GB 정도의 저용량 microSD로도 충분해요. 또한, microSD의 읽기/쓰기 속도가 느려도 microSD에서 SSD로 넘어가는 부팅 과정에서는 충분히 빠르고, 부팅 과정에서 microSD에 쓰기 작업을 할 일이 없다고 봐도 돼요.

따라서 microSD를 부팅용으로 사용함으로 인한 수명 감소 걱정은 하지 않으셔도 된다는 거죠!

외장 SSD를 장착한 ODROID-N2+ (1)
외장 SSD를 장착한 ODROID-N2+ (2)