EROFS to system plików tylko do odczytu wprowadzony w Linuxie 4.19. Obsługuje kompresję i deduplikacji oraz jest zoptymalizowany pod kątem 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 po zastosowaniu kompresji obrazy są średnio o 25% mniejsze. Przy najwyższym poziomie kompresji obrazy mogą być nawet o 45% mniejsze.
Wykazano, że EROFS osiąga lepsze wyniki niż inne, niezależnie od tego, czy korzysta z kompresji, czy nie. w systemach plików zarówno w losowym, jak i sekwencyjnym czasie dostępu.
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 dane w bloki o stałym rozmiarze. Skuteczność kompresji może być znacznie się zwiększyły dzięki włączeniu bloków o zmiennej długości. Można to skonfigurować za pomocą tego parametru:
BOARD_EROFS_PCLUSTER_SIZE := 262144
Ustawia maksymalny rozmiar bloku PCLUSTER
(o zmiennej długości) na 262144.
B. Liczba musi być wielokrotnością liczby 4096. W przypadku wyższych wartości efektywność odczytu może się zmniejszać, a w zależności od sprzętu urządzenia może to wpływać na 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 wersji Androida 13 kompresja musi być wyłączona, aby można było używać tej flagi.
Wpływ na OTA
Od Androida 13 model EROFS jest w pełni obsługiwany przez wirtualne A/B. Pakiet OTA
może generować delta przez inteligentną dekompresję biblioteki LZ4
w obrębie systemu plików. Jeśli kompilacja źródłowa i docelowa używają
i używa tej samej biblioteki LZ4, rozmiar pakietu OTA jest porównywalny do
OTA oparte na EXT4. Nawet jeśli kompilacje src
lub dst
nie korzystają z tej samej biblioteki LZ4, powinny mieć niewielki wpływ na rozmiar OTA.