Android System & AOSP Engineering/Debug, ADB & System Tools

안드로이드 ADB 데이터 백업 및 복원 방법: 전체 백업부터 앱 데이터 추출까지

임베디드 친구 2025. 2. 22. 09:20
반응형

안드로이드 기반의 시스템을 개발하거나 장비를 테스트하다 보면, 기기에 저장된 환경 설정과 데이터를 다른 단말기로 그대로 이관해야 하는 상황이 자주 발생합니다. 특히 펌웨어 업데이트를 수행하거나 기기를 공장 초기화하기 전에는 유저 데이터의 유실을 막기 위한 백업 프로세스가 필수적입니다. 일반적인 가전 제품이나 상용 스마트폰은 제조사에서 제공하는 그래픽 기반의 백업 툴을 사용하면 되지만, 개발용 에뮬레이터나 임베디드 보드 환경에서는 터미널 명령어를 이용한 접근이 훨씬 효율적입니다. 이번 포스팅에서는 ADB(Android Debug Bridge) 환경에서 제공하는 표준 백업 메커니즘을 알아보고, 특정 애플리케이션의 데이터 영역 및 로우 레벨 파티션을 덤프하고 복원하는 다양한 기법들을 다루어 보겠습니다.

Generated by Gemini AI.

핵심 요약

  • adb backup 명령어를 옵션과 함께 구성하면 앱 바이너리 파일과 내부 공유 저장소 데이터를 통틀어 하나의 통합 백업 파일(.ab)로 추출할 수 있습니다.
  • 샌드박스 내부의 특정 애플리케이션 전용 데이터 영역은 리눅스 표준 압축 아카이브 툴인 tar 명령을 연동하여 선별적으로 백업과 복원이 가능합니다.
  • /sdcard 파티션 내부의 일반 미디어 파일과 다운로드 폴더는 adb pull 및 push 명령을 활용하여 로컬 PC 폴더 구조와 일대일로 동기화합니다.

1. ADB 데이터 제어 명령어 및 옵션 요약

안드로이드 시스템 내에서 수행할 수 있는 백업 및 복원 레이어별 핵심 명령어 리스트입니다.

제어 레이어 실행 명령어 형식 적용 범위 및 상세 설명
통합 전체 백업 adb backup -apk -shared -all -f backup.ab 시스템에 등록된 전체 사용자 앱의 패키지 파일과 내부 저장소 데이터를 묶어 단일 파일로 생성합니다.
통합 백업 복원 adb restore backup.ab 백업본 아카이브를 단말기에 역주입하여 애플리케이션 상태를 원복합니다.
앱 데이터 백업 adb shell tar -cvf <저장_경로.tar> <대상_폴더> 특정 앱의 내부 데이터 샌드박스 영역을 아카이브 구조로 압축하여 보관합니다.
앱 데이터 복원 adb shell tar -xvf <저장_경로.tar> -C / 압축된 아카이브를 원본 도메인 경로 기준으로 풀어서 데이터를 이식합니다.
블록 파티션 덤프 adb shell dd if=<소스_블록> of=<타깃_이미지> 시스템 영역이나 특정 로우 파티션의 바이너리 데이터를 이미지 파일 형태로 정밀 복사합니다.
미디어 전송 (PC행) adb pull /sdcard/ <PC_저장_경로> 기기 내부 저장소의 사진, 다운로드 등 일반 유저 파일들을 PC로 일괄 다운로드합니다.
미디어 전송 (기기행) adb push <PC_소스_경로> /sdcard/ PC에 보관 중인 원본 폴더 및 파일 트리 구조를 단말기 내부 공간으로 밀어 넣습니다.

2. 작업 시나리오별 실무 활용 가이드

전체 데이터 통합 아카이빙

가장 직관적으로 기기 전체의 복사본을 만드는 명령 형태입니다. 단말기 내에 금융 앱처럼 보안 플래그가 지정된 특수 앱을 제외한 일반 애플리케이션 상태가 보존됩니다.

Bash
 
# 전체 백업 수행 (명령 실행 후 스마트폰 화면에서 백업 승인 및 암호 설정 팝업 확인 필요)
adb backup -apk -shared -all -f my_device_backup.ab

# 백업 파일 기반 원복 수행
adb restore my_device_backup.ab

특정 타깃 애플리케이션 데이터 독립 백업

패키지 매니저가 관리하는 앱의 로컬 환경 설정 파일(Shared Preferences)이나 데이터베이스를 타깃팅하여 백업하는 방식입니다.

  • 백업 예시: adb shell tar -cvf /sdcard/app_save.tar /data/data/com.example.app (해당 도메인을 사용하는 앱의 로컬 샌드박스 저장소를 압축합니다.)
  • 복원 예시: adb shell tar -xvf /sdcard/app_save.tar -C / (루트 디렉터리를 기준으로 압축을 해제하여 기존 경로에 파일들을 원래대로 배치합니다.)

로우 레벨 디바이스 파티션 백업 (dd 활용)

리눅스의 데이터 덤프 유틸리티인 dd를 이용해 가상 메모리 블록 파티션 전체를 바이너리 이미지 단위로 추출하는 방법입니다. 시스템 파일 시스템 구조를 통째로 복제할 때 사용합니다.

Bash
 
# 시스템 파티션 영역을 이미지 파일로 백업
adb shell dd if=/dev/block/mmcblk0 of=/sdcard/system_raw.img

# 백업된 이미지를 원래 파티션 블록에 그대로 복원
adb shell dd if=/sdcard/system_raw.img of=/dev/block/mmcblk0

개발을 위한 팁

  • 백업 매니저 로그 확인: adb backup이 동작하는 도중 진행 상태나 에러 유무를 실시간으로 모니터링하고 싶다면 다른 터미널 세션을 열고 adb logcat -s BackupManagerService 명령어를 수행해 보시기 바랍니다. 안드로이드 백업 시스템 서브클래스가 현재 어떤 패키지를 처리 중인지 상세하게 출력해 줍니다.
  • 특정 앱만 adb backup으로 추출하기: -all 옵션 대신 패키지 이름을 직접 지정하면 단 하나의 앱만 .ab 파일로 담아낼 수 있습니다. 예를 들어 adb backup -f single_app.ab com.example.app 형태로 작성하면 용량을 적게 차지하면서 필요한 패키지의 샌드박스 환경만 골라낼 수 있습니다.
  • tar 전송 효율화: adb shell tar를 이용해 단말기 내에서 직접 아카이브를 만든 후 adb pull로 가져오는 방식은 단말기 저장 공간을 이중으로 점유하게 됩니다. PC 터미널 환경이 리눅스나 맥OS 기반이라면 파이프라인을 사용해 adb shell "tar -cf - /data/data/com.example.app" > local_backup.tar 와 같이 기기 내 공간 소모 없이 PC로 압축 데이터를 즉시 스트리밍하여 저장하는 방식을 추천합니다.

흔히 하는 실수

  • 최신 안드로이드 버전에서의 백업 정책 변경: 안드로이드 12(API 31) 이상 빌드가 적용된 기기부터는 구글의 개인정보 및 데이터 보호 정책 강화로 인해 adb backup 명령어의 동작이 기본적으로 제한되거나 차단됩니다. 앱 매니페스트 속성 세팅에서 android:allowBackup="true" 옵션이 명시적으로 켜져 있지 않은 애플리케이션들은 백업 대상에서 누락되므로 최신 타깃 기기를 다룰 때는 빌드 옵션을 사전에 점검해야 합니다.
  • data/data 접근 시 권한 부족(Permission Denied) 오류: 루팅이 되지 않은 순정 양산형 단말기나 유저 빌드(User Build)로 마감된 시스템에서는 일반적인 adb shell 계정 권한으로 /data/data/ 하부의 앱 격리 공간에 접근할 수 없습니다. 이 경로를 타겟팅하여 tar 압축을 시도하면 권한 거부 에러가 떨어지므로, 해당 작업을 하려면 반드시 엔지니어링 빌드(Eng Build) 콘솔에서 루트 권한(adb root)을 획득한 상태여야 합니다.
  • dd 명령어 사용 시 입출력(if/of) 경로 혼동: 데이터 덤프 툴인 dd 명령어의 인자를 줄 때 입력 소스(if)와 출력 대상(of)의 경로를 거꾸로 기재하면 치명적인 참사가 일어납니다. 복원 작업을 하려다가 빈 이미지나 이전 상태의 파일을 시스템 블록 파티션에 오버라이트해 버리면 부트 영역이 영구 파괴되어 장비가 복구 불가능한 하드 벽돌 상태가 될 수 있으므로 엔터키를 치기 전 소스와 타깃 경로를 교차 검증해야 합니다.

결론

ADB가 지원하는 파일 이관 및 백업 서브시스템은 단말기 파티션 구조에 종속되지 않고 개발자가 원하는 레이어별로 맞춤형 데이터 스냅샷을 생성할 수 있는 유연함을 제공합니다. 단순 미디어 백업에서부터 시스템 엔지니어를 위한 로우 레벨 이미지 백업까지 명확한 명령 구조를 확립해 두면 장비 파손이나 교체 주기 시 인프라를 원복하는 데 걸리는 공수를 획기적으로 줄일 수 있습니다. 본문에 나열된 호환성 제약과 권한 처리 가이드라인을 기반으로 안전하고 신뢰성 높은 단말기 백업 스크립트를 빌드하여 적용해 보시기 바랍니다.

반응형