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 สองรายการสำหรับ /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 จะต้องปิดใช้การบีบอัดจึงจะใช้แฟล็กนี้ได้

ผลกระทบต่อ OTA

ตั้งแต่ Android 13 เป็นต้นไป EROFS ได้รับการรองรับอย่างเต็มรูปแบบด้วย Virtual A/B ตัวสร้างแพ็คเกจ OTA สามารถสร้างเดลต้าได้โดยการขยายขนาดสตรีม LZ4 ภายในระบบไฟล์อย่างชาญฉลาด ตราบใดที่ทั้งบิลด์ต้นทางและเป้าหมายใช้ไลบรารี LZ4 เดียวกัน แพ็คเกจ OTA จะมีขนาดเทียบเคียงได้กับ OTA ที่ใช้ EXT4 แม้ว่าบิลด์ src/dst จะไม่ใช้ไลบรารี lz4 เดียวกัน แต่ก็ควรมีผลกระทบเพียงเล็กน้อยต่อขนาด OTA เท่านั้น