
SD에서 NVMe로 — 서비스 끄지 않고 갈아타기
단일보드 컴퓨터를 SD카드로 부팅해 한동안 검증한 뒤, 결국 마주치는 게 스토리지 교체입니다. SD카드는 부트스트랩엔 좋지만 DB·로그 쓰기가 많은 24/7 서버의 주저장으론 부적합합니다 — 수개월 내 마모로 죽습니다. NVMe SSD로 옮겨야 하는데, 서비스를 멈추지 않고 갈아타는 게 관건입니다.
핵심 전략은 부트로더는 SD에 두고, rootfs만 NVMe로 옮기는 것입니다. SPI 플래시를 건드리지 않아 벽돌(brick) 위험이 없습니다.
왜 "rootfs만" 옮기나
부트 체인을 전부 NVMe로 옮기려면 SPI 플래시의 부트로더를 다시 써야 하는데, 이건 실패 시 보드가 안 켜지는 위험이 있습니다(콘솔 접근 없이는 복구 곤란).
대신 SD의 부트로더가 그대로 부팅을 시작하고, 루트 파일시스템만 NVMe를 가리키게 하면 — SPI는 손 안 대고, SD는 "부팅 시작 + 커널" 역할만, 실제 데이터는 NVMe에서 돕니다. 안전하고 되돌리기도 쉽습니다.
라이브 이전 순서
1. 새 디스크 준비
NVMe에 파티션 + 파일시스템 생성(ext4 등).
2. 라이브 벌크 복사 (서비스 돌면서)
rsync -aHAXx / /mnt/nvme/
서비스가 돌고 있는 채로 1차 복사. 시간이 걸리지만 다운타임 0입니다(이 시점엔 아직 SD로 부팅 중).
3. 짧게 멈추고 델타만
서비스·DB를 잠깐 정지하고 변경분만 다시 동기화:
rsync -aHAXx --delete / /mnt/nvme/
1차에서 대부분 옮겨졌으니 델타는 금방입니다 — 이게 실질 다운타임의 전부.
4. 부팅 설정 변경
부트로더 설정(extlinux 등)과 fstab의 root를 NVMe의 UUID로 교체. SD의 rescue 항목은 백업으로 보존.
5. 검증 게이트
재부팅 전에 자동 원복 장치를 넣으세요. "NVMe로 부팅 → 핵심 서비스 헬스 OK면 확정, 실패면 SD 부팅으로 자동 롤백". 검증 없이 전환하면 부팅 실패 시 손이 많이 갑니다.
반드시 챙길 함정
PCIe는 부팅 시에만 인식되기도 한다
일부 보드의 PCIe는 부팅 시점에만 장치를 프로브합니다. 전원을 켠 채 NVMe를 꽂으면 안 잡힙니다. rescan도 안 먹는 경우가 있어 — 재부팅으로 enumerate 해야 합니다.
/boot 분리 주의
부트로더가 SD의 /boot(커널·initrd)를 읽고 rootfs만 NVMe인 구조에선, 나중에 커널 업데이트가 NVMe쪽 /boot에만 써질 수 있습니다. 그러면 부트로더가 옛 커널을 읽어 부팅이 깨집니다. → 커널 갱신 후 SD /boot를 동기화하는 걸 잊지 마세요.
재부팅 후 자동기동 상태 복원
이전 직전에 멈춘 컨테이너들이, 재부팅 후 자동으로 다시 떠야 합니다. unless-stopped 정책이 걸려 있어야 합니다(안 그러면 무재시작정책 함정에 빠집니다).
정리
- 부트로더 = SD, rootfs = NVMe → SPI 무수정, 벽돌 위험 회피
rsync라이브 1차 + 델타로 다운타임 최소화- 검증 게이트 + 자동 원복으로 안전망
- 함정: PCIe 부팅 인식 · /boot 분리 · 재부팅 자동기동
이렇게 하면 24/7 서버를 거의 멈추지 않고 SD에서 NVMe로 갈아탈 수 있습니다.
ARM 단일보드 서버의 주저장 이전 작업을 정리했습니다.