EROFS

EROFS ist ein schreibgeschütztes Dateisystem, das in Linux 4.19 eingeführt wurde. Es unterstützt Komprimierung und Deduplizierung und ist für die Leseleistung optimiert.

Der Hauptunterschied zwischen EROFS und anderen komprimierten Dateisystemen besteht darin, dass es die In-Place-Dekomprimierung unterstützt. Komprimierte Daten werden am Ende von Blöcken gespeichert, damit sie auf derselben Seite dekomprimiert werden können. In einem EROFS-Image können mehr als 99% der Blöcke dieses Schema verwenden. Dadurch entfällt die Notwendigkeit, während Lesevorgängen zusätzliche Seiten zuzuweisen.

EROFS-Images müssen nicht komprimiert werden. Bei Verwendung der Komprimierung sind Bilder jedoch durchschnittlich etwa 25% kleiner. Bei der höchsten Komprimierungsstufe können Bilder bis zu 45% kleiner sein.

Unabhängig davon, ob die Komprimierung verwendet wird oder nicht, hat sich gezeigt, dass EROFS andere Dateisysteme sowohl bei zufälligen als auch bei sequenziellen Zugriffszeiten übertrifft.

Build-Änderungen

Um EROFS zu aktivieren, verwenden Sie den Dateisystemtyp erofs in BoardConfig.mk. Beispiel:

BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs

fstab-Änderungen

Der fstab-Typ ist erofs und die einzige erforderliche Bereitstellungsoption ist ro. Damit Sie weiterhin EXT4-basierte GSI-Images testen können, können Sie zwei fstab-Einträge für /system. verwenden.

Beispiel:

system    /system    erofs   ro              wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
system    /system    ext4    ro,barrier=1    wait,slotselect,avb=vbmeta_system,logical,first_stage_mount

Komprimierungsoptimierung

Standardmäßig komprimiert EROFS in Blöcke mit fester Größe. Die Komprimierungseffizienz kann durch Aktivieren von Blöcken mit variabler Länge erheblich gesteigert werden. Dies kann mit dem folgenden Flag konfiguriert werden:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Dadurch wird die maximale PCLUSTER- oder Blockgröße mit variabler Länge auf 262.144 Byte festgelegt. Die Zahl muss ein Vielfaches von 4096 sein. Bei höheren Werten gibt es einen abnehmenden Grenzertrag. Außerdem kann die Leseleistung je nach Gerätehardware sinken.

Komprimierung deaktivieren

Standardmäßig wird das Komprimierungsschema lz4hc verwendet. So deaktivieren Sie die Komprimierung:

BOARD_EROFS_COMPRESSOR := none

Dies kann auch für jede Partition einzeln geändert werden, z. B.:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplizierung

EROFS kann doppelte Blöcke mit dem folgenden Flag gemeinsam nutzen:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Ab Android 13 muss die Komprimierung deaktiviert sein, damit dieses Flag verwendet werden kann.

Auswirkungen auf Online-Reisebüros

Ab Android 13 wird EROFS mit Virtual A/B vollständig unterstützt. Der OTA-Paketgenerator kann Deltas erstellen, indem er die LZ4-Streams im Dateisystem intelligent dekomprimiert. Solange sowohl im Quell- als auch im Ziel-Build dieselbe LZ4-Bibliothek verwendet wird, ist das OTA-Paket in der Größe mit einem EXT4-basierten OTA vergleichbar. Auch wenn die src- oder dst-Builds nicht dieselbe LZ4-Bibliothek verwenden, sollte sich das nur geringfügig auf die OTA-Größe auswirken.