Prawidłowe określenie rozmiaru partycji super
ma znaczenie dla możliwości aktualizacji urządzenia. Rozmiar ma bezpośredni wpływ na to, ile aktualizacji może pobrać urządzenie i ile użytkowników może je pobrać.
Trzeba wziąć pod uwagę kilka ważnych zmiennych. Pierwszy to rozmiar fabryczny, czyli rozmiar wszystkich partycji dynamicznych w momencie pierwszego zaflashowania urządzenia. Drugim jest tempo wzrostu, czyli procentowy wzrost rozmiaru systemu operacyjnego w całym okresie możliwości aktualizacji urządzenia.
Dodatkowo urządzenia wirtualne A/B mogą korzystać z miejsca na /data
podczas aktualizacji. Należy to wziąć pod uwagę podczas określania rozmiaru super
. Jeśli na potrzeby /data
potrzeba zbyt dużo miejsca, niektórzy użytkownicy nie będą mogli (lub nie będą chcieli) zaakceptować aktualizacji. Jeśli jednak wiadomo, że większość użytkowników ma pewien procent wolnego miejsca, urządzenia mogą wygodnie odjąć tę przestrzeń z super
. Urządzenia mogą też zagwarantować, że /data
nigdy nie będzie potrzebna, po prostu przez zwiększenie super
.
Poniżej znajdziesz kilka modeli, które pomogą Ci określić rozmiar partycji super
na podstawie tych zmiennych.
Używanie /data
Wirtualny test A/B zachęca do zmniejszenia super
, aby umożliwić zwiększenie rozmiaru /data
. Część tego miejsca jest potrzebna podczas aktualizacji. Aby zrozumieć wpływ na możliwość aktualizacji, musisz wiedzieć, jaki odsetek urządzeń ma taką ilość wolnego miejsca w czasie. Określedzenie tej liczby zależy w dużej mierze od sprzętu urządzenia i zachowania użytkowników. W przykładach poniżej ten numer jest oznaczany jako AllowedUserdataUse
.
Bez kompresji
Bez kompresji pełna aktualizacja OTA wymagająca użycia zrzutu ekranu musi mieć mniej więcej taki sam rozmiar jak system operacyjny, dlatego należy to wziąć pod uwagę przy określaniu rozmiaru super
:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Rozważmy na przykład urządzenie z Virtual A/B o fabrycznym rozmiarze 4 GB, którego rozmiar ma wzrosnąć o 50%. Wiemy też, że prawie wszyscy użytkownicy mają 1 GB wolnego miejsca (lub są gotowi zwolnić do 1 GB miejsca na potrzeby aktualizacji). W przypadku tego urządzenia super
może mieć taki rozmiar:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Dlatego na tym urządzeniu powinna być partycja super
o rozmiarze 11 GB.
Z kompresją
Po skompresowaniu pełny OTA potrzebuje 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ą wirtualnego A/B, którego rozmiar w fabrycznym stanie wynosi 4 GB, a spodziewany wzrost – 50%. Wiemy też, że prawie wszyscy użytkownicy mają 1 GB wolnego miejsca (lub są gotowi zwolnić do 1 GB miejsca na potrzeby aktualizacji). W przypadku tego urządzenia super
może mieć taki rozmiar:
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 na tym urządzeniu powinna być partycja super
o rozmiarze 9, 2 GB.
Bez korzystania z polecenia /data
Jeśli chcesz, aby OTA nigdy nie wymagały miejsca na /data
, rozmiar super
będzie prosty.
Bez kompresji
W przypadku urządzenia z wirtualnym testem A/B bez kompresji lub zwykłego testu A/B:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Załóżmy na przykład, że urządzenie Virtual A/B ma fabryczny rozmiar 4 GB i oczekiwany wzrost o 50%. Aby mieć pewność, że to urządzenie nigdy nie będzie używać /data
do zrzutów OTA, obliczenia będą wyglądać tak:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Dlatego na tym urządzeniu powinna być partycja super
o rozmiarze 12 GB.
Z kompresją
W przypadku urządzenia z wirtualnym testem A/B z kompresją:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
Rozważ np. urządzenie do kompresji Virtual A/B o fabrycznym rozmiarze 4 GB i oczekiwanym wzroście o 50%. Aby mieć pewność, że to urządzenie nigdy nie będzie używać /data
do migawek OTA, obliczenia będą wyglądać tak:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Dlatego na tym urządzeniu powinna być partycja super
o rozmiarze 10, 2 GB.
Uwagi
Możesz pomyśleć, że skoro rozmiar fabryczny to 4 GB, a ostateczna aktualizacja to 5 GB, to super
musi wynosić 9 GB zamiast 10 GB. Jeśli jednak pierwsza i ostatnia aktualizacja mają po 5 GB, to super
może nie mieć wystarczającej ilości miejsca na ostatnią aktualizację. Podane powyżej wzory zakładają, że podział może nastąpić w dowolnym momencie. Miejsce potrzebne do zastosowania końcowej aktualizacji może być takie samo jak wymagane do zastosowania pierwszej aktualizacji.
Pamiętaj, że współczynniki kompresji są wartościami szacowanymi. Obraz systemu operacyjnego może być lepiej lub gorzej skompresowany w zależności od zawartości. Jeśli używasz skompresowanego systemu plików, takiego jak EROFS, dodatkowe skompresowanie za pomocą funkcji Virtual A/B przynosi coraz mniejsze korzyści. W takim przypadku lepiej użyć jako wskazówki jednej z formuł bez kompresji.
Obliczanie rozmiaru
Aby znaleźć wartość FinalDessertSize
w powyższych przykładach, zsumuj rozmiary wszystkich dynamicznych partycji. Obrazy dynamicznych partycji AOSP:
system.img
vendor.img
product.img
system_ext.img
vendor_dlkm.img
system_dlkm.img
Pamiętaj, aby obliczyć rozmiar na podstawie nieprzetworzonych obrazów. Podczas kompilowania Androida 12 lub starszego obrazy są domyślnie rozproszone i można je odparsować za pomocą simg2img
.
Rozmiary partycji można też obliczyć na podstawie pakietu OTA. Dzięki temu możesz też oszacować rozmiar migawki z testu A/B dla poszczególnych 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. Aby obliczyć wzrost, użyj pierwszego i najnowszego obrazu super
.