상시 구동 서버로 쓰고 있는 루팅 갤럭시 S9(SM-G960N)의 저장 공간이 빠듯해졌다. RAM도 4GB에 실제 스왑은 2GB뿐이라, “SD카드를 추가로 사서 스왑으로 쓰면 메모리 부족 문제까지 같이 해결되지 않을까” 하는 생각이 들었다. 결론부터 말하면 그렇게 하지 않기로 했다.

안드로이드는 이미 zram을 쓰고 있다

먼저 확인해야 했던 건 이 폰이 이미 스왑 비슷한 걸 쓰고 있는지였다.

cat /proc/swaps
free -h

/dev/block/zram0 항목이 보이면, 이미 zram(RAM 일부를 압축해서 스왑처럼 쓰는 방식)이 동작 중이라는 뜻이다. 디스크 기반 스왑이 아니라 RAM 안에서 압축·해제하는 방식이라, SD카드 스왑을 추가로 얹는 것과는 성격이 다르다.

SD카드를 Linux 스왑으로 쓰면 안 되는 이유

몇 가지 이유로 SD카드 스왑은 포기했다.

  • 쓰기 내구성: SD카드는 일반 SSD보다 쓰기 수명이 훨씬 짧다. 스왑은 쓰기·지우기가 매우 빈번한 용도라 카드 수명을 급격히 깎아먹는다.
  • 속도: SD카드의 랜덤 읽기/쓰기 속도는 내장 스토리지에 크게 못 미친다. 스왑이 자주 발생하면 오히려 체감 성능이 더 나빠질 수 있다.
  • 포맷 문제: SD카드를 Linux 스왑 파티션으로 쓰려면 ext4 같은 포맷이 필요한데, 이건 안드로이드의 “적응형 스토리지(adoptable storage)“로 전환해야 한다는 뜻이고, 그러면 카드가 이 폰 전용으로 잠겨버려 다른 기기에서 못 읽는다.

거기다 멀티 스왑 우선순위(swapon -p <priority>) 기능이 있긴 하지만, 이건 “이 프로세스는 이 스왑을 써라"처럼 프로세스별로 라우팅해주는 기능이 아니다. oom_score_adj나 포그라운드 서비스 트릭으로 비슷하게 흉내 낼 순 있어도 정확한 제어는 아니다.

zram을 더 키우면 되지 않을까?

zram 크기를 늘리는 것도 고려했지만 트레이드오프가 만만치 않다.

  • 압축·해제에 CPU를 쓰는데, 이 폰의 Exynos 9810은 이미 발열이 심한 칩이다.
  • 압축된 데이터도 결국 물리 RAM을 차지한다 — “공짜 메모리"가 아니다.
  • 너무 크게 잡으면 스와핑이 과도해지는 스래싱(thrashing) 위험이 있다. 보통 물리 RAM의 50~100% 수준을 권장 범위로 본다.
  • 커널/Magisk 모듈 레벨의 조정이라 잘못 건드리면 부팅 불가 상태로 이어질 위험도 있다.

최종 결정: SD카드는 순수 저장소로만

결국 SD카드는 exFAT 포맷의 순수 저장소 확장 용도로만 쓰기로 했다. 실행 파일(예: Iris.apk, iris_control_termux)은 exFAT에 실행 비트(exec bit)가 없어서 SD카드에 두면 실행이 안 된다 — 이런 실행 파일들은 계속 내장 저장소에 남겨두고, 로그·백업·다운로드 같은 것들만 SD카드로 옮기는 방식이다.

용량은 왜 256GB인가

갤럭시 S9/S9+의 공식 지원 microSD 용량은 최대 400GB다 (SamMobile, 2018년 스펙 발표 기준). 512GB 이상 카드도 비공식적으로 동작하는 사례가 있지만 보증 대상은 아니다.

속도 등급(UHS-I/II, A1/A2, Class 10)은 호환성과 무관하다 — UHS-II 카드를 꽂아도 그냥 UHS-I 속도로 동작할 뿐 못 쓰는 게 아니다. 호환성 리스크는 오직 공식 지원 용량을 크게 초과할 때만 생긴다.

그래서 공식 지원 한도(400GB) 안에서, 이 폰이 활용하지도 못할 속도 등급에 웃돈을 주지 않는 선에서 256GB Class 10 UHS-I 카드를 최종 선택했다. 용량과 가성비의 균형점이었다.