| 명칭 | 풀네임 | 규격 용량 | 표준 파일시스템 |
|---|---|---|---|
| microSD | Standard Capacity, SDSC | 최대 2GB | FAT12 / FAT16 |
| microSDHC | High Capacity | 2GB 초과 ~ 32GB | FAT32 |
| microSDXC | eXtended Capacity | 32GB 초과 ~ 2TB | exFAT |
| microSDUC | Ultra Capacity | 2TB 초과 ~ 128TB | exFAT |
라즈베리 파이로 만든 Fluid Ardule은 이제 제법 안정적으로 작동한다. 어제는 소개용 영상을 제대로 찍으려고 배경지까지 구입하여 벽에 걸어 두었다. GitHub에는 지금까지 개발한 소스 코드와 문서가 전부 올라가 있다. 하지만 갑자기 마이크로SD 카드가 망가지면 어떻게 할 것인가? GitHub에 올려둔 설치 문서를 보고 따라서 하면 되지만 매우 번거롭다. 나의 프로젝트에 흥미를 느끼고 따라서 하려는 사람도 이와 같은 절차를 거쳐야 할 것이다. 그러나 개발자인 나 자신은 이보다는 좀 더 편하게 복구를 했으면 한다.
그래서 오늘은 현재 정상 작동 중인 Fluid Ardule 시스템의 비상 복구 이미지를 만들어 보기로 했다. 그리고 사운드폰트 등 내가 2차적 배포를 하면 라이선스상 문제가 될 만한 것은 제외한 이미지를 작은 용량으로 만들어서 배포한다면 Fluid Ardule이 널리 알려지는 데 도움이 될 것이다. 이를 어디에 올릴지는 고민을 해 봐야 되겠지만.
이를 위해서 오프라인 매장에서 32GB 마이크로SD 카드를 하나 구입했는데(아래 사진의 4번), 그렇게 현명한 구매 행위는 아니었던 것으로 판명되었다. 다음부터는 온라인에서 구입하리라.
수 시간 동안의 시행착오를 거친 끝에 내린 결론은 위 사진에서 2번으로 표시한 카드가 표면에 인쇄된 것으로는 '최고급 제품'처럼 보이지만, 실제 성능은 알 수 없다는 것이다. 2번과 4번을 동일한 방법으로 테스트하였으나 오직 4번에 써 넣은 복구용 이미지만 부팅 및 Fluid Ardule 작동에 성공하였다. 이미지를 쓰는 데에도 4번 카드가 훨씬 적은 시간이 걸렸다.
ChatGPT에게 표면의 마킹으로부터 최대한 제품의 성능을 추측해 보라고 하였다.
1번은 Samsung 32 GB EVO microSDHC입니다. 주황색 EVO 디자인의 비교적 구형 세대이고, 전면에 microSDHC / U1 표시가 보입니다. 즉 32 GB이므로 SDHC 계열이며, UHS Speed Class 1(U1) = 최소 지속 쓰기 10 MB/s 보장 등급입니다. 사진에는 UHS 버스의 I 표시(UHS-I)도 확인됩니다. 반면 요즘 카드처럼 A1/A2 또는 V30 표시는 없습니다. 2021년에 Pi 3B와 같이 샀다는 설명을 고려하면 Fluid Ardule의 원본 시스템 카드로 쓰인 이력이 매우 자연스럽습니다. 다만 2021년에 구입했다고 해서 2021년형 제품이라는 뜻은 아닙니다. 디자인상 더 이전 세대 제품일 가능성이 큽니다.
2번 OLEVO 32 GB는 재미있는 카드입니다. 전면에서 V10, A1, U1, UHS-I 표시가 모두 읽힙니다. 따라서 명목상으로는 Video Speed Class V10 = 최소 지속 쓰기 10 MB/s, Application Performance Class A1, U1 카드입니다. A1은 단순 동영상 저장보다 Raspberry Pi 같은 랜덤 I/O 환경에서 의미가 있는데, 규격상 최소 1500 read IOPS / 500 write IOPS 요구 조건을 갖습니다. 네 카드 가운데 표시된 규격만 놓고 보면 Raspberry Pi OS용으로 가장 ‘그럴듯하게 포장된’ 카드입니다. 문제는 말씀하신 대로 카드 소켓 모듈에서 인식 문제가 있었고 세 번 구입했다는 실제 경험이죠. 이것은 인쇄된 속도 등급과 전기적 호환성·컨트롤러 품질·카드 간 편차가 별개의 문제라는 좋은 사례입니다. 사진만으로 OLEVO의 제조사나 NAND/컨트롤러 출처는 판단할 수 없습니다.
3번은 SanDisk 32 GB microSDHC 구형 카드입니다. 검은색 전면이고 microSDHC / UHS-I 표시는 명확합니다. 오른쪽 아래 원형 안의 표시는 사진 해상도상 정확한 판독이 조금 애매합니다(자세히 보면 오른쪽이 열린 원 내부에 4가 기록되어 있어서 4MB/sec의 Speed Class를 의미함). 전면에 U1, A1, V10 등의 현대적인 성능 등급 표시는 보이지 않습니다. 따라서 네 장 중 외관 정보만으로는 성능을 가장 적게 알 수 있는 카드입니다. 아래쪽에 희미한 레이저 각인이 있고 MADE IN CHINA는 읽힙니다. 이 각인을 더 선명하게 접사하면 제품 코드나 제조 로트 일부를 추적할 가능성이 있습니다. 2025년 다이소 구입품이라는 점은 흥미로운데, 판매 시점과 카드 설계 세대가 상당히 다를 수 있음을 보여 줍니다.
4번은 SanDisk Ultra 32 GB microSDHC입니다. 전면에 Class 10의 원 안 10 표시, U1, UHS-I가 모두 보입니다. 따라서 최소 지속 쓰기 등급은 역시 10 MB/s 계열입니다. 최대 100 MB/s는 카드 전면에서는 확인되지 않고 구입 당시 제품 사양에 근거한 것으로 보입니다(포장재에 인쇄되어 있었음). 이 속도는 보통 최대 순차 읽기 속도이며 쓰기 속도 100 MB/s를 의미하지 않습니다. 사진상 A1/A2 표시는 보이지 않습니다.
U1, A1, V10 등은 Speed Class의 성능 등급을 표현하는 것이다. 단, UHS-I은 버스 인터페이스 세대를 뜻한다. Fluid Ardule(라즈베리 파이 3B)에는 삼성이나 샌디스크와 같이 신뢰할 수 있는 제조사의 A1 + UHS-I + 32GB 카드면 충분하다.
|
|
| 그림 출처: SD Association Speed Class. |
많은 시행착오 끝에 정립한 응급용 이미지를 만드는 방법은 GitHub Fluid Ardule 프로젝트 사이트의 Fluid Ardule Disaster Recovery 문서에 정리하였다. 내용을 간단하게 소개해 보겠다.
32 GB 카드 전체를
dd로 복제하면 같은 ‘32 GB’ 카드라도 실제 섹터 수 차이 때문에 이미지가 들어가지 않을 수 있다. 그래서image-utils의image-backup을 이용하여 사용 중인 파일시스템만 담은 약 5.5 GB의 compact image를 만들고,image-check와 SHA-256 검증을 거쳤다.
이 이미지를 다른 microSD 카드(SanDisk Ultra 32GB, 위 카드 사진에서 4번)에 기록하여 Raspberry Pi 3B를 실제로 부팅했고, Fluid Ardule 실행과 오디오 출력을 확인했다. 첫 부팅 뒤 루트 파일시스템도 대상 카드의 약 29 GB 전체 용량으로 자동 확장되었다. 즉 단순히 ‘백업 파일을 만들었다’는 데서 끝나지 않고, 다른 카드에서 실제 부팅까지 확인한 재난복구 이미지를 확보한 것이다.
이 과정에서 microSD 카드의 품질 차이도 직접 경험했다. 같은 이미지를 기록해도 저가 카드(위 카드 사진의 2번 OLEVO)는 기록과 검증이 매우 느리고 결국 부팅하지 못한 반면, 새 SanDisk 카드에서는 훨씬 빠르게 기록되고 정상 부팅했다. 같은 32 GB라는 표기와 화려한 속도 등급이 카드의 신뢰성까지 보장하는 것은 아니었다.
오늘의 작업은 새로운 기능을 추가하는 개발은 아니었다. 오히려 지금까지 만든 것을 다시 살려낼 수 있는가를 확인하는 것이었다. 중국산 정체불명의 32GB 카드 하나가 자신의 쓸모없음을 증명하는 동안, Fluid Ardule에는 재난복구 절차가 확립되었다.











