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 direkte Dekomprimierung unterstützt. Komprimierte Daten werden am Ende der Blöcke gespeichert, sodass sie auf derselben Seite dekomprimiert werden können. In einem EROFS-Image können mehr als 99 % der Blöcke dieses Schema verwenden, sodass bei Lesevorgängen keine zusätzlichen Seiten zugewiesen werden müssen.
EROFS-Bilder müssen nicht komprimiert werden. Bei Verwendung der Komprimierung sind die Bilder jedoch im Durchschnitt etwa 25 % kleiner. Bei der höchsten Komprimierungsstufe können Bilder bis zu 45 % kleiner sein.
Unabhängig davon, ob Komprimierung verwendet wird oder nicht, hat sich gezeigt, dass EROFS andere Dateisysteme sowohl bei den zufälligen als auch bei den sequentiellen Zugriffszeiten übertrifft.
Build-Änderungen
Um EROFS zu aktivieren, verwenden Sie den Dateisystemtyp „erofs“ in BoardConfig.mk
. Zum 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 benötigte Mount-Option ist „ro“. Um weiterhin die Möglichkeit zu haben, EXT4-basierte GSI-Images zu testen, können Sie zwei fstab-Einträge für /system.
Zum 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
Kompressionsabstimmung
Standardmäßig komprimiert EROFS in Blöcke fester Größe. Durch die Aktivierung von Blöcken variabler Länge kann die Wirksamkeit der Kompression erheblich gesteigert werden. Dies kann durch das folgende Flag konfiguriert werden:
BOARD_EROFS_PCLUSTER_SIZE := 262144
Dadurch wird die maximale „PCluster“- oder Blockgröße variabler Länge auf 262144 Bytes festgelegt. Die Zahl muss ein Vielfaches von 4096 sein. Bei höheren Werten sind die Ergebnisse geringer, und je nach Gerätehardware können höhere Werte die Leseleistung verringern.
Komprimierung deaktivieren
Standardmäßig ist das Komprimierungsschema lz4hc
. Um die Komprimierung zu deaktivieren, verwenden Sie:
BOARD_EROFS_COMPRESSOR := none
Dies kann auch pro Partition geändert werden, zum Beispiel:
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
Deduplizierung
EROFS kann doppelte Blöcke mit dem folgenden Flag teilen:
BOARD_EROFS_SHARE_DUP_BLOCKS := true
Ab Android 13 muss die Komprimierung deaktiviert sein, um dieses Flag zu verwenden.
Auswirkungen auf OTAs
Ab Android 13 wird EROFS vollständig mit Virtual A/B unterstützt. Der OTA-Paketgenerator ist in der Lage, Deltas zu generieren, indem er die LZ4-Streams im Dateisystem intelligent dekomprimiert. Solange sowohl der Quell- als auch der Ziel-Build dieselbe LZ4-Bibliothek verwenden, ist das OTA-Paket in seiner Größe mit einem EXT4-basierten OTA vergleichbar. Auch wenn die src/dst-Builds nicht dieselbe lz4-Bibliothek verwenden, sollte dies nur geringe Auswirkungen auf die OTA-Größe haben.