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 erofs
w BoardConfig.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.