EROFS

EROFS ist ein schreibgeschütztes Dateisystem, das mit Linux 4.19 eingeführt wurde. Er unterstützt die 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 in 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-Images müssen nicht komprimiert werden. Bei Komprimierung sind Bilder jedoch im Durchschnitt um 25% kleiner. Bei der höchsten Komprimierungsstufe können Bilder um bis zu 45% kleiner werden.

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

Build-Änderungen

Wenn Sie EROFS aktivieren möchten, 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 EXT4-basierte GSI-Images weiterhin 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

Komprimierung

Standardmäßig komprimiert EROFS in Blöcke fester Größe. Die Komprimierungseffizienz kann erheblich gesteigert werden, wenn Blöcke mit variabler Länge aktiviert werden. Das 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 4.096 sein. Bei höheren Werten sinkt die Leistung jedoch. Je nach Gerätehardware kann die Leseleistung sogar sinken.

Komprimierung deaktivieren

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

BOARD_EROFS_COMPRESSOR := none

Dies kann auch für einzelne Partitionen geändert werden, z. B. so:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplizierung

EROFS kann mit dem folgenden Flag doppelte Blöcke freigeben:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Ab Android 13 muss die Komprimierung deaktiviert werden, um dieses Flag verwenden zu können.

Auswirkungen auf Drittanbieter-Buchungsportale

Ab Android 13 wird EROFS vollständig mit virtuellem A/B unterstützt. Der OTA-Paketgenerator kann Deltas durch eine intelligente Dekomprimierung der LZ4-Streams im Dateisystem generieren. 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- oder dst-Builds nicht dieselbe LZ4-Bibliothek verwenden, sollte dies nur geringe Auswirkungen auf die OTA-Größe haben.