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.
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 potrzebę przydzielania dodatkowych stron podczas operacji odczytu.
Obrazy EROFS nie muszą być skompresowane. Jeśli jednak używasz kompresji, obrazy są średnio o około 25% mniejsze. Przy najwyższych poziomach kompresji obrazy mogą być nawet o 45% mniejsze.
Niezależnie od tego, czy używasz kompresji, czy nie, EROFS działa lepiej niż inne systemy plików pod względem czasu dostępu losowego i sekwencyjnego.
Zmiany w kompilacji
Aby włączyć EROFS, użyj typu systemu plików erofs w BoardConfig.mk.
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 fstab
Typ fstab to erofs, a jedyna wymagana opcja montowania to ro. Aby zachować
możliwość testowania obrazów GSI opartych na EXT4, możesz użyć 2 wpisów fstab dla
/system.
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 EROFS kompresuje 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 przełącznika:
BOARD_EROFS_PCLUSTER_SIZE := 262144
Ustawia to maksymalny rozmiar bloku PCLUSTER lub bloku o zmiennej długości na 262 144 bajty. Liczba musi być wielokrotnością liczby 4096. Przy wyższych wartościach korzyści są coraz mniejsze, a wyższe wartości mogą zmniejszyć wydajność odczytu w zależności od sprzętu urządzenia.
Wyłączanie kompresji
Domyślnie schemat kompresji to lz4hc. Aby wyłączyć kompresję, użyj:
BOARD_EROFS_COMPRESSOR := none
Można to też zmienić w przypadku poszczególnych partycji, np.:
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
Deduplikacja
EROFS może udostępniać zduplikowane bloki za pomocą tego przełącznika:
BOARD_EROFS_SHARE_DUP_BLOCKS := true
W Androidzie 13, aby użyć tego przełącznika, musisz wyłączyć kompresję.
Wpływ na aktualizacje OTA
W Androidzie 13 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 kompilacje źródłowa 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 używają tej samej biblioteki LZ4, powinno to mieć tylko niewielki wpływ na rozmiar OTA.