تعیین اندازه صحیح پارتیشن super برای قابلیت بروزرسانی دستگاه مهم است. اندازه مستقیماً بر تعداد بروزرسانیهایی که یک دستگاه میتواند دریافت کند و تعداد کاربرانی که میتوانند با موفقیت آن بروزرسانیها را دریافت کنند، تأثیر میگذارد.
چند متغیر مهم وجود دارد که باید در نظر گرفته شوند. اولین مورد، اندازه کارخانه است که اندازه تمام پارتیشنهای پویا هنگام اولین فلش شدن دستگاه است. مورد دوم، نرخ رشد است که درصد افزایش اندازه سیستم عامل در کل طول عمر قابل بهروزرسانی دستگاه است.
علاوه بر این، دستگاههای مجازی A/B میتوانند در طول بهروزرسانی از فضای موجود در /data استفاده کنند و این موضوع باید هنگام تعیین اندازه super در نظر گرفته شود. اگر فضای زیادی در /data مورد نیاز باشد، برخی از کاربران قادر (یا مایل) به بهروزرسانی نیستند. با این حال، اگر مشخص شود که اکثر کاربران درصدی از فضای خالی دارند، دستگاهها میتوانند به راحتی آن فضا را از super کم کنند. یا دستگاهها میتوانند با بزرگ کردن super به اندازه کافی، تضمین کنند که /data هرگز مورد نیاز نخواهد بود.
در زیر چند مدل برای کمک به تعیین اندازهی super پارتیشن بر اساس این متغیرها ارائه شده است.
به /data تکیه کنید
A/B مجازی، کوچکسازی super را برای افزایش اندازه /data تشویق میکند. مقداری از این فضا در طول بهروزرسانی مورد نیاز است. برای درک تأثیر آن بر قابلیت بهروزرسانی، ضروری است که بدانید چند درصد از دستگاهها احتمالاً آن مقدار فضای خالی را در طول زمان خواهند داشت. تعیین این عدد به شدت به سختافزار دستگاه و رفتار کاربران آن دستگاه بستگی دارد. در مثالهای زیر، به این عدد AllowedUserdataUse گفته میشود.
بدون فشرده سازی
بدون فشردهسازی، یک OTA کامل به اسنپشاتی تقریباً به اندازه سیستمعامل نیاز دارد، بنابراین این موضوع باید هنگام تعیین اندازه super در نظر گرفته شود:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
برای مثال، یک دستگاه مجازی A/B با حجم کارخانهای ۴ گیگابایت، رشد مورد انتظار ۵۰٪ و با علم به اینکه تقریباً همه کاربران ۱ گیگابایت فضای خالی دارند (یا مایلند تا ۱ گیگابایت فضا برای بهروزرسانی آزاد کنند) را در نظر بگیرید. برای این دستگاه، میتوان اندازه super را به صورت زیر تنظیم کرد:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
بنابراین، این دستگاه باید یک پارتیشن super ۱۱ گیگابایتی داشته باشد.
با فشرده سازی
با فشردهسازی، یک OTA کامل تقریباً به ۷۰٪ از اندازه سیستم عامل نیاز به snapshot دارد:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
برای مثال، دستگاهی را در نظر بگیرید که با فشردهسازی مجازی A/B پیکربندی شده است، با حجم کارخانهای ۴ گیگابایت، رشد مورد انتظار ۵۰٪ و با علم به اینکه تقریباً همه کاربران ۱ گیگابایت فضای خالی دارند (یا مایلند تا ۱ گیگابایت فضا برای بهروزرسانی آزاد کنند). برای این دستگاه، میتوان اندازه super را به صورت زیر تنظیم کرد:
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
بنابراین، این دستگاه باید یک پارتیشن super ۹.۲ گیگابایتی داشته باشد.
بدون تکیه بر /data
اگر میخواهید OTAهایی داشته باشید که هرگز به فضای snapshot در /data نیاز نداشته باشند، تعیین اندازه super ساده است.
بدون فشرده سازی
برای یک دستگاه مجازی A/B بدون فشردهسازی، یا یک دستگاه A/B معمولی:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
برای مثال، یک دستگاه مجازی A/B با اندازه کارخانهای ۴ گیگابایت و رشد مورد انتظار ۵۰٪ را در نظر بگیرید. برای اطمینان از اینکه این دستگاه هرگز از /data برای اسنپشاتهای OTA استفاده نمیکند، محاسبه آن به صورت زیر خواهد بود:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
بنابراین، این دستگاه باید یک پارتیشن super ۱۲ گیگابایتی داشته باشد.
با فشرده سازی
برای یک دستگاه مجازی A/B با فشردهسازی:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
برای مثال، یک دستگاه فشردهسازی مجازی A/B با حجم کارخانهای ۴ گیگابایت و رشد مورد انتظار ۵۰٪ را در نظر بگیرید. برای اطمینان از اینکه این دستگاه هرگز از /data برای اسنپشاتهای OTA استفاده نمیکند، محاسبه آن به صورت زیر خواهد بود:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
بنابراین، این دستگاه باید یک پارتیشن super ۱۰.۲ گیگابایتی داشته باشد.
هشدارها
ممکن است وسوسهانگیز باشد که مشاهده کنیم اگر اندازه کارخانه ۴ گیگابایت و بهروزرسانی نهایی ۵ گیگابایت باشد، آنگاه super باید ۹ گیگابایت باشد، نه ۱۰ گیگابایت. با این حال، اگر بهروزرسانی اول و بهروزرسانی نهایی هر دو ۵ گیگابایت باشند، ممکن است فضای super برای بهروزرسانی نهایی کافی نباشد. فرمولهای بالا فرض میکنند که رشد پارتیشن میتواند در هر زمانی اتفاق بیفتد. فضای مورد نیاز برای اعمال بهروزرسانی نهایی ممکن است همان فضای مورد نیاز برای اعمال بهروزرسانی اول باشد.
توجه داشته باشید که نسبتهای فشردهسازی تخمینی هستند. یک تصویر سیستم عامل بسته به محتوای آن ممکن است بهتر یا بدتر فشرده شود. اگر از یک سیستم فایل فشرده مانند EROFS استفاده میکنید، فشردهسازی اضافی از Virtual A/B بازده نزولی دارد. در این حالت بهتر است از یکی از فرمولهای فشرده نشده به عنوان راهنما استفاده کنید.
اندازه را محاسبه کنید
برای یافتن مقدار FactorySize در مثالهای قبلی، اندازه تمام پارتیشنهای پویا را با هم جمع کنید. تصاویر پارتیشن پویای AOSP عبارتند از:
-
system.img -
vendor.img -
product.img -
system_ext.img -
vendor_dlkm.img -
system_dlkm.img
مطمئن شوید که اندازه را بر اساس تصاویر تجزیه نشده محاسبه میکنید. هنگام ساخت اندروید ۱۲ یا پایینتر، تصاویر به طور پیشفرض تجزیه میشوند و میتوانند با simg2img تجزیه نشوند.
همچنین میتوان اندازه پارتیشنها را از یک بسته OTA محاسبه کرد. با انجام این کار، اندازه اسنپشات مجازی A/B برای هر پارتیشن نیز تخمین زده میشود:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
یا میتوانید از ابزار تحلیل OTA استفاده کنید. این ابزار هیچ فایلی را آپلود نمیکند و بستههای OTA را به صورت محلی تحلیل میکند.
برای یافتن مقدار ExpectedGrowth ، از یک دستگاه که قبلاً منتشر شده است استفاده کنید. از اولین و جدیدترین super برای محاسبه رشد استفاده کنید.