Android 11은 조용히 다시 시작 기능을 지원합니다. 조용히 다시 시작 기능은 재부팅이 필요한 업데이트(예: APEX 패키지 업데이트)를 적용하는 데 사용되는 사용자 공간에서 프로세스가 런타임 재시작하는 것을 말합니다. 현재 조용히 다시 시작은 userdata
가 마운트된 이후에 시작된 프로세스로 제한됩니다.
조용히 다시 시작은 다음과 같은 방법으로 요청됩니다.
PowerManager
에서PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
호출셸에서
adb shell svc power reboot userspace
또는adb reboot userspace
사용
조용히 다시 시작이 시작되면 사용자 인증 정보가 암호화된 저장소는 잠금 해제 상태로 유지됩니다.
기기가 조용히 다시 시작을 지원하는 경우 PowerManager.isRebootingUserspace()
API 메서드는 true
를 반환하고 시스템 속성 init.userspace_reboot.is_supported
의 값은 1
입니다.
기기가 조용히 다시 시작을 지원하지 않는 경우 PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
, adb reboot
userspace
, adb shell svc power reboot userspace
호출이 실패합니다.
조용히 다시 시작 실행
PowerManager
또는 셸을 통해 조용히 다시 시작이 요청되면 init
는 다음 단계를 실행합니다.
sys.powerctl=reboot,userspace
를 수신합니다.별도의
UserspaceRebootWatchdogThread()
프로세스를 포크하여 조용히 다시 시작을 모니터링합니다.조용히 다시 시작에 영향을 미칠 수 있는 모든 시스템 속성을 재설정하는
userspace-reboot-requested
작업을 트리거합니다. 영향을 받는 속성:sys.usb.config
sys.usb.state
sys.boot_completed
dev.bootcomplete
sys.init.updatable_crashing
sys.init.updatable_crashing_process_name
apexd.status
sys.user.0.ce_available
sys.shutdown.requested
service.bootanim.exit
부팅 시퀀스 중에 위의 속성을 다시 설정해야 합니다. 필요한 경우 추가 속성을 재설정할 수 있습니다. 예는
rootdir/init.rc
에서on userspace-reboot-requested
작업을 참고하세요.다음 작업을 실행하는
DoUserspaceReboot
함수를 실행합니다.userdata
가 마운트된 후 시작된 프로세스로SIGTERM
을 전송하고 프로세스가 중지될 때까지 기다립니다.- 제한 시간에 도달하면
SIGKILL
을 전송하여 실행 중인 프로세스를 종료합니다. /system/bin/vdc volume reset
을 호출합니다.- zRAM 지원 기기를 마운트 해제합니다.
- 활성 APEX 패키지를 마운트 해제합니다.
- 부트스트랩 마운트 네임스페이스로 다시 전환됩니다.
userspace-reboot-resume
작업을 트리거합니다.
조용히 다시 시작 전에 파일 시스템 체크포인트가 요청되었다면 userspace-reboot-fs-remount
작업 중에 userdata
가 체크포인트 모드로 다시 마운트됩니다(세부정보는 다음 섹션 참고). sys.boot_completed property
가 1
로 설정되면 조용히 다시 시작이 고려됩니다. 조용히 다시 시작이 끝나면 디스플레이는 꺼진 상태로 유지되고 명시적인 사용자 상호작용이 있어야 디스플레이의 절전 모드를 해제할 수 있습니다.
파일 시스템 체크포인트
조용히 다시 시작 전에 파일 시스템 체크포인트가 요청되었다면 조용히 다시 시작 중에 userdata
가 체크포인트 모드로 다시 마운트됩니다.
재마운트 로직은 fs_mgr_remount_userdata_into_checkpointing
함수에 구현되며 체크포인트 메서드마다 다릅니다. 특히 userdata
가 다음을 지원하는 경우:
파일 시스템 수준 체크포인트(예:
f2fs
) -userdata
가checkpoint=disable
옵션으로 다시 마운트됩니다.블록 수준 체크포인트(예:
ext4
) -/data
가 마운트 해제되고 이 항목이 마운트된 모든 상위 기기의 매퍼 기기가 삭제됩니다. 그다음으로userdata
가 일반 체크포인트 부팅에 사용된 것과 동일한 코드 경로를 사용하여 마운트됩니다.
사용자 인증 정보가 암호화(CE)된 키와 기기가 암호화(DE)된 키를 파일 시스템 수준의 키링으로 관리하는 경우에는 userdata
가 마운트 해제되면 키가 손실됩니다. 파일 시스템 키링에 키를 설치할 때 키 복원을 허용하기 위해 vold
는 fscrypt-provisioning
유형의 동일한 키를 세션 수준 키링에도 설치합니다. init_user0
가 호출되면 vold
는 파일 시스템 키링에 키를 재설치합니다.
하드 재부팅으로 대체
조용히 다시 시작으로 인해 기기가 사용 불가한 상태가 되지 않도록 Android 11에서는 다음 조건 중 하나에 해당할 때 하드 재부팅으로 대체됩니다.
- 지정된 제한 시간 내에 기기가 조용히 다시 시작을 시작하지 못합니다(즉,
sys.init.userspace_reboot.in_progress=1
). - 지정된 제한 시간 내에 프로세스가 중지되지 못합니다.
/system/bin/vdc volume reset
작업이 실패합니다.- zRAM 기기의 마운트 해제가 실패합니다.
- 활성 APEX 패키지가 올바르지 않게 마운트 해제됩니다.
userdata
를 체크포인트 모드로 다시 마운트하려는 시도가 실패합니다.- 지정된 제한 시간 내에 기기가 부팅되지 못합니다(즉,
sys.boot_completed=1
).
기기별 구성
다음 속성 값을 변경하여 조용히 다시 시작의 일부 속성을 조정할 수 있습니다.
init.userspace_reboot.is_supported
는 기기가 조용히 다시 시작을 실행할 수 있는 시점을 제어합니다. 이 속성 값이false
또는0
이거나 지정되지 않은 경우 다시 시작 시도가 거부됩니다.init.userspace_reboot.sigkill.timeoutmillis
는SIGKILL
신호를 수신한 프로세스가 중지하기 위한 제한 시간(단위: 밀리초)을 제어합니다. 프로세스 중 하나가 지정된 제한 시간 내에 중지되지 않으면 하드 재부팅으로 대체됩니다.init.userspace_reboot.sigterm.timeoutmillis
는SIGTERM
신호를 수신한 프로세스가 종료하기 위한 제한 시간(단위: 밀리초)을 제어합니다. 지정된 제한 시간 내에 종료되지 않은 모든 프로세스는SIGKILL
신호를 수신합니다.init.userspace_reboot.started.timeoutmillis
는 조용히 다시 시작을 시작하기 위한 제한 시간(단위: 밀리초)을 제어합니다(즉,sys.init.userspace_reboot.in_progress=1
). 기기가 지정된 제한 시간 내에 조용히 다시 시작을 시작하지 못하면 하드 재부팅으로 대체됩니다.init.userspace_reboot.userdata_remount.timeoutmillis
는userdata
마운트 해제를 위한 제한 시간(단위: 밀리초)을 제어합니다. 기기가 지정된 제한 시간 내에userdata
를 마운트 해제하지 못하면 하드 재부팅으로 대체됩니다.init.userspace_reboot.watchdog.timeoutmillis
는 기기가 성공적으로 부팅하기 위한 제한 시간을 제어합니다(즉,sys.boot_completed=1
). 기기가 지정된 제한 시간 내에 부팅하지 못하면 하드 재부팅으로 대체됩니다.
조용히 다시 시작 중 애니메이션 맞춤설정
조용히 다시 시작의 참조 구현에는 조용히 다시 시작 중에 표시되는 애니메이션을 맞춤설정할 수 있는 기능이 들어 있습니다.
userspace-reboot-fs-remount
작업이 끝나면 init
가 bootanim
서비스를 시작합니다. 이 서비스는 다음 애니메이션 파일이 있는지 나열된 순서대로 찾고 찾은 첫 번째 파일을 재생합니다.
/product/media/userspace-reboot.zip
/oem/media/userspace-reboot.zip
/system/media/userspace-reboot.zip
조용히 다시 시작을 위한 특정 애니메이션 파일이 지정되지 않으면 bootanim
에서 기본 android
애니메이션을 표시합니다.
테스트
Android 11에는 조용히 다시 시작의 참조 구현이 포함되어 있습니다. 또한 UserspaceRebootHostTest
에서 CTS 테스트를 사용하여 조용히 다시 시작을 확인할 수 있습니다.