EROFS เป็นระบบไฟล์แบบอ่านอย่างเดียวที่เปิดตัวใน Linux 4.19 เครื่องมือนี้รองรับการบีบอัดและการกรองข้อมูลที่ซ้ำกันออก รวมทั้งได้รับการเพิ่มประสิทธิภาพเพื่อประสิทธิภาพในการอ่าน
ความแตกต่างหลักระหว่าง EROFS กับระบบไฟล์แบบอื่นๆ ที่บีบอัดไว้คือ EROFS รองรับการขยายไฟล์ในตำแหน่งเดิม ระบบจะจัดเก็บข้อมูลที่บีบอัดไว้ที่ท้ายบล็อก เพื่อให้สามารถขยายข้อมูลดังกล่าวลงในหน้าเดียวกันได้ ในอิมเมจ EROFS บล็อกมากกว่า 99% สามารถใช้รูปแบบนี้ได้ จึงไม่ต้องจัดสรรหน้าเพิ่มเติมระหว่างการอ่าน
คุณไม่จำเป็นต้องบีบอัดรูปภาพ EROFS อย่างไรก็ตาม เมื่อใช้การบีบอัด รูปภาพจะเล็กกว่า 25% โดยเฉลี่ย เมื่อบีบอัดระดับสูงสุด รูปภาพสามารถ ลดขนาดลงได้ถึง 45%
ไม่ว่าจะใช้การบีบอัดหรือไม่ การศึกษาพบว่า EROFS มีประสิทธิภาพดีกว่าระบบไฟล์อื่นๆ ทั้งในด้านเวลาในการเข้าถึงแบบสุ่มและแบบตามลำดับ
การเปลี่ยนแปลงในบิลด์
หากต้องการเปิดใช้ EROFS ให้ใช้ระบบไฟล์ประเภท erofs
ใน BoardConfig.mk
เช่น
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
ประเภท fstab คือ erofs
และตัวเลือกการเชื่อมต่อเดียวที่ต้องใช้คือ ro
หากต้องการคงความสามารถในการทดสอบภาพ GSI ที่ใช้ EXT4 ไว้ คุณสามารถใช้รายการ fstab 2 รายการสำหรับ /system.
เช่น
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
การปรับแต่งการบีบอัด
โดยค่าเริ่มต้น EROFS จะบีบอัดเป็นบล็อกขนาดคงที่ ประสิทธิภาพการบีบอัดอาจเพิ่มขึ้นได้อย่างมากด้วยการเปิดใช้บล็อกที่มีความยาวแปรผัน ซึ่งจะกำหนดค่าได้ด้วยแฟล็กต่อไปนี้
BOARD_EROFS_PCLUSTER_SIZE := 262144
ซึ่งจะตั้งค่า PCLUSTER
สูงสุดหรือขนาดบล็อกที่มีความยาวแปรผันเป็น 262144 บิต ตัวเลขต้องเป็นจำนวนที่คูณด้วย 4096 ค่าที่สูงกว่าจะทำให้ประสิทธิภาพในการอ่านลดลง โดยขึ้นอยู่กับฮาร์ดแวร์อุปกรณ์
ปิดใช้การบีบอัด
โดยค่าเริ่มต้น รูปแบบการบีบอัดคือ lz4hc
หากต้องการปิดใช้การบีบอัด ให้ใช้คำสั่งต่อไปนี้
BOARD_EROFS_COMPRESSOR := none
ซึ่งสามารถเปลี่ยนแปลงตามแต่ละพาร์ติชันได้เช่นกัน เช่น
BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none
การกรองข้อมูลที่ซ้ำกันออก
EROFS สามารถแชร์บล็อกที่ซ้ำกันโดยใช้แฟล็กต่อไปนี้
BOARD_EROFS_SHARE_DUP_BLOCKS := true
ตั้งแต่ Android 13 เป็นต้นไป คุณต้องปิดใช้การบีบอัดเพื่อใช้ Flag นี้
ผลกระทบต่อ OTA
ตั้งแต่ Android 13 เป็นต้นไป ระบบจะรองรับ EROFS กับ Virtual A/B อย่างเต็มรูปแบบ เครื่องมือสร้างแพ็กเกจ OTA จะสร้าง Delta โดยการแยกไฟล์ LZ4 ในสตรีมภายในระบบไฟล์อย่างชาญฉลาด ตราบใดที่ทั้งบิลด์ต้นทางและบิลด์เป้าหมายใช้ไลบรารี LZ4 เดียวกัน แพ็กเกจ OTA จะมีขนาดเทียบเท่ากับ OTA ที่ใช้ EXT4 แม้ว่าบิลด์ src
หรือ dst
จะไม่ได้ใช้ไลบรารี LZ4 เดียวกัน แต่ก็จะส่งผลต่อขนาดของ OTA เพียงเล็กน้อยเท่านั้น