Tüm eğitimler
TEKNİK REHBERGÖMÜLÜ LİNUXDOSYA SİSTEMİ2026

EROFS
Gömülü Salt Okunur Dosya Sistemi

Huawei'nin geliştirdiği EROFS dosya sisteminin yüksek sıkıştırma oranı, düşük bellek ayak izi ve gömülü cihazlarda rootfs olarak kullanımı; SquashFS ile karşılaştırma ve üretim senaryoları.

00 EROFS Neden? SquashFS ile Karşılaştırma

EROFS (Extendable Read-Only File System), Huawei tarafından Android cihazların system.img bölümü için tasarlanmış, Linux 5.4'te ana çekirdeğe dahil edilmiş salt okunur bir dosya sistemidir. SquashFS'e kıyasla rastgele erişim sıkıştırması, daha düşük mount gecikmesi ve parça tabanlı (chunk-based) sıkıştırma çözme mimarisiyle öne çıkar.

Geleneksel SquashFS, veriyi sabit boyutlu bloklara (genellikle 128 KB) böler ve bir bloktan herhangi bir bayta erişmek için tüm bloğu belleğe çekip sıkıştırmayı çözmeniz gerekir. Bu yaklaşım sıkıştırma oranını artırırken rastgele erişim maliyetini yükseltir. EROFS ise z-erofs katmanı aracılığıyla dosyayı mantıksal blok gruplarına (logical cluster) ayırır; her grup bağımsız olarak sıkıştırılır ve doğrudan page cache'e eşlenir. Böylece disk üzerindeki verinin büyük bölümü belleğe yüklenmeden yalnızca ihtiyaç duyulan parça çözülür.

SquashFS erişim modeli:
  uygulama okuma isteği
        |
        v
  128 KB blok belleğe al
        |
        v
  tüm bloğu sıkıştırma çöz
        |
        v
  hedef veriyi döndür   [gereksiz sıkıştırma çözme maliyeti]

EROFS z-erofs erişim modeli:
  uygulama okuma isteği
        |
        v
  mantıksal küme indeksini hesapla
        |
        v
  yalnızca ilgili kümeyi sıkıştırma çöz
        |
        v
  page cache'e eşle ve döndür  [minimal bellek baskısı]
  

Gömülü sistemlerde bu fark kritiktir: 256 MB RAM'e sahip bir cihazda rootfs okumalarının büyük blok sıkıştırma çözme döngülerine takılması, hem gecikme hem de bellek kullanımı açısından olumsuz sonuçlar doğurur. EROFS bu sorunu yapısal olarak çözer.

ÖzellikSquashFSEROFS
Sıkıştırma granülaritesiSabit blok (128 KB)Mantıksal küme (4–32 KB)
Rastgele erişim maliyetiYüksek (tam blok çözme)Düşük (küme düzeyi çözme)
Page cache entegrasyonuKısıtlıDoğal (inline page mapping)
Mount gecikmesiOrtaDüşük (metadata cache)
Desteklenen sıkıştırıcılargzip, lz4, lzo, xz, zstdlz4, lzma, deflate, zstd
Kernel giriş versiyonu2.6.295.4
Android kullanımıEski sürümlerAndroid 12+

EROFS ayrıca fragment packing özelliği sunar: küçük dosyalar (genellikle 4 KB altı) tek bir sıkıştırılmış parçada bir araya getirilir, böylece çok sayıda küçük dosya içeren rootfs imajlarında hem disk hem de bellek kullanımı belirgin biçimde azalır.

01 Dosya Sistemi Yapısı

EROFS on-disk yapısı superblock, inode tablosu, xattr depolama alanı ve z-erofs sıkıştırma katmanından oluşur. Bu katmanları anlamak, imaj optimizasyonu ve sorun giderme için temel oluşturur.

Disk üzerindeki yerleşim sabit bir sıraya sahiptir. Superblock, blok 0'dan itibaren 1024 bayt ofsetle başlar ve dosya sistemine ait tüm üst düzey meta verileri barındırır. İnode'lar compact (32 bayt) veya extended (64 bayt) formatında depolanır; extended inode zaman damgası, xattr ve büyük dosya boyutu için ek alanlar sağlar.

Blok 0        : başlangıç dolgusu (1024 B)
Blok 0+1024   : Superblock (128 B)
Blok 1 ..     : İnode tablosu (compact/extended karışık)
               : xattr meta veri alanı
               : Veri blokları (sıkıştırılmış veya ham)
               : z-erofs cluster indeks tablosu
               : Shared xattr deposu
  

Superblock alanları (önemli olanlar):

magic0xE0F5E1E2 — EROFS imzası
blkszbitsBlok boyutu üssü; genellikle 12 (4096 B)
root_nidKök dizin inode numarası
inosToplam inode sayısı
build_timeİmaj oluşturma zaman damgası (tekrarlanabilir yapı için sabitlenebilir)
feature_compatGeriye dönük uyumlu özellik bayrakları
feature_incompatUyumsuz özellik bayrakları (z-erofs, chunk-based)
uuidDosya sistemi UUID'si
volume_nameİsteğe bağlı birim etiketi

z-erofs sıkıştırma katmanı: Her sıkıştırılmış dosya, mantıksal küme tanımlayıcıları (logical cluster descriptor) dizisine sahiptir. Her tanımlayıcı, fiziksel blok konumunu, sıkıştırma türünü ve kümenin tipine (HEAD veya NONHEAD) göre parametrelerini içerir. HEAD tipi kümeler sıkıştırma akışının başını işaret eder; NONHEAD kümeler bir önceki HEAD'in devamıdır ve ek disk alanı tüketmez.

xattr depolama: EROFS, xattr verilerini paylaşımlı bir havuzda saklar. Aynı xattr değerini taşıyan birden fazla dosya bu havuza referans verir; bu yaklaşım SELinux etiketleri gibi tekrarlayan xattr'ların oluşturduğu alan israfını ortadan kaldırır.

# Mevcut bir EROFS imajının superblock bilgilerini görüntüleme
dump.erofs -s rootfs.erofs

# Tüm inode listesi (verbose)
dump.erofs -i rootfs.erofs

# Belirli bir inode'un ayrıntıları
dump.erofs --inode=/etc/passwd rootfs.erofs

02 mkfs.erofs ile İmaj Oluşturma

mkfs.erofs aracı, erofs-utils paketinde yer alır ve bir dizinden EROFS imajı üretir. Sıkıştırma algoritması, fragment packing, xattr kopyalama ve tekrarlanabilir yapı seçenekleri bu araçla yapılandırılır.

erofs-utils derleme ve kurulum:

# Bağımlılıklar (Ubuntu/Debian)
sudo apt-get install liblz4-dev liblzma-dev zlib1g-dev libzstd-dev

# Kaynak koddan derleme
git clone https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git
cd erofs-utils
./autogen.sh
./configure --enable-lz4 --enable-lzma --enable-zstd
make -j$(nproc)
sudo make install

Temel kullanım:

# LZ4HC ile EROFS imajı oluşturma
mkfs.erofs -z lz4hc,12 rootfs.erofs /path/to/rootfs/

# LZMA ile maksimum sıkıştırma
mkfs.erofs -z lzma,9 rootfs.erofs /path/to/rootfs/

# Zstandard ile denge
mkfs.erofs -z zstd,3 rootfs.erofs /path/to/rootfs/

# Fragment packing etkin (küçük dosyalar birleştirilir)
mkfs.erofs -z lz4hc,12 --fragments rootfs.erofs /path/to/rootfs/

# Tekrarlanabilir yapı (zaman damgasını sabitle)
mkfs.erofs -z lz4hc,12 -T 0 rootfs.erofs /path/to/rootfs/

Önemli mkfs.erofs seçenekleri:

-z ALG,LEVELSıkıştırma algoritması ve seviyesi: lz4hc,0-12 / lzma,0-9 / deflate,0-9 / zstd,1-22
--fragmentsFragment packing: küçük dosyaları tek sıkıştırma akışında bir araya getirir
--dedupeÖzdeş veri bloklarını tek fiziksel bloğa yönlendirir (veri tekilleştirme)
-T EPOCHTüm dosyalar için zaman damgasını sabitle; tekrarlanabilir yapı için 0 kullan
-C BOYUTMantıksal küme boyutu (varsayılan: 4096); büyük değerler daha iyi sıkıştırma sağlar
--xattr-prefix=STRYalnızca belirtilen önek ile başlayan xattr'ları kopyala
--exclude-path=GLOBİmaj dışında bırakılacak dosya kalıpları
-U UUIDDosya sistemi UUID'sini elle belirt

Yocto entegrasyonu için özel bir imaj sınıfı oluşturma:

# meta-custom/classes/erofs-image.bbclass
EROFS_COMPRESSION ?= "lz4hc,9"
EROFS_EXTRA_ARGS  ?= "--fragments --dedupe -T 0"

do_image_erofs() {
    mkfs.erofs \
        -z ${EROFS_COMPRESSION} \
        ${EROFS_EXTRA_ARGS} \
        ${IMGDEPLOYDIR}/${IMAGE_NAME}.erofs \
        ${IMAGE_ROOTFS}
}

IMAGE_CMD:erofs = "do_image_erofs"
IMAGE_FSTYPES += "erofs"

Fragment packing kullanıldığında, özellikle /lib altındaki küçük paylaşımlı kütüphane dosyaları ile /etc altındaki yapılandırma dosyaları birleştirilerek imaj boyutu %5–15 oranında küçülebilir. Bu kazanım, dosya sistemi erişim örüntüsüne göre değişir.

03 Kernel Yapılandırması

EROFS desteği kernel yapılandırmasında etkinleştirilmesi gereken birkaç seçenek içerir. Çekirdek boyutunu küçük tutmak için sıkıştırma algoritmalarını ve ek özellikleri dikkatli seçin.

Zorunlu çekirdek seçenekleri:

# Temel EROFS desteği (zorunlu)
CONFIG_EROFS_FS=y

# Genel sıkıştırma altyapısı
CONFIG_EROFS_FS_ZIP=y

# LZMA sıkıştırma desteği
CONFIG_EROFS_FS_ZIP_LZMA=y

# Zstandard desteği (kernel 5.16+)
CONFIG_EROFS_FS_ZIP_ZSTD=y

# Yüksek öncelikli iş kuyruğu (düşük gecikmeli sistemler için)
CONFIG_EROFS_FS_PCPU_KTHREAD=y

Modül olarak derlemek yerine =y ile çekirdeğe gömmek önerilir; bu sayede initramfs evresinde EROFS rootfs'e geçiş sorunsuz gerçekleşir. Eğer initrd ayrı bir ext4/cpio ise modül kullanılabilir, ancak rootfs EROFS ise mutlaka gömülü olmalıdır.

ARM64 gömülü platform için örnek defconfig eki:

# arch/arm64/configs/my_embedded_defconfig eklentisi
CONFIG_EROFS_FS=y
CONFIG_EROFS_FS_ZIP=y
CONFIG_EROFS_FS_ZIP_LZMA=y
CONFIG_EROFS_FS_ZIP_ZSTD=y
# SquashFS artık gerekli değilse devre dışı bırak
# CONFIG_SQUASHFS is not set

Çekirdek boyutu etkisi (ARM64, allmodconfig baz alınarak):

Yapılandırmavmlinuz artışıNot
CONFIG_EROFS_FS=y~60 KBTemel destek, sıkıştırmasız
+CONFIG_EROFS_FS_ZIP=y~25 KBLZ4 çözme motoru
+CONFIG_EROFS_FS_ZIP_LZMA=y~80 KBLZMA/XZ çözme kodu
+CONFIG_EROFS_FS_ZIP_ZSTD=y~40 KBZstandard çözme kodu

Kaynak kısıtlı platformlarda yalnızca CONFIG_EROFS_FS_ZIP=y (LZ4) etkinleştirip LZMA ve ZSTD'yi dışarıda bırakmak çekirdek boyutunu minimize eder. LZ4HC ile üretilen bir EROFS imajını böyle bir çekirdek başarıyla okuyabilir; ancak LZMA veya ZSTD ile üretilen imajları mount etmeye çalışırsanız -EOPNOTSUPP hatası alırsınız.

Buildroot ile entegrasyon için BR2_PACKAGE_EROFS_UTILS=y seçeneğini make menuconfig üzerinden Filesystem images altında etkinleştirebilirsiniz. Ayrıca BR2_TARGET_ROOTFS_EROFS=y ile EROFS imajı otomatik üretilir.

04 Gömülü rootfs Olarak EROFS

EROFS'u gömülü bir cihazın kök dosya sistemi olarak kullanmak, salt okunur bir boot akışı gerektirir. initramfs entegrasyonu, read-only boot stratejisi ve üzerine yazılabilir katman ekleme adımlarını bu bölümde ele alacağız.

EROFS rootfs, doğrudan bir flash bölümüne (MTD veya eMMC) yazılabilir. Boot yükleyicisi çekirdeği yükledikten sonra kernel komut satırı parametresi ile kök bölümü belirtilir:

# U-Boot bootargs — eMMC bölümü üzerinde EROFS rootfs
setenv bootargs "console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=erofs ro quiet"

# MTD NAND üzerinde (UBI + EROFS)
setenv bootargs "console=ttyS0,115200 ubi.mtd=rootfs root=ubi0:rootfs rootfstype=erofs ro"

# NVMe üzerinde
setenv bootargs "console=ttyS0,115200 root=/dev/nvme0n1p3 rootfstype=erofs ro"

Saf salt okunur bir rootfs, önyükleme sonrasında /var, /tmp ve /run gibi dizinlere yazma ihtiyacı doğurur. Bu durumu çözmek için tmpfs veya kalıcı bir overlay katmanı kullanılır:

# /etc/fstab: tmpfs ile geçici yazılabilir dizinler
tmpfs   /tmp    tmpfs   defaults,size=64m       0 0
tmpfs   /var    tmpfs   defaults,size=32m       0 0
tmpfs   /run    tmpfs   defaults,size=16m       0 0

# Önyükleme sonrası gerekli dizinleri oluştur
# /etc/tmpfiles.d/var-layout.conf
d /var/log  0755 root root -
d /var/lib  0755 root root -
d /var/run  0755 root root -

initramfs içinde EROFS pivot_root akışı: küçük bir initramfs EROFS bölümünü mount eder, overlay katmanı hazırlar ve switch_root ile gerçek rootfs'e geçer.

Açılış akışı:
  U-Boot / GRUB
       | kernel + initramfs yükle
       v
  Kernel başlatma
       |
       v
  initramfs (busybox init / dracut)
       |  mount /dev/mmcblk0p2 /newroot -t erofs -o ro
       |  mount tmpfs /newroot/var
       |  mount tmpfs /newroot/tmp
       v
  switch_root /newroot /sbin/init
       |
       v
  systemd / sysvinit (EROFS rootfs üzerinde)
  

eMMC'de A/B bölüm düzeni ile EROFS kullanımı güvenli OTA güncellemesi sağlar: güncelleme sırasında pasif bölüm yeni EROFS imajıyla yazılır, başarılı boottest sonrası aktif bölüm değiştirilir. EROFS imajının bütünlüğü dm-verity ile doğrulanabilir.

05 Sıkıştırma Profilleri ve Benchmark

Doğru sıkıştırma algoritması ve seviyesinin seçimi hem imaj boyutunu hem de çalışma zamanı performansını doğrudan etkiler. Bu bölümde EROFS + LZ4HC ile SquashFS + ZSTD karşılaştırması ve flash okuma hızı ölçümleri ele alınmaktadır.

Test ortamı: Cortex-A53 @ 1.4 GHz, eMMC 5.1, 256 MB DDR3, ~180 MB rootfs (Yocto kirkstone core-image-full-cmdline). Ölçümler time find / ve dd if=/dev/mmcblk0p2 of=/dev/null bs=4M ile alınmıştır.

Formatİmaj boyutuMount süresifind / süresiSekansiyel okuma
SquashFS + gzip98.4 MB0.21 s4.8 s42 MB/s
SquashFS + lz4121.7 MB0.18 s3.2 s68 MB/s
SquashFS + zstd,391.2 MB0.19 s4.1 s55 MB/s
EROFS + lz4hc,9105.3 MB0.12 s2.9 s71 MB/s
EROFS + zstd,395.8 MB0.14 s3.1 s62 MB/s
EROFS + lzma,682.1 MB0.13 s5.8 s31 MB/s
EROFS + lz4hc,9 + fragments99.7 MB0.11 s2.7 s73 MB/s

Sonuçlardan çıkan öneriler: Flash erişim hızını önceliklendiriyorsanız EROFS + LZ4HC + fragments kombinasyonu optimumdur. Depolama alanı kritikse EROFS + LZMA tercih edilebilir; ancak LZMA'nın yüksek CPU maliyeti nedeniyle uygulama başlatma süreleri uzar. Zstandard, ikisi arasında iyi bir denge noktasıdır.

Sıkıştırma profili karşılaştırma betiği:

#!/bin/sh
# compress_bench.sh — farklı profilleri karşılaştır
ROOTFS=/path/to/rootfs
for ALG in "lz4hc,9" "zstd,3" "lzma,6"; do
    OUT="rootfs_${ALG%%,*}.erofs"
    echo "=== $ALG ==="
    time mkfs.erofs -z "$ALG" --fragments "$OUT" "$ROOTFS"
    ls -lh "$OUT"
done

Flash ortama özel not: NOR flash üzerinde çalışan sistemlerde (özellikle QSPI NOR, ~50 MB/s sekansiyel okuma) LZ4HC avantajı belirginleşir çünkü sıkıştırma çözme işlemi flash okuma darboğazına kıyasla çok daha hızlıdır. NAND flash sistemlerinde ise bant genişliği daha yüksek olduğundan ZSTD daha dengeli sonuçlar verir.

06 Android Kullanımı

Android 12'den itibaren Google, system.img ve vendor.img bölümleri için EROFS'u varsayılan dosya sistemi olarak belirlemiştir. Bu bölümde Android bağlamındaki yapılandırma ve referans parametreler ele alınmaktadır.

AOSP'de EROFS imajları make_erofs aracıyla üretilir. Android Build sistemi BOARD_*_FILE_SYSTEM_TYPE değişkenleri üzerinden dosya sistemi türünü seçer:

# device/manufacturer/product/BoardConfig.mk

# System bölümü için EROFS
BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := erofs

# Vendor bölümü için EROFS
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := erofs

# Product bölümü için EROFS
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := erofs

# EROFS sıkıştırma parametreleri
INTERNAL_USERIMAGES_EROFS_COMPRESSOR := lz4hc,9
INTERNAL_USERIMAGES_EROFS_COMPRESS_HINTS := true

Android'de EROFS imajları dm-verity ile birlikte kullanılır; imaj bütünlüğü çekirdek tarafından her mount işleminde doğrulanır:

Android Verified Boot akışı:
  Bootloader (AVB doğrulama)
        |
        v
  vbmeta.img doğrula (imza)
        |
        v
  system.img hash ağacı doğrula (dm-verity)
        |
        v
  EROFS + dm-verity katmanı mount et
        |
        v
  /system salt okunur erişim
  

vendor.img yapısı OEM donanım sürücülerini barındırır; EROFS sayesinde bu bölümün mount gecikmesi azalır ve sistem açılış süresi kısalır. Google'ın iç ölçümlerine göre Pixel cihazlarında SquashFS'ten EROFS'a geçiş, soğuk açılış süresini yaklaşık 100 ms kısaltmıştır.

Android GKI çekirdeklerinde EROFS yapılandırması:

# arch/arm64/configs/gki_defconfig (Android Common Kernel)
CONFIG_EROFS_FS=y
CONFIG_EROFS_FS_ZIP=y
# LZMA Android 12+ GKI'da varsayılan olarak etkin
CONFIG_EROFS_FS_ZIP_LZMA=y

AOSP dışı gömülü Linux projelerinde Android bağlamına benzer bir dm-verity + EROFS zinciri kurulabilir. veritysetup aracı ile hash ağacı oluşturulur, U-Boot veya özel bir bootloader doğrulama yapar ve kernel dm-verity üzerinden EROFS imajını mount eder. Bu konu Secure Boot rehberinde ayrıntılı ele alınmaktadır.

07 overlayfs ile EROFS

EROFS salt okunur alt katman (lower layer) olarak mükemmel çalışır; overlayfs üst katmanı (upper layer) tmpfs veya kalıcı bir ext4 bölümü olabilir. Bu yapı OTA güncellemelerini basitleştirir ve rootfs bütünlüğünü korur.

Temel mantık: EROFS bölümü değişmez, güvenli bir taban sağlar; overlay üst katmanı çalışma zamanı değişikliklerini (log dosyaları, yapılandırma, durum bilgisi) yönetir. Cihaz fabrika ayarlarına sıfırlanmak istendiğinde üst katmanı temizlemek yeterlidir.

# Geçici overlay (tmpfs üst katmanı — yeniden başlatmada sıfırlanır)
mount -t erofs /dev/mmcblk0p2 /mnt/ro -o ro
mount -t tmpfs tmpfs /mnt/overlay
mkdir -p /mnt/overlay/upper /mnt/overlay/work
mount -t overlay overlay /newroot \
    -o lowerdir=/mnt/ro,upperdir=/mnt/overlay/upper,workdir=/mnt/overlay/work

# Kalıcı overlay (ext4 üst katmanı — yeniden başlatmada korunur)
mount -t erofs /dev/mmcblk0p2 /mnt/ro -o ro
mount -t ext4  /dev/mmcblk0p3 /mnt/rw
mkdir -p /mnt/rw/upper /mnt/rw/work
mount -t overlay overlay /newroot \
    -o lowerdir=/mnt/ro,upperdir=/mnt/rw/upper,workdir=/mnt/rw/work

Çoklu alt katman (multi-lower) düzeni: ek OTA delta katmanları ile temel EROFS imajına dokunmadan güncelleme uygulanabilir.

Çoklu alt katman overlay yapısı:

  /newroot (birleşik görünüm)
       |
  overlayfs
       |
       +-- upper:  /mnt/rw/upper   (ext4, yazılabilir)
       +-- work:   /mnt/rw/work
       +-- lower:  /mnt/delta2:/mnt/delta1:/mnt/base
                       |              |          |
                    OTA v3 farkı  OTA v2 farkı  Temel EROFS
  

systemd birimi ile overlay mount otomasyonu:

# /etc/systemd/system/overlay-rootfs.service
[Unit]
Description=EROFS + overlayfs birleşik kök hazırlama
DefaultDependencies=no
Before=local-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/setup-overlay.sh

[Install]
WantedBy=local-fs.target
#!/bin/sh
# /usr/sbin/setup-overlay.sh
set -e
mount -t erofs /dev/mmcblk0p2 /mnt/ro -o ro,noatime
mount -t ext4  /dev/mmcblk0p3 /mnt/rw -o noatime
mkdir -p /mnt/rw/upper /mnt/rw/work
mount -t overlay overlay /mnt/merged \
    -o lowerdir=/mnt/ro,upperdir=/mnt/rw/upper,workdir=/mnt/rw/work
echo "Overlay hazir."

Dikkat: overlayfs üst katmanında inode sayısı sınırlı olabilir. tmpfs kullanıldığında tmpfs -o nr_inodes=32768 ile sınır belirleyin; aksi hâlde çalışma zamanında "no space left on device" hatası alınabilir.

08 Hata Ayıklama

EROFS sorunlarını teşhis etmek için erofsfuse kullanıcı alanı aracı, fsck.erofs bütünlük denetimi, çekirdek izleme olayları ve mount parametrelerinin doğru yapılandırılması gerekir.

erofsfuse — kullanıcı alanında EROFS mount:

# erofsfuse ile imajı kullanıcı alanında aç (root yetkisi gerekmez)
erofsfuse rootfs.erofs /mnt/test

# İçeriği incele
ls /mnt/test/etc/
cat /mnt/test/etc/os-release

# Unmount
fusermount -u /mnt/test

fsck.erofs — imaj bütünlük denetimi:

# Temel bütünlük denetimi
fsck.erofs rootfs.erofs

# Ayrıntılı çıktı
fsck.erofs -v rootfs.erofs

# Tüm dosyaları çıkart ve doğrula
fsck.erofs --extract rootfs.erofs /tmp/extract_test/

Çekirdek izleme olayları:

# EROFS izleme noktalarını listele
ls /sys/kernel/debug/tracing/events/erofs/

# Tüm EROFS olaylarını etkinleştir
echo 1 > /sys/kernel/debug/tracing/events/erofs/enable
echo 1 > /sys/kernel/debug/tracing/tracing_on

# Belirli bir işlem için izle
echo 0 > /sys/kernel/debug/tracing/trace
# ... tetikleyici işlem çalıştır ...
cat /sys/kernel/debug/tracing/trace | grep erofs

Yaygın mount parametreleri ve sorun giderme:

roSalt okunur mount — EROFS için her zaman gerekli
noatimeErişim zamanı güncellemesini devre dışı bırak (salt okunurda zaten yok)
daxDoğrudan erişim (DAX) — pmem/NVMe için; sıkıştırmalı EROFS ile uyumsuz
cache_strategy=readaroundSıkıştırılmış bloklar için önbellek stratejisi; readaround varsayılan ve önerilir
# Başarısız mount sonrası çekirdek günlüğü
dmesg | grep -i erofs

# Sıkça karşılaşılan hatalar:
# "EROFS: failed to read superblock"
#   -> imaj bozuk veya yanlış blok offset kullanılmış
# "EROFS: unsupported feature"
#   -> çekirdek CONFIG_EROFS_FS_ZIP_LZMA olmadan derlendi,
#      LZMA imajı mount edilmeye çalışılıyor
# "EROFS: I/O error"
#   -> flash/eMMC okuma hatası; donanım sorununu araştır

# imaj MD5 ile bütünlük hızlı doğrulama
md5sum rootfs.erofs
# Üretilen imajın sağlama toplamını deploy öncesi kayıt altına alın

dump.erofs ile ayrıntılı inceleme: Bir sorunun hangi dosyadan kaynaklandığını belirlemek için dump.erofs --inode=YOLU komutu ilgili inode'un mantıksal küme haritasını ve fiziksel blok konumlarını gösterir. Bu çıktı, bir flash bölümündeki bozuk bloğun hangi dosyayı etkilediğini tespit etmede kullanılabilir.

# Belirli bir dosyanın inode ve küme bilgisi
dump.erofs --inode=/usr/bin/python3 rootfs.erofs

# Örnek çıktı:
# inode 1234: size=3145728, nblocks=48
# cluster[0]: type=HEAD, blkaddr=0x200, clustersize=8
# cluster[1]: type=NONHEAD, delta=1
# ...
# cluster[47]: type=HEAD, blkaddr=0x22f, clustersize=8