EROFS

EROFS to system plików tylko do odczytu wprowadzony w systemie Linux 4.19. Obsługuje kompresję i deduplikację oraz jest zoptymalizowany pod kątem wydajności odczytu.

Główna różnica między EROFS a innymi skompresowanymi systemami plików polega na tym, że obsługuje on dekompresję w miejscu. Skompresowane dane są przechowywane na końcu bloków, dzięki czemu można je rozpakować na tej samej stronie. W obrazie EROFS ponad 99% bloków może korzystać z tego schematu, co eliminuje konieczność przydzielania dodatkowych stron podczas operacji odczytu.

Obrazy EROFS nie muszą być skompresowane. W przypadku kompresji obrazy są jednak średnio o 25% mniejsze. Przy najwyższych poziomach kompresji obrazy mogą być nawet o 45% mniejsze.

Niezależnie od tego, czy kompresja jest używana, czy nie, EROFS przewyższa inne systemy plików pod względem czasu dostępu losowego i sekwencyjnego.

Wprowadzanie zmian 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 w pliku fstab,

Typ fstab to erofs, a jedyna potrzebna opcja montowania to ro. Aby zachować możliwość testowania obrazów GSI opartych na systemie 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

Dostrajanie kompresji

Domyślnie system EROFS kompresuje dane do bloków o stałym rozmiarze. Wydajność kompresji można znacznie zwiększyć, włączając bloki o zmiennej długości. Można to skonfigurować za pomocą tego flagi:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Ustawia to maksymalny rozmiar bloku o długości PCLUSTER lub zmiennej na 262144 bajtów. Liczba musi być wielokrotnością liczby 4096. Przy wyższych wartościach korzyści są coraz mniejsze, a w zależności od sprzętu urządzenia wyższe wartości mogą obniżać wydajność odczytu.

Wyłącz kompresję

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

BOARD_EROFS_COMPRESSOR := none

Można to zmienić w przypadku poszczególnych partycji, np.:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplikacja

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

BOARD_EROFS_SHARE_DUP_BLOCKS := true

W Androidzie 13 i nowszych kompresja musi być wyłączona, aby można było używać tej flagi.

Wpływ na internetowe biura podróży

Od Androida 13 system EROFS jest w pełni obsługiwany w przypadku wirtualnego A/B. Generator pakietów OTA może generować delty, inteligentnie dekompresując strumienie LZ4 w systemie plików. Jeśli zarówno kompilacja źródłowa, jak i docelowa korzystają z tej samej biblioteki LZ4, pakiet OTA ma podobny rozmiar do pakietu OTA opartego na EXT4. Nawet jeśli kompilacje srcdst nie korzystają z tej samej biblioteki LZ4, powinno to mieć tylko niewielki wpływ na rozmiar aktualizacji OTA.