EROFS

EROFS เป็นระบบไฟล์แบบอ่านอย่างเดียวที่เปิดตัวใน Linux 4.19 รองรับ การบีบอัดและการขจัดข้อมูลที่ซ้ำกัน และได้รับการเพิ่มประสิทธิภาพเพื่อประสิทธิภาพในการอ่าน

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