블록 기반 OTA

Android 5.0을 실행하는 새 기기에 블록 기반 OTA(무선) 업데이트를 사용 설정할 수 있습니다. OTA는 OEM이 원격으로 기기의 시스템 파티션을 업데이트하는 메커니즘입니다.

  • Android 5.0 이상 버전은 블록 OTA 업데이트를 사용하여 각 기기가 동일한 파티션을 사용하도록 합니다. 개별 파일을 비교하고 바이너리 패치를 계산하는 대신 블록 OTA는 전체 파티션을 하나의 파일로 처리하고 단일 바이너리 패치를 계산하여 결과 파티션에 의도한 비트가 정확히 포함되도록 합니다. 이렇게 하면 빠른 부팅 또는 OTA를 통해 기기 시스템 이미지의 상태가 동일하게 유지됩니다.
  • Android 4.4 이전 버전에서는 파일 OTA 업데이트를 사용했는데, 이 방식은 기기에 유사한 파일 콘텐츠, 권한, 모드를 포함하도록 했지만 타임스탬프와 같은 메타데이터 및 기본 저장소의 레이아웃은 업데이트 방법에 따라 기기마다 다를 수 있었습니다.

블록 OTA는 각 기기가 동일한 파티션을 사용하도록 하므로 dm-verity를 사용하여 암호화 방식으로 시스템 파티션에 서명하도록 합니다. dm-verity에 관한 자세한 내용은 자체 검사 부팅을 참고하세요.

참고: dm-verity를 사용하려면 작동하는 블록 OTA 시스템이 있어야 합니다.

권장사항

Android 5.0 이상으로 출시되는 기기의 경우 공장 출고 시 ROM에서 블록 OTA 업데이트를 사용합니다. 후속 업데이트를 위한 블록 기반 OTA를 생성하려면 --block 옵션을 ota_from_target_files에 전달합니다.

Android 4.4 이하로 출시된 기기의 경우 파일 OTA 업데이트를 사용합니다. Android 5.0 이상의 전체 블록 OTA를 전송하여 기기를 전환할 수 있지만 증분 OTA보다 훨씬 큰 전체 OTA를 전송해야 하므로 이 방법은 권장되지 않습니다.

dm-verity는 Android 5.0 이상을 실행하는 새 기기에서만 찾을 수 있는 부트 로더 지원을 필요로 하므로 기존 기기에서는 dm-verity를 사용 설정할 수 없습니다.

Android OTA 시스템(OTA를 생성하는 복구 이미지 및 스크립트)에서 작업하는 개발자는 android-ota@googlegroups.com 메일링 리스트를 구독하여 변경사항을 놓치지 않고 파악할 수 있습니다.

파일과 블록 OTA

파일 기반 OTA를 실행하는 동안 Android는 파일 시스템 계층의 시스템 파티션 콘텐츠를 파일 단위로 변경하려고 시도합니다. 업데이트 시 일관된 순서로 파일을 쓰기, 일관된 마지막 수정 시간 또는 슈퍼 블록이나 블록 기기의 동일한 위치에 블록 배치를 보장하지 않습니다. 따라서 파일 기반 OTA는 dm-verity 지원 기기에서 실패하고, OTA 시도 후에는 기기가 부팅되지 않습니다.

블록 기반 OTA를 실행하는 동안 Android는 두 파일 세트가 아닌 두 블록 이미지 간의 차이를 기기에 제공합니다. 업데이트는 다음 방법 중 하나를 사용하여 블록 수준, 즉 파일 시스템 아래에서 상응하는 빌드 서버를 기준으로 기기 빌드를 확인합니다.

  • 전체 업데이트. 전체 시스템 이미지를 복사하는 작업은 간단하며 패치 생성을 쉽게 만들지만 큰 이미지를 생성하여 패치를 비싸게 만들 수 있습니다.
  • 증분 업데이트. 바이너리 차이점 도구를 사용하면 더 작은 이미지가 생성되고 패치를 쉽게 적용할 수 있지만 패치 자체 생성 시 메모리가 많이 소모됩니다.

참고: adb fastboot는 기기에 전체 OTA와 정확히 동일한 비트를 배치하므로 플래싱이 블록 OTA와 호환됩니다.

수정되지 않은 시스템 업데이트

Android 5.0을 실행하는 시스템 파티션이 수정되지 않은 기기의 경우 블록 OTA의 다운로드 및 설치 프로세스는 파일 OTA의 경우와 동일합니다. 그러나 OTA 업데이트 자체에는 다음과 같은 차이점이 하나 이상 포함될 수 있습니다.

  • 다운로드 크기. 전체 블록 OTA 업데이트는 전체 파일 OTA 업데이트와 크기가 거의 동일하며, 증분 업데이트는 불과 몇 MB 더 클 수 있습니다.

    OTA 크기 비교

    그림 1. Android 5.0 및 Android 5.1 버전 간 Nexus 6 OTA 크기 비교(타겟 빌드 변경사항이 다양함)

    일반적으로 증분 블록 OTA 업데이트는 다음과 같은 이유로 증분 파일 OTA 업데이트보다 큽니다.

    • 데이터 보존. 블록 기반 OTA는 파일 기반 OTA보다 더 많은 데이터(파일 메타데이터, dm-verity 데이터, ext4 레이아웃 등)를 보존합니다.
    • 계산 알고리즘 차이. 파일 OTA 업데이트에서 파일 경로가 두 빌드에서 동일하면 OTA 패키지에는 이 파일에 관한 데이터가 없습니다. OTA 블록 업데이트에서는 패치 계산 알고리즘의 품질과 소스 시스템 및 타겟 시스템의 파일 데이터 레이아웃에 따라 파일을 약간 변경할지 또는 아예 변경하지 않을지 결정합니다.
  • 결함 있는 플래시 및 RAM 민감도. 파일이 손상된 경우 파일 OTA는 손상된 파일을 건드리지 않는 한 성공하지만 블록 OTA는 시스템 파티션의 손상을 감지한 경우 실패합니다.

수정된 시스템 업데이트

Android 5.0을 실행하는 시스템 파티션이 수정된 기기의 경우:

  • 증분 블록 OTA 업데이트 실패. 시스템 파티션은 adb remount 중에 또는 멀웨어로 인해 수정될 수 있습니다. 파일 OTA는 소스 또는 타겟 빌드의 일부가 아닌 파일의 추가와 같은 일부 파티션 변경을 허용합니다. 그러나 블록 OTA는 파티션에 추가를 허용하지 않으므로 향후 OTA를 사용 설정하려면 모든 시스템 파티션 수정을 덮어쓰는 전체 OTA를 설치하거나 새 시스템 이미지를 플래시해야 합니다.
  • 수정된 파일을 변경하려고 하면 업데이트에 실패. 파일 및 블록 OTA 업데이트의 경우 OTA가 수정된 파일을 변경하려고 하면 OTA 업데이트에 실패합니다.
  • 수정된 파일에 액세스하려고 하면 오류 발생(dm-verity만). 파일 및 블록 OTA 업데이트의 경우, dm-verity가 사용 설정되어 있고 OTA가 시스템 파일 시스템의 수정된 부분에 액세스하려고 하면 OTA에서 오류가 발생합니다.