EROFS ist ein schreibgeschütztes Dateisystem, das in Linux 4.19 eingeführt wurde. 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 des um sie auf derselben Seite zu dekomprimieren. In einem EROFS-Bild Mehr als 99% der Blöcke können dieses Schema nutzen, sodass die Notwendigkeit um 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 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.
Änderungen am Build
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
. Wenn Sie EXT4-basierte GSI-Images weiterhin testen möchten, 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 wird EROFS in Blöcken mit fester Größe komprimiert. Die Kompressionseffizienz kann durch die Aktivierung von Blöcken mit variabler Länge erheblich gesteigert. 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 festgelegt
Bytes. Die Zahl muss ein Vielfaches von 4.096 sein. Bei höheren Werten sinkt die Leistung jedoch. Je nach Gerätehardware kann die Leseleistung bei höheren Werten sogar sinken.
Komprimierung deaktivieren
Das Komprimierungsschema ist standardmäßig lz4hc
. So deaktivieren Sie die Komprimierung:
BOARD_EROFS_COMPRESSOR := none
Sie können dies auch für einzelne Partitionen ändern, 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 sein, damit dieses Flag verwendet werden kann.
Auswirkungen auf Onlinereisebüros
Ab Android 13 wird EROFS mit Virtual A/B vollständig unterstützt. Das OTA-Paket
kann der Generator Deltas erzeugen, indem er den LZ4 intelligent dekomprimiert.
Streams im Dateisystem. Solange sowohl die Quell- als auch die Ziel-Builds
LZ4-Bibliothek ist, ist das OTA-Paket in der Größe mit einem
EXT4-basiertes OTA. Auch wenn die Builds src
oder dst
nicht dasselbe LZ4 verwenden
sollte sich dies nur geringfügig auf die OTA-Größe auswirken.