EROFS adalah sistem file hanya baca yang diperkenalkan di Linux 4.19. Alat ini mendukung kompresi dan penghapusan duplikat, serta dioptimalkan untuk performa baca.
Perbedaan utama antara EROFS dan sistem file terkompresi lainnya adalah EROFS mendukung dekompresi di tempat. Data yang dikompresi disimpan di akhir blok, sehingga dapat dikompresi ke halaman yang sama. Pada image EROFS, lebih dari 99% blok dapat menggunakan skema ini, sehingga tidak perlu mengalokasikan halaman tambahan selama operasi baca.
Gambar EROFS tidak harus dikompresi. Namun, saat menggunakan kompresi, rata-rata gambar akan berukuran sekitar 25% lebih kecil. Pada tingkat kompresi tertinggi, gambar dapat lebih kecil hingga 45%.
Baik menggunakan kompresi maupun tidak, EROFS telah terbukti mengungguli sistem file lainnya dalam waktu akses acak dan berurutan.
Perubahan build
Untuk mengaktifkan EROFS, gunakan jenis sistem file erofs
di BoardConfig.mk
.
Contoh:
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
perubahan fstab
Jenis fstab adalah erofs
, dan satu-satunya opsi pemasangan yang diperlukan adalah ro
. Untuk mempertahankan
kemampuan menguji image GSI berbasis EXT4, Anda dapat menggunakan dua entri fstab untuk
/system.
Contoh:
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
Penyesuaian kompresi
Secara default, EROFS mengompresi menjadi blok berukuran tetap. Efisiensi kompresi dapat ditingkatkan secara signifikan dengan mengaktifkan blok panjang variabel. Opsi ini dapat dikonfigurasi oleh tanda berikut:
BOARD_EROFS_PCLUSTER_SIZE := 262144
Tindakan ini menetapkan PCLUSTER
maksimum, atau ukuran blok panjang variabel, ke 262144
byte. Angka harus kelipatan 4096. Ada penurunan hasil pada
nilai yang lebih tinggi, dan nilai yang lebih tinggi dapat menurunkan performa baca, bergantung pada
hardware perangkat.
Menonaktifkan kompresi
Secara default, skema kompresinya adalah lz4hc
. Untuk menonaktifkan kompresi, gunakan:
BOARD_EROFS_COMPRESSOR := none
Hal ini juga dapat diubah berdasarkan per partisi, misalnya:
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
Penghapusan Duplikat
EROFS dapat membagikan blok duplikat dengan tanda berikut:
BOARD_EROFS_SHARE_DUP_BLOCKS := true
Mulai Android 13, kompresi harus dinonaktifkan untuk menggunakan flag ini.
Dampak pada OTA
Mulai Android 13, EROFS didukung sepenuhnya dengan Virtual A/B. Generator paket
OTA dapat menghasilkan delta dengan mendekompresi streaming
LZ4 secara cerdas dalam sistem file. Selama build sumber dan target menggunakan
library LZ4 yang sama, ukuran paket OTA sebanding dengan
OTA berbasis EXT4. Meskipun build src
atau dst
tidak menggunakan library LZ4
yang sama, hal ini hanya akan memiliki dampak kecil pada ukuran OTA.