EROFS

EROFS adalah sistem file hanya baca yang diperkenalkan di Linux 4.19. Fitur 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 didekompresi ke halaman yang sama. Dalam image EROFS, lebih dari 99% blok dapat menggunakan skema ini, sehingga tidak perlu mengalokasikan halaman tambahan selama operasi baca.

Gambar EROFS tidak perlu dikompresi. Namun, saat menggunakan kompresi, ukuran gambar rata-rata 25% lebih kecil. Pada tingkat kompresi tertinggi, ukuran gambar bisa lebih kecil hingga 45%.

Baik menggunakan kompresi atau tidak, EROFS telah terbukti mengungguli sistem file lain 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

Penyetelan kompresi

Secara default, EROFS dikompresi ke dalam blok berukuran tetap. Efektivitas kompresi dapat ditingkatkan secara signifikan dengan mengaktifkan blok panjang variabel. Hal 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. Nilai yang lebih tinggi akan menghasilkan pengembalian yang semakin berkurang, dan nilai yang lebih tinggi dapat menurunkan performa baca, bergantung pada hardware perangkat.

Menonaktifkan kompresi

Secara default, skema kompresi 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 A/B Virtual. Generator paket OTA dapat menghasilkan delta dengan mendekompresi aliran LZ4 secara cerdas dalam sistem file. Selama build sumber dan target menggunakan library LZ4 yang sama, paket OTA akan memiliki ukuran yang sebanding dengan OTA berbasis EXT4. Meskipun build src atau dst tidak menggunakan library LZ4 yang sama, hal ini hanya akan berdampak kecil pada ukuran OTA.