EROFS

EROFS to system plików tylko do odczytu wprowadzony w Linuksie 4.19. Obsługuje kompresję i deduplikację oraz jest zoptymalizowany pod kątem wydajności 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 przy korzystaniu z kompresji obrazy są mniejsze średnio o 25%. Przy najwyższym poziomie kompresji obrazy mogą być nawet o 45% mniejsze.

Wykazano, że system EROFS, niezależnie od tego, czy używa kompresji, czy nie, działa lepiej niż inne systemy plików zarówno w przypadku dostępu losowego, jak i sekwencyjnego.

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 się do bloków o stałym rozmiarze. Skuteczność kompresji można znacznie zwiększyć, włączając bloki o zmiennej długości. Można to skonfigurować za pomocą tego parametru:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Maksymalna wartość parametru PCLUSTER (blok o zmiennej długości) wynosi 262 144 bajty. Liczba musi być wielokrotnością 4096. W przypadku wyższych wartości występuje efekt malejących przychodów, a wyższe wartości mogą obniżać wydajność odczytu w zależności od sprzętu urządzenia.

Wyłącz kompresję

Domyślny 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ą tej flagi:

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 aplikacje internetowe typu „OTA”

Od Androida 13 EROFS jest w pełni obsługiwany w ramach funkcji Virtual A/B. Generator pakietów OTA może generować delta przez inteligentną dekompresję strumieni LZ4 w systemie plików. O ile zarówno kompilacja źródłowa, jak i docelowa używają tej samej biblioteki LZ4, rozmiar pakietu OTA jest porównywalny z rozmiarem pakietu OTA opartego na EXT4. Nawet jeśli kompilacje src lub dst nie korzystają z tej samej biblioteki LZ4, taka konfiguracja powinna mieć nieznaczny wpływ na rozmiar OTA.