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:
ro.sys.cp_msleeptime
: Cihazın disk kullanımını ne sıklıkta kontrol ettiğini kontrol eder.ro.sys.cp_min_free_bytes
: Durum arka plan programının aradığı minimum değeri kontrol eder.ro.sys.cp_commit_on_full
: Durum arka plan programının cihazı yeniden mi başlatacağını yoksa ve disk dolduğunda devam eder.
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.