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 จะบีบอัดเป็นบล็อกขนาดคงที่ ประสิทธิภาพการบีบอัดอาจ เพิ่มขึ้นอย่างมากจากการเปิดใช้บล็อกที่มีความยาวตัวแปร ซึ่งสามารถกําหนดค่าได้ด้วย Flag ต่อไปนี้
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
เครื่องกำเนิดไฟฟ้าสามารถสร้างเดลต้าโดยคลายการบีบอัด LZ4 อย่างชาญฉลาด
ภายในระบบไฟล์ ตราบใดที่ทั้งบิลด์ต้นทางและเป้าหมายใช้
ไลบรารี LZ4 เดียวกัน แต่แพ็คเกจ OTA มีขนาดเท่าๆ กัน
OTA ที่ใช้ EXT4 แม้ว่าบิลด์ src
หรือ dst
จะไม่ได้ใช้ LZ4 เดียวกันก็ตาม
ก็น่าจะส่งผลเพียงเล็กน้อยต่อขนาดของ OTA เท่านั้น