EROFS

EROFS adalah sistem file read-only yang diperkenalkan di Linux 4.19. Ini mendukung kompresi dan deduplikasi, dan dioptimalkan untuk kinerja membaca.

Perbedaan utama antara EROFS dan sistem file terkompresi lainnya adalah ia mendukung dekompresi di tempat. Data terkompresi disimpan di akhir blok, sehingga dapat didekompresi menjadi halaman yang sama. Dalam gambar EROFS, lebih dari 99% blok dapat menggunakan skema ini, sehingga menghilangkan kebutuhan untuk mengalokasikan halaman tambahan selama operasi membaca.

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

Baik menggunakan kompresi atau tidak, EROFS telah terbukti mengungguli sistem file lain baik dalam waktu akses acak maupun berurutan.

Membangun Perubahan

Untuk mengaktifkan EROFS, gunakan tipe sistem file "erofs" di BoardConfig.mk . Misalnya:

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

fstab Perubahan

Tipe fstab adalah "erofs", dan satu-satunya opsi mount yang diperlukan adalah "ro". Untuk mempertahankan kemampuan menguji image GSI berbasis EXT4, Anda dapat menggunakan dua entri fstab untuk /system.

Misalnya:

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 dikompres menjadi blok berukuran tetap. Kemanjuran kompresi dapat ditingkatkan secara signifikan dengan mengaktifkan blok dengan panjang variabel. Ini dapat dikonfigurasi dengan tanda berikut:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Ini menetapkan "pcluster" maksimum, atau ukuran blok dengan panjang variabel, menjadi 262144 byte. Angkanya harus kelipatan 4096. Terdapat hasil yang semakin berkurang pada nilai yang lebih tinggi, dan nilai yang lebih tinggi dapat menurunkan kinerja baca tergantung pada perangkat keras perangkat.

Menonaktifkan Kompresi

Secara default, skema kompresinya adalah lz4hc . Untuk menonaktifkan kompresi, gunakan:

BOARD_EROFS_COMPRESSOR := none

Ini juga dapat diubah per partisi, misalnya:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplikasi

EROFS dapat membagikan blok duplikat dengan tanda berikut:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Mulai Android 13, kompresi harus dinonaktifkan untuk menggunakan tanda ini.

Dampak pada OTA

Mulai Android 13, EROFS didukung penuh dengan Virtual A/B. Generator paket OTA mampu menghasilkan delta dengan secara cerdas mendekompresi aliran LZ4 dalam sistem file. Selama build sumber dan target menggunakan pustaka LZ4 yang sama, ukuran paket OTA akan sebanding dengan OTA berbasis EXT4. Meskipun build src/dst tidak menggunakan pustaka lz4 yang sama, hal ini hanya akan berdampak kecil pada ukuran OTA.