Prawidłowe określenie rozmiaru partycji super jest ważne, aby można było aktualizować urządzenie. Rozmiar ma bezpośredni wpływ na to, ile aktualizacji można zainstalować na urządzeniu i ilu użytkowników może je zainstalować.
Należy wziąć pod uwagę kilka ważnych zmiennych. Pierwsza to rozmiar fabryczny, czyli rozmiar wszystkich partycji dynamicznych, gdy urządzenie jest po raz pierwszy flashowane. Druga to tempo wzrostu, czyli procentowy wzrost rozmiaru systemu operacyjnego w całym okresie, w którym można aktualizować urządzenie.
Ponadto urządzenia z Virtual A/B mogą podczas aktualizacji korzystać z miejsca na partycji /data, co należy wziąć pod uwagę przy określaniu rozmiaru partycji super. Jeśli na partycji /data potrzeba zbyt dużo miejsca, niektórzy użytkownicy nie będą mogli (lub nie będą chcieli) zainstalować aktualizacji. Jeśli jednak wiadomo, że większość użytkowników ma pewien procent wolnego miejsca, urządzenia mogą wygodnie odjąć to miejsce od partycji super. Urządzenia mogą też zagwarantować, że partycja /data nigdy nie będzie potrzebna, po prostu powiększając partycję super.
Poniżej znajdziesz kilka modeli, które pomogą Ci określić rozmiar partycji super na podstawie tych zmiennych.
Korzystanie z partycji /data
Virtual A/B zachęca do zmniejszenia partycji super, aby zwiększyć rozmiar partycji /data. Część tego miejsca jest potrzebna podczas aktualizacji. Aby zrozumieć wpływ na możliwość aktualizacji, musisz wiedzieć, jaki procent urządzeń będzie miał z czasem taką ilość wolnego miejsca. Określenie tej liczby jest w dużym stopniu zależne od sprzętu urządzenia i zachowania użytkowników. W przykładach poniżej ta liczba jest określana jako AllowedUserdataUse.
Bez kompresji
Bez kompresji pełna aktualizacja OTA wymaga zrzutu o mniej więcej takim samym rozmiarze jak system operacyjny, dlatego należy to wziąć pod uwagę przy określaniu rozmiaru partycji super:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Rozważmy na przykład urządzenie z Virtual A/B o rozmiarze fabrycznym 4 GB, oczekiwanym wzroście o 50% i wiedzą, że prawie wszyscy użytkownicy mają 1 GB wolnego miejsca (lub są gotowi zwolnić do 1 GB miejsca na aktualizację). W przypadku tego urządzenia rozmiar partycji super można określić w ten sposób:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Dlatego to urządzenie powinno mieć partycję super o rozmiarze 11 GB.
Z kompresją
W przypadku kompresji pełna aktualizacja OTA wymaga zrzutu o rozmiarze około 70% rozmiaru systemu operacyjnego:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
Rozważmy na przykład urządzenie skonfigurowane z kompresją Virtual A/B, o rozmiarze fabrycznym 4 GB, oczekiwanym wzroście o 50% i wiedzą, że prawie wszyscy użytkownicy mają 1 GB wolnego miejsca (lub są gotowi zwolnić do 1 GB miejsca na aktualizację). W przypadku tego urządzenia rozmiar partycji super można określić w ten sposób:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = Max(6GB, 6GB + 4.2GB - 1GB) = Max(6GB, 9.2GB) = 9.2GB
Dlatego to urządzenie powinno mieć partycję super o rozmiarze 9, 2 GB.
Bez korzystania z partycji /data
Jeśli chcesz mieć aktualizacje OTA, które nigdy nie wymagają miejsca na zrzut na partycji /data, określenie rozmiaru partycji super jest proste.
Bez kompresji
W przypadku urządzenia z Virtual A/B bez kompresji lub zwykłego urządzenia A/B:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Rozważmy na przykład urządzenie z Virtual A/B o rozmiarze fabrycznym 4 GB i oczekiwanym wzroście o 50%. Aby mieć pewność, że to urządzenie nigdy nie będzie używać partycji /data na potrzeby zrzutów OTA, obliczenia powinny wyglądać tak:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Dlatego to urządzenie powinno mieć partycję super o rozmiarze 12 GB.
Z kompresją
W przypadku urządzenia z Virtual A/B z kompresją:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
Rozważmy na przykład urządzenie z kompresją Virtual A/B o rozmiarze fabrycznym 4 GB i oczekiwanym wzroście o 50%. Aby mieć pewność, że to urządzenie nigdy nie będzie używać partycji /data na potrzeby zrzutów OTA, obliczenia powinny wyglądać tak:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Dlatego to urządzenie powinno mieć partycję super o rozmiarze 10, 2 GB.
Zastrzeżenia
Może się wydawać, że jeśli rozmiar fabryczny wynosi 4 GB, a ostateczna aktualizacja ma 5 GB, to partycja super powinna mieć 9 GB, a nie 10 GB. Jeśli jednak pierwsza i ostateczna aktualizacja mają po 5 GB, miejsce na partycji super może być niewystarczające na ostateczną aktualizację. W powyższych formułach zakłada się, że wzrost partycji może nastąpić w dowolnym momencie. Miejsce potrzebne do zastosowania ostatecznej aktualizacji może być takie samo jak miejsce wymagane do zastosowania pierwszej aktualizacji.
Pamiętaj, że współczynniki kompresji są szacunkowe. Obraz systemu operacyjnego może być lepiej lub gorzej skompresowany w zależności od jego zawartości. Jeśli używasz skompresowanego systemu plików, takiego jak EROFS, dodatkowa kompresja z Virtual A/B przynosi coraz mniejsze korzyści. W takim przypadku lepiej jest użyć jednej z formuł bez kompresji jako wskazówki.
Obliczanie rozmiaru
Aby znaleźć wartość FactorySize w poprzednich przykładach, dodaj do siebie rozmiary wszystkich partycji dynamicznych. Obrazy partycji dynamicznych AOSP to:
system.imgvendor.imgproduct.imgsystem_ext.imgvendor_dlkm.imgsystem_dlkm.img
Pamiętaj, aby obliczyć rozmiar na podstawie obrazów niesparsowanych. Podczas tworzenia Androida 12 lub starszego obrazy są domyślnie sparsowane i można je niesparsować za pomocą narzędzia simg2img.
Rozmiary partycji można też obliczyć na podstawie pakietu OTA. W ten sposób można też oszacować rozmiar zrzutu Virtual A/B dla każdej partycji:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
Możesz też użyć narzędzia do analizy OTA . To narzędzie nie przesyła żadnych plików i analizuje pakiety OTA lokalnie.
Aby znaleźć wartość ExpectedGrowth, użyj wcześniej wydanego urządzenia. Do obliczenia wzrostu użyj najwcześniejszego i najnowszego obrazu super.