EROF

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.