Prawidłowe określenie rozmiaru partycji super jest ważne dla możliwości aktualizacji urządzenia. Rozmiar ma bezpośredni wpływ na to, ile aktualizacji może pobrać urządzenie i ilu użytkowników może je zainstalować.
Należy wziąć pod uwagę kilka ważnych zmiennych. Pierwszy to rozmiar fabryczny, czyli rozmiar wszystkich partycji dynamicznych po pierwszym wgraniu oprogramowania na urządzenie. Drugi to tempo wzrostu, czyli procentowy wzrost rozmiaru systemu operacyjnego w całym okresie, w którym urządzenie może być aktualizowane.
Dodatkowo urządzenia z wirtualnym testem A/B mogą używać miejsca na /data podczas aktualizacji, co należy wziąć pod uwagę przy określaniu rozmiaru super. Jeśli na urządzeniu /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 odsetek wolnego miejsca, urządzenia mogą odjąć tę wartość od super. Urządzenia mogą też zagwarantować, że /data nigdy nie będzie potrzebne, po prostu zwiększając rozmiar super.
Poniżej znajdziesz kilka modeli, które pomogą Ci określić rozmiar partycji super na podstawie tych zmiennych.
Korzystanie z /data
Wirtualny test A/B zachęca do zmniejszenia super, aby zwiększyć rozmiar /data. Część tej przestrzeni jest potrzebna podczas aktualizacji. Aby zrozumieć wpływ na możliwość aktualizacji, musisz wiedzieć, jaki odsetek urządzeń będzie miał z czasem taką ilość wolnego miejsca. Ustalenie tej liczby zależy w dużej mierze od sprzętu urządzenia i sposobu, w jaki użytkownicy z niego korzystają. W przykładach poniżej liczba ta jest oznaczona jako AllowedUserdataUse.
Bez kompresji
Bez kompresji pełna aktualizacja OTA wymaga migawki o rozmiarze zbliżonym do rozmiaru systemu operacyjnego, więc należy to uwzględnić przy określaniu rozmiaru super:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Rozważmy na przykład urządzenie z wirtualnym testem 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 super może być taki:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Dlatego to urządzenie powinno mieć partycję o rozmiarze 11 GB super.
Uciskowe
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, które ma 4 GB pamięci, oczekiwany wzrost o 50% i informację, ż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 super może mieć takie rozmiary:
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ę o rozmiarze 9, 2 GB super.
Bez korzystania z /data
Jeśli chcesz mieć aktualizacje OTA, które nigdy nie wymagają miejsca na migawkę na /data, określenie rozmiarusuper jest proste.
Bez kompresji
W przypadku urządzenia wirtualnego A/B bez kompresji lub zwykłego urządzenia A/B:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Weźmy na przykład urządzenie z wirtualnym testem A/B, które ma rozmiar fabryczny 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 to urządzenie powinno mieć partycję o rozmiarze 12 GB super.
Uciskowe
W przypadku urządzenia Virtual A/B z kompresją:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
Rozważmy na przykład wirtualne urządzenie do kompresji 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ć /data do tworzenia 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 to urządzenie powinno mieć partycję o rozmiarze 10, 2 GBsuper.
Uwagi
Można by zauważyć, że jeśli rozmiar fabryczny wynosi 4 GB, a ostateczna aktualizacja ma 5 GB, to super powinno wynosić 9 GB, a nie 10 GB. Jeśli jednak pierwsza i ostatnia aktualizacja mają po 5 GB, miejsce na dysku super może być niewystarczające na ostatnią aktualizację. Powyższe wzory zakładają, że wzrost partycji może nastąpić w dowolnym momencie. Miejsce potrzebne do zastosowania ostatecznej aktualizacji może być takie samo jak w przypadku 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 wirtualnego testu A/B przynosi coraz mniejsze korzyści. W takim przypadku lepiej jest użyć jako wytycznych jednego z tych wzorów.
Obliczanie rozmiaru
Aby obliczyć wartość FactorySize w powyższych 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 bez rozrzedzenia. Podczas tworzenia obrazów systemu Android 12 lub starszego są one domyślnie rozrzedzane. Można je rozrzedzić za pomocą polecenia simg2img.
Rozmiary partycji można też obliczyć na podstawie pakietu OTA. W ten sposób oszacujesz też rozmiar migawki wirtualnych testów 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 najstarszego i najnowszego obrazu super.