EROFS

EROFS to system plików tylko do odczytu wprowadzony w Linuxie 4.19. Obsługuje kompresję i deduplikacji oraz jest zoptymalizowany pod kątem odczytu.

Podstawową różnicą między EROFS a innymi skompresowanymi systemami plików jest to, że obsługuje on kompresję na miejscu. Skompresowane dane są przechowywane na końcu bloków, aby można je było odtworzyć na tej samej stronie. W przypadku obrazu EROFS ponad 99% bloków może korzystać z tego schematu, dzięki czemu nie trzeba przydzielać dodatkowych stron podczas operacji odczytu.

Obrazy EROFS nie muszą być skompresowane. Jednak po zastosowaniu kompresji obrazy są średnio o 25% mniejsze. Przy najwyższym poziomie kompresji obrazy mogą być nawet o 45% mniejsze.

Wykazano, że EROFS osiąga lepsze wyniki niż inne, niezależnie od tego, czy korzysta z kompresji, czy nie. w systemach plików zarówno w losowym, jak i sekwencyjnym czasie dostępu.

Zmiany w kompilacji

Aby włączyć EROFS, użyj typu systemu plików erofsBoardConfig.mk. Na przykład:

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

zmiany we fstab

Typ fstab to erofs, a jedyną wymaganą opcją montowania jest ro. Aby zachować możliwość testowania obrazów GSI opartych na EXT4, możesz użyć 2 wpisów fstab dla /system.

Na przykład:

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

Dostosowywanie kompresji

Domyślnie EROFS kompresuje dane w bloki o stałym rozmiarze. Skuteczność kompresji może być znacznie się zwiększyły dzięki włączeniu bloków o zmiennej długości. Można to skonfigurować za pomocą tego parametru:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Ustawia maksymalny rozmiar bloku PCLUSTER (o zmiennej długości) na 262144. B. Liczba musi być wielokrotnością liczby 4096. W przypadku wyższych wartości efektywność odczytu może się zmniejszać, a w zależności od sprzętu urządzenia może to wpływać na wydajność odczytu.

Wyłącz kompresję

Domyślnie schemat kompresji to lz4hc. Aby wyłączyć kompresję, użyj:

BOARD_EROFS_COMPRESSOR := none

Można je też zmienić na poziomie partycji, na przykład:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplikacja

EROFS może udostępniać zduplikowane bloki za pomocą tego parametru:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Od wersji Androida 13 kompresja musi być wyłączona, aby można było używać tej flagi.

Wpływ na OTA

Od Androida 13 model EROFS jest w pełni obsługiwany przez wirtualne A/B. Pakiet OTA może generować delta przez inteligentną dekompresję biblioteki LZ4 w obrębie systemu plików. Jeśli kompilacja źródłowa i docelowa używają i używa tej samej biblioteki LZ4, rozmiar pakietu OTA jest porównywalny do OTA oparte na EXT4. Nawet jeśli kompilacje src lub dst nie korzystają z tej samej biblioteki LZ4, powinny mieć niewielki wpływ na rozmiar OTA.