Kullanıcı Verileri Kontrol Noktası

Android 10'da, kullanıcı verileri kontrol noktası (UDC) Android kablosuz ağa bağlıyken önceki durumuna dönmesini sağlar. (OTA) güncellemesi başarısız oldu. UDC kullanırken Android OTA güncellemesi başarısız olursa cihaz güvenli bir şekilde önceki durumuna dönebilirsiniz. Her ne kadar A/B güncellemeleri erken başlatma, geri alma için bu sorunu çözer kullanıcı verileri bölümü (/data üzerine eklenir) değiştirildiğinde desteklenmemektedir.

UDC, cihazın, yüklendikten sonra bile kullanıcı verileri bölümünü geri değiştirildi. UDC özelliği bunu kullanıldığında, dosya sistemi kontrol noktaları, bootloader A/B mekanizmasıyla entegrasyon ve aynı zamanda A/B olmayan güncellemeler, anahtar sürümü bağlama ve anahtar geri alma desteği önlemede çok etkilidir.

Kullanıcıya etkisi

UDC özelliği, daha az kullanıcı kaybettiği için kullanıcılar için OTA güncelleme deneyimini iyileştirir. OTA güncellemesi başarısız olduğunda bu kullanıcıların verilerini görebilirsiniz. Bu, destek çağrılarının sayısını azaltabilir güncelleme sürecinde sorunla karşılaşan kullanıcılardan. Ancak bir OTA güncelleme başarısız olursa kullanıcılar cihazın birçok kez yeniden başlatıldığını fark edebilir.

İşleyiş şekli

Farklı dosya sistemlerinde kontrol noktası işlevi

UDC, F2FS dosya sistemi için yukarı akışa kontrol noktası işlevini ekler. 4.20 Linux çekirdeği ve cihazlar tarafından desteklenen tüm yaygın çekirdeklere geri bağlantı verir Android 10 yüklü halde.

UDC, diğer dosya sistemlerinde dm_bow adlı bir cihaz eşleyici sanal cihazı kullanır kontrol noktası işlevi görür. dm_bow, cihaz ile dosya arasında durur bahsedeceğim. Bir bölümlendirme eklendiğinde, dosya sisteminin tüm ücretsiz bloklarda sorun kırpma komutları. dm_bow, bu trimlere ve kullanımlara müdahale eder ücretsiz bir engelleme listesi oluşturmalarına yardımcı olacaktır. Okuma ve yazma işlemleri daha sonra cihaza gönderilir değiştirilmez ancak yazmaya izin verilmeden önce geri yükleme için gereken veriler yedeklenir ücretsiz bloke kadar sunar.

Kontrol noktası süreci

checkpoint=fs/block işareti içeren bir bölüm eklendiğinde, Android çağrıları cihazın mevcut verileri geri yüklemesine izin vermek için sürücüde restoreCheckpoint kontrol noktası olabilir. init, daha sonraneedsCheckpoint cihaz bootloader A/B durumundadır veya güncellemeyi yeniden deneme seçeneğini ayarlamıştır sayısı. İkisinden biri doğruysa Android, ekleme eklemek için createCheckpoint öğesini çağırır işaretleyin veya dm_bow cihazı oluşturun.

Bölüm eklendikten sonra, kırpma işlemlerini yapmak için kontrol noktası kodu çağrılır. Ardından, başlatma işlemi normal şekilde devam eder. Android'de LOCKED_BOOT_COMPLETE mevcut kontrol noktasını ve güncellemeyi uygulamak için commitCheckpoint çağırıyor normal şekilde devam ediyor.

Keymaster anahtarlarını yönetme

Keymaster anahtarları, cihaz şifrelemesi veya başka amaçlar için kullanılır. Bunları yönetmek için tuşlarının kullanılması durumunda Android, kontrol noktası tamamlanana kadar anahtar silme çağrılarını geciktirir.

Güvenlik durumunu izleme

Durum arka plan programı, bir kontrol noktası olabilir. Health arka plan programı şu konumdadır: cp_healthDaemon Checkpoint.cpp içinde.

Durum arka plan programı, yapılandırılabilen aşağıdaki davranışlara sahiptir:

Kontrol noktası API'leri

Kontrol noktası API'leri UDC özelliği tarafından kullanılır. UDC tarafından kullanılan diğer API'ler için bkz. IVold.aidl.

geçersiz startCheckpoint(int yeniden deneyin)

Kontrol noktası oluşturur.

Çerçeve, güncelleme başlatmaya hazır olduğunda bu yöntemi çağırır. İlgili içeriği oluşturmak için kullanılan kontrol noktası, kullanıcı verileri gibi kontrol noktası olan dosya sistemlerinin sonra yeniden başlatma işleminden sonra R/W eklendi. Yeniden deneme sayısı pozitifse API, ve güncelleyici, geri alma işleminin geçerli olup olmadığını kontrol etmek için needsRollback numarasını arar. gerekli. Yeniden deneme sayısı -1 ise API A/B'ye ertelenir bootloader'ı dikkate alın.

Bu yöntem normal A/B güncellemesi yaparken çağrılmaz.

void payChanges()

Değişiklikleri kaydeder.

Çerçeve, yeniden başlatma sonrasında değişiklikler hazır olduğunda bu yöntemi çağırır azımsayabilirsiniz. Bu, verilerden önce çağrılır (resimler, video, SMS, sunucu alındı bilgisi) kullanıcı verilerine BootComplete tarihinden önce yazılır.

Kontrol noktası olan etkin bir güncelleme yoksa bu yöntemin herhangi bir etkisi olmaz.

abortChanges()

Yeniden başlatmaya zorlar ve kontrol noktasına geri döner. Tüm kullanıcı verisi değişikliklerini iptal eder ilk yeniden başlatmadan bu yana.

Çerçeve, bu yöntemi yeniden başlatmadan sonra, ancak commitChanges öncesinde çağırır. Bu yöntem çağrıldığında retry_counter azalır. Günlük girişleri elde edilir.

bool neededRollback()

Geri alma işleminin gerekli olup olmadığını belirler.

Kontrol noktası olmayan cihazlarda false değerini döndürür. Kontrol noktası cihazlarında true değerini döndürür sırasında başlatılacak.

UDC'yi uygulama

Referans uygulaması

UDC'nin nasıl uygulanabileceğiyle ilgili bir örnek için bkz. dm-bow.c Bu özellikle ilgili ek dokümanlar için bkz. dm-bow.txt.

Kurulum

init.hardware.rc dosyanızdaki on fs öğesinde şunlara sahip olduğunuzdan emin olun:

mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --early

init.hardware.rc dosyanızdaki on late-fs öğesinde şunlara sahip olduğunuzdan emin olun:

mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late

fstab.hardware dosyanızda, /data öğesinin latemount olarak etiketlendiğinden emin olun.

/dev/block/bootdevice/by-name/userdata              /data              f2fs
noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier
latemount,wait,check,fileencryption=ice,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,sysfs_path=/sys/devices/platform/soc/1d84000.ufshc,reservedsize=128M,checkpoint=fs

Meta veri bölümü ekle

UDC, bootloader'ın yeniden deneme sayısını depolamak için bir meta veri bölümü gerektirir ve tuşlarını kullanın. Bir meta veri bölümü oluşturun ve /metadata adresinde erken ekleyin.

fstab.hardware dosyanızda, /metadata adlı dosyanın earlymount olarak etiketlendiğinden emin olun veya first_stage_mount.

/dev/block/by-name/metadata           /metadata           ext4
noatime,nosuid,nodev,discard,sync
wait,formattable,first_stage_mount

Bölümlendirmeyi tüm sıfırlarla başlatın.

Aşağıdaki satırları BoardConfig.mk hedefine ekleyin:

BOARD_USES_METADATA_PARTITION := true
BOARD_ROOT_EXTRA_FOLDERS := existing_folders metadata

Sistem güncelleme

F2FS sistemleri

Verileri biçimlendirmek için F2FS kullanan sistemlerde F2FS sürümünüzün kontrol noktalarını destekler. Daha fazla bilgi için Kontrol noktası işlevi farklı dosya sistemlerine sahip olursunuz.

checkpoint=fs işaretini<fs_mgr_flags> cihaz /data konumuna takıldı.

F2FS harici sistemler

F2FS olmayan sistemler için çekirdek yapılandırmasında dm-bow etkinleştirilmelidir.

Şu öğe için fstab'in <fs_mgr_flags> bölümüne checkpoint=block işaretini ekleyin cihaz /data konumuna takıldı.

Günlükleri kontrol et

Günlük girişleri, Checkpoint API'leri çağrıldığında oluşturulur.

Doğrulama

UDC uygulamanızı test etmek için VtsKernelCheckpointTest VTS grubunu çalıştırın testler.