Android'in iki güncelleme mekanizması vardır: A/B (kusursuz) güncellemeler ve A/B olmayan güncellemeler. Kod karmaşıklığını azaltmak ve güncelleme sürecini iyileştirmek için Android 11'de tüm kullanıcılara sorunsuz güncellemeler sağlamak için sanal A/B aracılığıyla birleştirilmiş cihazlar için daha az depolama alanı sunar. Android 12 anlık görüntü alınan bölümleri sıkıştırmak için Sanal A/B sıkıştırması seçeneği sunar. Android 11 ve Android 12'de aşağıdakiler uygulayın:
- Sanal A/B güncellemeleri, A/B güncellemeleri gibi kusursuzdur. Sanal A/B güncellemeleri cihazın çevrimdışı ve kullanılamaz olduğu süreyi en aza indirme.
- Sanal A/B güncellemeleri geri alınabilir. Yeni işletim sistemi başlatılamazsa cihazlar otomatik olarak önceki sürüme geri döner.
- Sanal A/B güncellemeleri yalnızca farklı bölümleri vardır. Diğer güncellenebilir bölümler snapshotted.
Arka plan ve terminoloji
Bu bölümde, terminoloji tanımlanmış ve Google Ads'deki sanal A/B'dir.
Cihaz haritacısı
Cihaz eşleyici, Android'de sıklıkla kullanılan bir Linux sanal blok katmanıdır. Entegre
dinamik bölümlerin,
/system
, katmanlı cihazlardan oluşan bir yığındır:
- Yığının en altında fiziksel süper bölüm (örneğin,
/dev/block/by-name/super
). - Ortada, süper konumdaki blokları belirten bir
dm-linear
cihazı bulunur. değer, belirli bir bölümlendirmeyi temsil eder. Bu A/B cihazında/dev/block/mapper/system_[a|b]
veya A/B olmayan bir cihazda/dev/block/mapper/system
. - Üstte, doğrulanmış bölümler için oluşturulmuş bir
dm-verity
cihazı bulunur. Bu cihaz,dm-linear
cihazındaki engellemelerin imzalandığını doğrular sağlayabilir./dev/block/mapper/system-verity
olarak görünür ve kaynak olarak kullanılır çıkarım noktasının/system
ekleme noktasıdır.
Şekil 1'de /system
ekleme noktasının altındaki yığın gösterilmektedir.
Şekil 1. /system ekleme noktasının altında yığ
dm-anlık-görüntü
Sanal A/B, verilerin anlık görüntüsünü almak için bir cihaz eşleme modülü olan dm-snapshot
'den yararlanır.
durumu olabilir. dm-snapshot
kullanırken şurada dört cihaz bulunur:
oynat:
- Ana cihaz, anlık görüntü alınan cihazdır. Bu sayfada, temel alınan her zaman sistem veya satıcı gibi dinamik bir bölümdür.
- Temel cihazda yapılan değişiklikleri günlüğe kaydetmek için copy-on-yazma (COW) cihazı. Google herhangi bir boyutta olabilir, ancak temel cihaz.
- Anlık görüntü cihazı,
snapshot
hedefi kullanılarak oluşturulur. Yazar COW cihazına yazıldığından emin olmalısınız. Anlık görüntüden okur cihazdaki kullanım şekline bağlı olarak ana cihazdan veya COW cihazından Erişilen verilerin anlık görüntü tarafından değiştirilip değiştirilmediğini kontrol eder. - Kaynak cihaz,
snapshot-origin
hedefi kullanılarak oluşturulur. Okuma yeri: kaynak cihaz, doğrudan temel cihazdan okuma yapar. Kaynağa yazar cihaz doğrudan temel cihaza yazıyor, ancak orijinal veriler yedekleniyor COW cihazına yazın.
Şekil 2. dm-snapshot için cihaz eşlemesi
Sıkıştırılmış anlık görüntüler
Android 12 ve sonraki sürümlerde,
/data
bölümü yüksek olabilir. Sıkıştırılmış anlık görüntüleri şuradan etkinleştirebilirsiniz:
daha yüksek alan gereksinimlerini karşılamak için geliştirmeye başlayın./data
Sanal A/B sıkıştırılmış anlık görüntüleri, aşağıdaki bileşenlerin üzerine oluşturulur Android 12 ve sonraki sürümlerde kullanılabilen özellikler:
dm-user
, kullanıcı alanına olanak tanıyan FUSE benzeri bir çekirdek modülü devre dışı bırakabilirsiniz.snapuserd
, yeni bir anlık görüntü uygulamak için kullanılan bir kullanıcı alanı arka plan programı biçimindedir.
Bu bileşenler, sıkıştırmayı sağlar. aşağıdaki bölümlerde açıklanmıştır: Sıkıştırılmış anlık görüntüler için COW biçimi, dm-user ve Snapuserd.
Sıkıştırılmış anlık görüntüler için COW biçimi
Android 12 ve sonraki sürümlerde sıkıştırılmış anlık görüntüler COW biçimindedir. Çekirdeğin sıkıştırılmamış dosyalar için kullanılan yerleşik biçimine benzer anlık görüntülerin COW biçiminin bir dizi alternatif olan ve meta verileri ve verileri. Orijinal biçimin meta verileri yalnızca değiştir işlemine izin veriyor işlemler: Ana resimdeki X bloğunu Y bloğunun içeriğiyle değiştirin anlık görüntüde bulabilirsiniz. Sıkıştırılmış anlık görüntüler COW biçimi daha anlamlıdır ve aşağıdaki işlemleri destekler:
- Kopyala: Temel cihazdaki X bloğunun, Y bloğuyla değiştirilmesi gerekir. temel cihaz.
- Değiştir: Temel cihazdaki X ifadesinin, içerikle değiştirilmesi gerekir Y blokunun mevcut durumunu gösterir. Bu blokların her biri gz sıkıştırılmıştır.
- Sıfır: Temel cihazdaki X bloğu tamamen sıfırlarla değiştirilmelidir.
- ÖZELVEYA: COW cihazı, X bloku ve Y bloğunu bloke eder. (Android 13 ve sonraki sürümlerde kullanılabilir.)
Tam OTA güncellemeleri yalnızca değiştirme ve sıfır işlemlerinden oluşur. Artımlı OTA güncellemelerinde ayrıca copy işlemleri de olabilir.
Android 12'de dm kullanıcısı
dm kullanıcısı çekirdek modülü, userspace
ürününün cihaz eşleyici blokunu uygulamasını sağlar
cihazlar. Bir dm-kullanıcı tablo girişi,
/dev/dm-user/<control-name>
userspace
işlemi, cihazı yoklayarak
çekirdekten okuma ve yazma istekleri alma Her istekle ilişkilendirilmiş bir
kullanıcı alanının doldurulacağı (okuma için) veya yayılması (yazma için) için bir arabellek.
dm-user
çekirdek modülü, çekirdek için kullanıcı tarafından görülebilen yeni bir arayüz sağlar
Bu kod, upstream kernel.org kod tabanının bir parçası değildir. Bu tarihe kadar Google
Android'de dm-user
arayüzünü değiştirme hakkını saklı tutar.
Snapuserd
dm-user
için snapuserd
kullanıcı alanı bileşeni, Sanal A/B'yi uygular
sağlayabilirsiniz.
Sanal A/B'nin sıkıştırılmamış sürümünde (Android 11 ve önceki sürümlerde veya
(yalnızca Android 12'de sıkıştırılmış anlık görüntü seçeneği olmadan)
COW cihazı ham dosyadır. Sıkıştırma etkinleştirildiğinde COW işlevleri
yerine bir dm-user
cihazı olarak
snapuserd
arka plan programı.
Çekirdek, yeni COW biçimini kullanmıyor. Dolayısıyla snapuserd
bileşeni
Android COW biçimi ile çekirdeğin yerleşik biçimi arasındaki istekleri çevirir.
biçim:
Şekil 3. Android ve Kernel arasında çevirmen olarak anlık mesajlaşmanın akış diyagramı COW biçimleri
Bu çevirme ve sıkıştırma açma işlemleri hiçbir zaman diskte gerçekleşmez. snapuserd
bileşeni, çekirdekte gerçekleşen COW okuma ve yazma işlemlerine müdahale eder ve
bunları Android COW biçimini kullanarak uygular.
XOR sıkıştırması
Android 13 ve sonraki sürümlerin yüklü olduğu cihazlarda Varsayılan olarak etkin olan ÖZELVEYA sıkıştırma özelliği, kullanıcı alanını etkinleştirir. eski bloklar ve yeni bloklar arasında XOR sıkıştırılmış baytları depolamak için anlık görüntüler. Zaman Sanal A/B güncellemesinde bloktaki yalnızca birkaç bayt değiştirilir. Bu nedenle, XOR sıkıştırılmış depolama şeması, varsayılan depolama şemasından daha az alan kullanır anlık görüntüler tam 4K bayt depolamaz. Anlık görüntü boyutundaki bu azalma Çünkü XOR verileri birçok sıfır içerdiğinden ve ham veri işlemeye kıyasla sıkıştırılmaları daha kolaydır. veya blok verileri. Pixel cihazlarda XVEYA sıkıştırması anlık görüntü boyutunu% 25 oranında küçülterek %40.
Android 13 ve sonraki sürümlere geçen cihazlar için XOR sıkıştırmanın etkinleştirilmesi gerekir. Ayrıntılar için bkz. XOR sıkıştırma.
Sanal A/B sıkıştırma işlemleri
Bu bölümde, API'de kullanılan Sanal A/B sıkıştırma işlemi hakkında Android 13 ve Android 12.
Meta veri okuma (Android 12)
Meta veri, bir snapuserd
arka plan programı tarafından oluşturulur. Meta veri birincil olarak
birleştirilecek sektörleri temsil eden 8 baytlık iki kimliğin eşlemesi.
dm-snapshot
dilinde adı disk_exception
.
struct disk_exception {
uint64_t old_chunk;
uint64_t new_chunk;
};
Disk istisnası, eski bir veri parçası yeni bir parçayla değiştirildiğinde kullanılır.
snapuserd
arka plan programı, dahili COW dosyasını COW kitaplığından okur ve
dosyası, COW dosyasında bulunan COW işlemlerinin her biri için meta verileri oluşturur.
Meta veri okumaları, dm-
snapshot
cihazı oluşturulduğunda çekirdekteki dm-snapshot
öğesinden başlatılır.
Aşağıdaki şekilde, meta verilerin KS yolu için bir dizi şeması gösterilmektedir inşaat işleri.
4.Şekil Meta veri oluşturmada KS yolu için dizi akışı
Birleştirme (Android 12)
Başlatma işlemi tamamlandığında, güncelleme motoru, yuvayı başlatma olarak işaretler
başarılı olur ve dm-snapshot
hedefini
dm-snapshot-merge
hedef.
dm-snapshot
, meta verilerde adım adım ilerler ve her disk için bir birleştirme KS'si başlatır
kabul edersiniz. Aşağıda birleştirme KS yoluna ilişkin üst düzey bir genel bakış gösterilmektedir.
5. Şekil. KS yoluna genel bakış
Cihaz, birleştirme işlemi sırasında yeniden başlatılırsa birleştirme işlemi aynı ve birleştirme işlemi tamamlanır.
Cihaz haritalama katmanları
Android 13 ve sonraki sürümlerin yüklü olduğu cihazlarda
Sanal A/B sıkıştırmasında anlık görüntü ve anlık görüntü birleştirme işlemleri gerçekleştirilir
snapuserd
kullanıcı alanı bileşeni tarafından yapılır. Android'e geçen cihazlar için
13 ve sonraki sürümlerde bu özelliğin etkinleştirilmesi gerekir. Örneğin,
daha fazla bilgi için Userspace
birleştirme.
Aşağıda, sanal A/B sıkıştırma işlemi açıklanmaktadır:
- Çerçeve,
/system
bölümünü birdm-verity
cihazdan ekler. birdm-user
cihazın üzerine yığılıyor. Bu, her G/Ç anlamına gelir. kök dosya sistemindendm-user
hedefine yönlendirilir. dm-user
, G/Ç'yisnapuserd
kullanıcı alanı arka plan programına yönlendirir. G/Ç isteği.- Birleştirme işlemi tamamlandığında çerçeve şurada
dm-verity
daraltılır: üst kısmına (dm-linear
) (system_base
) eklenir vedm-user
kaldırılır.
6. Şekil. Sanal A/B sıkıştırma işlemi
Anlık görüntü birleştirme işlemi kesintiye uğrayabilir. Cihaz şu işlem sırasında yeniden başlatılırsa: yeniden başlatma işleminden sonra birleştirme işlemi devam eder.
Başlatma geçişleri
Sıkıştırılmış anlık görüntülerle başlatma yapılırken ilk aşamanın başlatılması gerekir
Bölümleri eklemek için snapuserd
. Bu durum bir soruna neden oluyor: sepolicy
yüklendiğinde
ve zorunlu kılındığında snapuserd
yanlış bağlama yerleştirilir ve okuma istekleri
her şeyi reddedip başarısız olabilirsiniz.
Bu sorunu gidermek için snapuserd
, aşağıdaki adımları uygulayarak init
ile kilit adımlarında geçiş yapar:
- İlk aşama
init
, RAM'densnapuserd
işlemini başlatır ve bir açık dosya tanımlayıcısına izin verir. - İlk aşama
init
, kök dosya sistemini sistem bölümüne geçirir. daha sonra,init
sistem kopyasını yürütür. init
sistem kopyası, birleştirilmiş sepolicy'i bir dizeye okur.Init
, ext4 destekli tüm sayfalardamlock()
yöntemini çağırır. Daha sonra cihaz eşleyici tablolarının yerini alır vesnapuserd
durur. Bundan sonra Kilitlenmeye neden olduğundan bölümlerden okunması yasaktır.snapuserd
,init
dosyasının açık tanımlayıcısını kullanarak arka plan programını doğru selinux bağlamıyla yeniden başlatır. Cihaz eşleştirme tabloları yeniden etkinleştirilmesi gerekir.- Başlatma,
munlockall()
yöntemini çağırır. KS'yi tekrar gerçekleştirmek güvenlidir.
Alan kullanımı
Aşağıdaki tabloda farklı OTA'lar için alan kullanımının karşılaştırması verilmiştir mekanizmalarını ele alalım.
Boyut Etkisi | A/B olmayan | A/B | Sanal A/B | Sanal A/B (sıkıştırılmış) |
---|---|---|---|---|
Orijinal Fabrika Resmi | 4,5 GB süper (3,8G resim + 700 milyon ayrılmış)1 | 9 GB süper (3, 8G + iki yuva için ayrılmış 700 milyon) | 4,5 GB süper (3,8G resim + 700 milyon ayrılmış) | 4,5 GB süper (3,8G resim + 700 milyon ayrılmış) |
Diğer statik bölümler | /cache | Yok | Yok | Yok |
OTA sırasında ek depolama alanı (OTA uygulandıktan sonra döndürülen alan) | /data üzerinde 1,4 GB | 0 | /data üzerinde 3,8 GB2 | /data üzerinde 2,1 GB2 |
OTA'yı uygulamak için gereken toplam depolama alanı | 5,9 GB3 (süper ve veri) | 9 GB (süper) | 8,3 GB3 (süper ve veri) | 6,6 GB3 (süper ve veri) |
1Piksel eşlemesine göre varsayılan düzeni gösterir.
2Yeni sistem görüntüsünün orijinalle aynı boyutta olduğu varsayılır.
3Alan gerekliliği, cihaz yeniden başlatılana kadar geçicidir.
Sanal A/B özelliğini uygulamak veya sıkıştırılmış anlık görüntü özelliklerini kullanmak için şuraya bakın: Sanal A/B'yi Uygulama