Project Treble Grundlagen – Wie A/B-Partitionen und seamless OTA Updates Custom ROMs beeinflussen

Den folgenden Artikel habe ich bei XDA Developers entdeckt. Da er sehr gut in meine Project Treble-Reihe passt, habe ich mich etnschieden, ohn ins Deutsche zu übersetzen, anzupassen und hier zu rebloggen. Als Android Nougat veröffentlicht wurde, wurde über alle möglichen neuen Funktionen gesprochen. Die einen sprachen über eine neu überarbeitete Benutzeroberfläche für Einsteiger, sowie die lange erwartete Multi-Window-Fähigkeiten. Andere wiederum über die Unterstützung der Vulkan Graphics API. Aber Android Nougat führte außerdem die sogenannten „seamless Updates“ auf Android-Geräten ein.

Die überwiegende Mehrheit der bestehenden Android-Geräte hat bisher noch keine A/B-Partitionen und kann daher keine seamless OTA Updates nutzen. Die Grundprämisse dieser Funktion ist, dass das Gerät über einen zweiten Satz von system-, boot-, vendor- und anderen wichtigen Partitionen verfügt, und wenn Ihr dann ein OTA-Update erhaltet, erfolgt das Update im Hintergrund, während der zweite Satz von Partitionen gepatcht wird, wodurch Ihr beim nächsten Neustart nahtlos – seamless – in ein aktualisiertes Software-Build starten könnt. Wenn ein Update fehlschlägt, wird das System weiterhin in das letzte funktionierende Build booten, was bedeutet, dass sich die Hersteller weniger Kopfschmerzen bereiten müssen, und Ihr als Verbraucher besser geschützt seid.

Die Unterstützung nahtloser OTA Updates ist jedoch, im Gegensatz zu Project Treble, keine zwingende Voraussetzung für ein neues Android-Gerät. Daher unterstützt einmal mehr nur ein Teil der neuen Android-Geräte dieses Feature. Das ist schade, denn A/B-Partitionen bringen viele Vorteile sowohl für normale Benutzer als auch für Poweruser. Allerdings hat das Feature noch einen schlechten Ruf in der Enthusiasten-Community, da es die Entwicklung von Android und das Flashen von Custom Mods und ROMs zunächst einmal erschwert. Das ist – nach einigem Studium der neuen Funktionsweise – jedoch überhaupt nicht der Fall, weshalb wir seamless OTA Updates entmystifizieren und stattdessen erklären sollten, wie sich A/B-Partitionen auf die Entwicklung von Custom Mods und Custom ROM auswirken. Ich habe selber bereits einen kurzen Anreisser unter dem Titel Eine Revolution für Custom ROMs! verfasst, will aber in diesem Artikel noch einmal wesentlich tiefer in die zugrunde liegenden Materie einsteigen.

Partitionen auf einem Android-Gerät

Eine Partition ist einfach ein diskreter Bereich auf dem internen Speicher des Smartphones, in dem die Daten aufbewahrt werden. Ihr wollt wissen was genau dahinter steckt? Dann lest Euch am besten auch meinen Artikel rund um das Thema Firmware oder ROM, die Henne-Ei-Frage! einmal durch. Welche Daten auf jeder Partition gespeichert werden, hängt von der verbauten Hardware, dem Betriebssystem und vielen anderen Faktoren ab. Der Bootloader hat einen, das System (Android OS) einen, die Benutzerdaten einen…. und so weiter und so fort. Wenn man sieht, dass Leute über „/system“ und „/cache“ sprechen, beziehen sie sich auf die Namen für diese Partitionen. Das HTC U12+ hat zum Beispiel 92 Partitionen:

lrwxrwxrwx 1 root root 15 1970-01-30 10:42 abl_a -> /dev/block/sde9
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 abl_b -> /dev/block/sde30
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 aop_a -> /dev/block/sde1
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 aop_b -> /dev/block/sde22
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 apdp -> /dev/block/sde46
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 avb_rec -> /dev/block/sde56
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 bluetooth_a -> /dev/block/sde6
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 bluetooth_b -> /dev/block/sde27
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 board_info -> /dev/block/sdf1
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 boot_a -> /dev/block/sde13
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 boot_b -> /dev/block/sde34
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 carrier -> /dev/block/sda16
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 cdt -> /dev/block/sdd2
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 cmnlib64_a -> /dev/block/sde16
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 cmnlib64_b -> /dev/block/sde37
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 cmnlib_a -> /dev/block/sde15
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 cmnlib_b -> /dev/block/sde36
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 control -> /dev/block/sda13
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 cota -> /dev/block/sda17
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 ddr -> /dev/block/sdd3
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 devcfg_a -> /dev/block/sde17
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 devcfg_b -> /dev/block/sde38
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 devinfo -> /dev/block/sde44
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 devlog -> /dev/block/sda10
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 dip -> /dev/block/sde45
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 dpo -> /dev/block/sde48
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 dsp_a -> /dev/block/sde10
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 dsp_b -> /dev/block/sde31
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 dtbo_a -> /dev/block/sde21
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 dtbo_b -> /dev/block/sde42
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 extra -> /dev/block/sda12
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 fataldevlog -> /dev/block/sda11
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 frp -> /dev/block/sda14
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 fsc -> /dev/block/sdf4
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 fsg -> /dev/block/sdf3
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 hosd_a -> /dev/block/sde14
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 hosd_b -> /dev/block/sde35
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 hvbmeta -> /dev/block/sda4
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 hyp_a -> /dev/block/sde3
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 hyp_b -> /dev/block/sde24
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 keymaster_a -> /dev/block/sde11
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 keymaster_b -> /dev/block/sde32
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 limits -> /dev/block/sde50
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 local -> /dev/block/sda15
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 lockbooter_a -> /dev/block/sde12
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 lockbooter_b -> /dev/block/sde33
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 logdump -> /dev/block/sde54
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 logfs -> /dev/block/sde52
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 mdtp_a -> /dev/block/sde8
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 mdtp_b -> /dev/block/sde29
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 mdtpsecapp_a -> /dev/block/sde7
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 mdtpsecapp_b -> /dev/block/sde28
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 mfg -> /dev/block/sdf2
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 misc -> /dev/block/sda6
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 modemst1 -> /dev/block/sdf5
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 modemst2 -> /dev/block/sdf6
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 msadp -> /dev/block/sde47
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 oem_misc -> /dev/block/sda7
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 padding0 -> /dev/block/sda1
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 padding3 -> /dev/block/sdd1
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 persist -> /dev/block/sda3
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 pg1fs -> /dev/block/sda5
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 pmic_a -> /dev/block/sde4
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 pmic_b -> /dev/block/sde25
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 qupfw_a -> /dev/block/sde18
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 qupfw_b -> /dev/block/sde39
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 radio_a -> /dev/block/sde5
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 radio_b -> /dev/block/sde26
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 ramdump -> /dev/block/sda8
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 reserve0 -> /dev/block/sda21
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 reserve4 -> /dev/block/sde57
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 reserve5 -> /dev/block/sdf7
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 sec -> /dev/block/sde43
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 sp1 -> /dev/block/sde49
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 ssd -> /dev/block/sda2
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 sti -> /dev/block/sde53
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 storsec -> /dev/block/sde55
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 system_a -> /dev/block/sda18
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 system_b -> /dev/block/sda19
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 tool_diag -> /dev/block/sda9
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 toolsfv -> /dev/block/sde51
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 tz_a -> /dev/block/sde2
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 tz_b -> /dev/block/sde23
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 userdata -> /dev/block/sda20
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 vbmeta_a -> /dev/block/sde20
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 vbmeta_b -> /dev/block/sde41
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 vendor_a -> /dev/block/sde19
lrwxrwxrwx 1 root root 16 1970-01-30 10:42 vendor_b -> /dev/block/sde40
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 xbl_a -> /dev/block/sdb1
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 xbl_b -> /dev/block/sdc1
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 xbl_config_a -> /dev/block/sdb2
lrwxrwxrwx 1 root root 15 1970-01-30 10:42 xbl_config_b -> /dev/block/sdc2

Wow, das sind eine ganze Menge – oder!? Ja und nein, denn das HTC U12+ ist eines der Geräte, das seamless OTA Updates unterstützt, was bedeutet, dass viele dieser Partitionen einfach Duplikate voneinander sind.

Es gibt viele Partitionen auf einem Gerät, um die Ich euch als Benutzer de facto nie Sorgen werded machen müssen. Viele dieser Partitionen werden beim Flashen von Custom ROMs, Kerneln, Recoverys oder Mods – wie Magisk oder Xposed – nie verändert d.h. die meisten Partitionen werden entweder für unsere Zwecke unbenutzt bleiben oder es ist schlicht zu risikoreich mit ihnen hereum zu experimentieren, wenn man nicht genauer weiß, was man tut – XLOADER und OEMINFO auf Huawei/Honor-Geräten kommen mir da gleich als erstes in den Sinn. Für die große Mehrheit der Android-Benutzer sind die Partitionen, mit denen wir uns hauptsächlich beschäftigen, /system, /boot, /recovery, /userdata und neuerdings auch /vendor und /vbmeta. Hier ist eine kurze Erklärung des Zwecks jeder dieser Partition:

  • /system – enthält das Android-Betriebssystem, Systembibliotheken, Systemanwendungen und andere Systemmedien wie Bootanimationen, Hintergrundbilder, Klingeltöne, etc.
  • /boot – enthält den Kernel, die Ramdisk und auf A/B-Geräten auch die Recovery.
  • /recovery – enthält die Wiederherstellung, wobei TWRP am häufigsten auf reinen A-Geräten geflasht wird – A/B-Geräte haben hingegen keine dedizierte /recovery-Partition mehr.
  • /userdata – enthält alle Daten Eurer Anwendung, Eurer Systems und Eures internen Speichers.
  • /vendor – enthält plattform- und gerätespezifische HALs, die Dateien, die das Android-Betriebssystem für die Kommunikation mit der zugrunde liegenden Hardware benötigt.
  • /vbmeta – die Partition für Android Verified Boot 2.0, die die Integrität des Bootvorgangs überprüft.

Gerätehersteller können ihre Partitionsschemata so abändern, dass sie jedes beliebige Layout verwenden können. Zum Beispiel teilt Huawei die Boot-Partition in ramdisk_recovery und kernel auf. Es gibt auch eine Menge zusätzlicher Partitionen, die andere Systemanwendungen wie /cust, /product und /oem enthalten können, und auch wenn es recht sicher ist, diese zu modifizieren, wird es im Allgemeinen nicht empfohlen, wenn Ihr es euch leichter machen wollt, wieder auf ein Stock System zurück zu gelangen. Wo spielen also A/B-Partitionen eine Rolle?

Advertisements

Seiten: 1 2 3 4

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Create a website or blog at WordPress.com

Nach oben ↑

%d Bloggern gefällt das: