어답터블 스토리지

Android는 항상 SD 카드와 같은 외부 저장소 액세서리를 지원해 왔지만 이러한 액세서리는 그동안 단순한 파일 저장소로 제한되었습니다. 기존 외부 저장소는 비영구적이고 최소한의 데이터 보호 기능만 제공할 것으로 예상되었기 때문입니다. Android 6.0에는 외부 저장소 미디어를 내부 저장소처럼 작동하도록 채택하는 기능이 도입되었습니다.

외부 저장소 미디어가 채택되면 한 번에 하나의 Android 기기에서만 작동하도록 포맷되고 암호화됩니다. 미디어는 미디어를 채택한 Android 기기에 밀접하게 연결되므로 모든 사용자의 앱과 비공개 데이터를 모두 안전하게 저장할 수 있습니다.

사용자가 SD 카드와 같은 새 저장소 미디어를 채택 가능한 위치에 삽입하면 Android는 사용자에게 미디어를 어떻게 사용하려는지 묻습니다. 사용자는 미디어를 채택하여 포맷하고 암호화하도록 하거나 계속 원래대로 단순한 파일 저장소로 사용할 수 있습니다. 채택하기로 한 경우 플랫폼에서는 기본 공유 저장소 콘텐츠(일반적으로 /sdcard에 마운트됨)를 새로 채택된 미디어로 이전하여 내부 저장소의 중요한 공간을 확보할 수 있는 옵션을 제공합니다. MBR의 사용으로 인해 2TB로 제한되는 기존 저장소와 달리, 어답터블 스토리지는 GPT를 사용하므로 파일 저장용량 한도가 최대 9ZB에 달합니다.

개발자가 android:installLocation 속성을 통해 지원 의향을 나타낸 경우에만 앱을 채택된 저장소 미디어에 배치할 수 있습니다. 지원되는 앱이 새로 설치된 경우 앱은 여유 공간이 가장 많은 저장소 기기에 자동으로 배치되며, 사용자는 설정 앱에서 저장소 기기 간에 지원되는 앱을 이동할 수 있습니다. 채택된 미디어로 이동된 앱은 미디어가 연결 해제되어 있는 동안 기억되었다가 미디어가 다시 연결되면 돌아옵니다.

보안

플랫폼은 채택된 각 기기의 암호화 키를 무작위로 생성하여 Android 기기의 내부 저장소에 저장합니다. 이는 채택된 미디어를 내부 저장소만큼 안전하게 만들어 주는 효과를 발휘합니다. 키는 채택된 파티션 GUID를 기반으로 채택된 기기와 연결됩니다.

기기가 내부 저장소에서 파일 기반 암호화(FBE)를 사용하도록 구성되었다면 어답터블 스토리지는 FBE와 메타데이터 암호화를 모두 사용합니다. 그러지 않으면 어답터블 스토리지는 전체 디스크 암호화(FDE)를 사용합니다.

채택된 기기의 디스크 레이아웃은 SELinux 라벨 등의 내부 데이터 파티션을 밀접하게 미러링합니다. Android 기기에서 멀티 사용자를 지원하는 경우 채택된 저장소 기기도 내부 저장소와 동일한 격리 수준으로 멀티 사용자를 지원합니다.

채택된 저장소 기기의 콘텐츠는 이 저장소를 채택한 Android 기기에 밀접하게 연결되므로 암호화 키를 상위 기기에서 추출할 수 없어야 합니다. 따라서 저장소 기기를 다른 곳에 마운트할 수 없습니다.

기기에서 FBE를 사용하는 경우 어답터블 스토리지에서 FBE 및 메타데이터 암호화를 구성하는 방법은 FBE 문서메타데이터 암호화 문서를 참고하세요.

성능 및 안정성

실수로 인한 데이터 손실이나 손상을 피할 수 있도록 배터리 칸 안의 슬롯이나 보호 덮개 뒤쪽과 같은 안전한 위치의 외부 저장소 미디어만 채택을 고려해야 합니다. 특히 휴대전화나 태블릿에 연결된 USB 기기는 채택을 고려해서는 안 됩니다. 한 가지 일반적인 예외는 TV 형식의 기기에 연결된 외부 USB 드라이브입니다. 이는 TV 전체가 일반적으로 안정적인 위치에 설치되기 때문입니다.

사용자가 새 저장소 기기를 채택하면 플랫폼에서 벤치마크를 실행하여 성능을 내부 저장소와 비교합니다. 채택된 기기가 내부 저장소보다 현저히 느리면 플랫폼은 사용자에게 성능 저하 가능성에 관해 경고합니다. 이 벤치마크는 인기 Android 앱의 실제 I/O 동작에서 파생되었습니다. 현재 AOSP 구현에서는 단일 기준점을 벗어난 사용자에게만 경고를 표시하지만 기기 제조업체는 카드가 심하게 느린 경우 채택을 완전히 거부하는 등 이를 추가적으로 조정할 수 있습니다.

채택된 기기는 POSIX 권한 및 ext4 또는 f2fs와 같은 확장 속성을 지원하는 파일 시스템으로 포맷해야 합니다. 최적의 성능을 위해 플래시 기반 저장소 기기에는 f2fs 파일 시스템을 사용하는 것이 좋습니다.

주기적인 유휴 유지보수를 실행할 때 플랫폼은 내부 저장소와 마찬가지로 채택된 미디어에 FI_TRIM을 발행합니다. 최신 SD 카드 사양은 DISCARD 명령어를 지원하지 않습니다. 그러나 커널은 대신 SD 카드 펌웨어가 최적화 용도로 사용할 수 있는 ERASE 명령어로 이를 대체합니다.

테스트

어답터블 스토리지가 작동하는지 테스트하려면 이 CTS 테스트를 실행하세요.

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

기기에 내장형 슬롯이 없거나 USB 커넥터가 활성 adb 연결에 사용되고 있는 상황에서 USB 드라이브와 SD 카드의 동작을 확인하려면 다음을 사용하세요.

adb shell sm set-virtual-disk true