به‌روزرسانی‌های نرم‌افزاری ازطریق شبکه (OTA) مبتنی بر بلوک

می‌توانید به‌روزرسانی‌های ازطریق هوا (OTA) مبتنی بر بلوک را برای دستگاه‌های جدید دارای Android 5.0 فعال کنید. OTA سازوکاری است که ازطریق آن سازندگان تجهیزات اصلی پارتیشن سیستم دستگاه را از راه دور به‌روزرسانی می‌کنند:

  • Android 5.0 و نسخه‌های جدیدتر از به‌روزرسانی‌های OTA مسدودشده استفاده می‌کنند تا مطمئن شوند هر دستگاه از بخش دقیقاً یکسانی استفاده می‌کند. به‌جای مقایسه فایل‌های جداگانه و محاسبه وصله‌های باینری، ‫OTA بلوکی کل پارتیشن را به‌عنوان یک فایل مدیریت می‌کند و یک وصله باینری واحد محاسبه می‌کند، و از این طریق تضمین می‌کند که پارتیشن حاصل دقیقاً حاوی بیت‌های موردنظر است. این کار به تصویر سیستم دستگاه اجازه می‌دهد تا ازطریق راه‌اندازی سریع یا OTA به همان وضعیت دست یابد.
  • Android 4.4 و نسخه‌های قبلی از به‌روزرسانی‌های OTA فایل استفاده می‌کردند که تضمین می‌کرد دستگاه‌ها محتوای فایل، اجازه‌ها، و حالت‌های مشابهی داشته باشند، اما اجازه می‌داد فراداده‌هایی مانند مُهرهای زمان و چیدمان فضای ذخیره‌سازی زیربنایی براساس روش به‌روزرسانی بین دستگاه‌ها متفاوت باشد.

ازآنجایی‌که مسدود کردن OTA تضمین می‌کند که هر دستگاه از پارتیشن یکسانی استفاده می‌کند، این کار امکان استفاده از dm-verity را برای امضای رمزنگاری پارتیشن سیستم فراهم می‌کند. برای جزئیات بیشتر درباره dm-verity، به راه‌اندازی درستی‌سنجی‌شده مراجعه کنید.

توجه: قبل‌از استفاده از dm-verity، باید سیستم OTA بلوک کاری داشته باشید.

توصیه‌ها

برای دستگاه‌هایی که با Android نسخه ۵.۰ یا بالاتر عرضه می‌شوند، از به‌روزرسانی‌های OTA مسدودشده در ROM کارخانه استفاده کنید. برای تولید OTA مبتنی بر بلوک برای به‌روزرسانی‌های بعدی، گزینه --block را به ota_from_target_files ارسال کنید.

برای دستگاه‌هایی که با Android نسخه ۴.۴ یا قدیمی‌تر عرضه شده‌اند، از به‌روزرسانی‌های OTA فایل استفاده کنید. اگرچه امکان انتقال دستگاه‌ها با ارسال OTA بلوک کامل Android نسخه ۵.۰ یا بالاتر وجود دارد، این کار مستلزم ارسال OTA کامل است که به‌طور قابل‌توجهی بزرگ‌تر از OTA افزایشی است (و بنابراین توصیه نمی‌شود).

ازآنجایی‌که dm-verity به پشتیبانی بارکننده نیاز دارد که فقط در دستگاه‌های جدیدی که با Android 5.0 یا بالاتر عرضه می‌شوند وجود دارد، نمی‌توانید dm-verity را برای دستگاه‌های موجود فعال کنید.

توسعه‌دهندگانی که روی سیستم Android OTA کار می‌کنند (تصویر بازیابی و دستورگان‌هایی که ‫OTA تولید می‌کنند) می‌توانند با مشترک شدن در فهرست پستی android-ota@googlegroups.com از تغییرات مطلع شوند.

فایل دربرابر به‌روزرسانی‌های نرم‌افزاری ازطریق شبکه

‫Android درطول OTA مبتنی بر فایل تلاش می‌کند محتوای پارتیشن سیستم را در لایه سیستم فایل (به‌صورت فایل‌به‌فایل) تغییر دهد. تضمینی وجود ندارد که به‌روزرسانی فایل‌ها را با ترتیب یکسان بنویسد، زمان آخرین تغییر یا ابربلوک یکسان داشته باشد، یا حتی بلوک‌ها را در مکان یکسانی در دستگاه بلوک قرار دهد. به همین دلیل، «به‌روزرسانی‌های ازطریق حامل» مبتنی بر فایل در دستگاه دارای dm-verity ناموفق است؛ پس‌از تلاش برای «به‌روزرسانی ازطریق حامل»، دستگاه راه‌اندازی نمی‌شود.

درطول OTA مبتنی بر بلوک، Android تفاوت بین دو تصویر بلوک را (به‌جای دو مجموعه فایل) به دستگاه ارائه می‌دهد. به‌روزرسانی، ساخت دستگاه را با سرور ساخت مربوطه در سطح بلوک (زیر سیستم فایل) بااستفاده از یکی از روش‌های زیر بررسی می‌کند:

  • به‌روزرسانی کامل. کپی کردن تصویر کامل سیستم ساده است و تولید وصله را آسان می‌کند اما تصاویر بزرگی نیز تولید می‌کند که می‌تواند اعمال وصله‌ها را پرهزینه کند.
  • به‌روزرسانی افزایشی. استفاده از ابزار تفاضل دودویی تصاویر کوچک‌تری تولید می‌کند و اعمال وصله را آسان می‌کند، اما هنگام تولید خود وصله، حافظه زیادی مصرف می‌کند.

توجه: adb fastboot دقیقاً همان بیت‌ها را در دستگاه قرار می‌دهد که OTA کامل، بنابراین چشمک زدن با OTA بلوک سازگار است.

به‌روزرسانی سیستم‌های اصلاح‌نشده

برای دستگاه‌هایی که پارتیشن‌های سیستم تغییرنیافته دارند و Android 5.0 را اجرا می‌کنند، فرایند بارگیری و نصب OTA بلوکی همانند OTA فایلی است. بااین‌حال، به‌روزرسانی OTA ممکن است شامل یک یا چند مورد از تفاوت‌های زیر باشد:

  • اندازه بارگیری.

    به‌روزرسانی‌های OTA با بلوک کامل تقریباً هم‌اندازه به‌روزرسانی‌های OTA با فایل کامل هستند، و به‌روزرسانی‌های افزایشی ممکن است فقط چند مگابایت بزرگ‌تر باشند.

    مقایسه اندازه‌های OTA

    شکل ۱. مقایسه اندازه‌های «به‌روزرسانی ازطریق شبکه» در Nexus 6 بین Android 5.0 و Android 5.1 (تغییرات ساخت هدف متفاوت)

    به‌طورکلی، به‌روزرسانی‌های OTA بلوک افزایشی بزرگ‌تر از به‌روزرسانی‌های OTA فایل افزایشی هستند زیرا:

    • حفظ داده‌ها. OTA مبتنی بر بلوک نسبت‌به OTA مبتنی بر فایل، داده‌های بیشتری (فراداده فایل، داده‌های dm-verity، چیدمان ext4، و غیره) را حفظ می‌کند.
    • تفاوت‌های الگوریتم محاسباتی. در به‌روزرسانی OTA فایل، اگر مسیر فایل در هر دو ساخت یکسان باشد، بسته OTA حاوی داده‌ای برای آن فایل نیست. در به‌روزرسانی OTA بلوکی، تعیین تغییرات کم یا بدون تغییر در یک فایل به کیفیت الگوریتم محاسبه وصله و چیدمان داده‌های فایل در هر دو سیستم منبع و مقصد بستگی دارد.
  • حساسیت به حافظه فلش و RAM معیوب. اگر فایلی خراب باشد، تا زمانی که فایل خراب را لمس نکند، فایل OTA موفقیت‌آمیز است، اما اگر فایل OTA خرابی در پارتیشن سیستم تشخیص دهد، ناموفق است.

به‌روزرسانی سیستم‌های اصلاح‌شده

برای دستگاه‌های دارای بخش‌بندی سیستم اصلاح‌شده که Android 5.0 را اجرا می‌کنند:

  • به‌روزرسانی‌های OTA بلوک افزایشی ناموفق است. ممکن است پارتیشن سیستم درطول adb remount یا درنتیجه بدافزار تغییر کند. «به‌روزرسانی ازطریق هوا» فایل برخی‌از تغییرات در بخش را می‌پذیرد، مثل اضافه شدن فایل‌هایی که بخشی از ساختار منبع یا هدف نیستند. بااین‌حال، «مسدود کردن OTA» اضافات به پارتیشن را تحمل نمی‌کند، بنابراین کاربران باید «OTA کامل» را نصب کنند (که هرگونه تغییر در پارتیشن سیستم را بازنویسی می‌کند) یا تصویر سیستم جدیدی را فلش کنند تا OTAهای آینده فعال شوند.
  • تلاش برای تغییر فایل‌های اصلاح‌شده باعث می‌شود به‌روزرسانی انجام نشود. برای به‌روزرسانی‌های OTA فایل و بلوک، اگر OTA تلاش کند فایلی را که اصلاح شده است تغییر دهد، به‌روزرسانی OTA ناموفق خواهد بود.
  • تلاش برای دسترسی به فایل‌های اصلاح‌شده باعث ایجاد خطا می‌شود (فقط dm-verity). برای هر دو به‌روزرسانی OTA فایل و بلوک، اگر dm-verity فعال باشد و OTA تلاش کند به بخش‌های اصلاح‌شده سیستم فایل سیستم دسترسی پیدا کند، OTA خطا ایجاد می‌کند.