EROFS to system plików tylko do odczytu wprowadzony w Linuxie 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 skompresować 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 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 w pliku 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ż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 w zależności od sprzętu urządzenia może to obniżyć 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 Androida 13, aby korzystać z tej flagi, musisz wyłączyć kompresję.
Wpływ na OTA
Od Androida 13 EROFS jest w pełni obsługiwany w ramach funkcji Virtual A/B. Generator pakietów OTA może generować różnice, inteligentnie dekompresując strumienie LZ4 w systemie plików. Jeśli zarówno kompilacje źródłowa, jak i docelowa korzystają z tej samej biblioteki LZ4, rozmiar pakietu OTA będzie porównywalny z pakietem OTA opartym na EXT4. Nawet jeśli kompilacje src
lub dst
nie korzystają z tej samej biblioteki LZ4, powinny mieć niewielki wpływ na rozmiar OTA.