在嵌入式设备中,针对EMMC使用的文件系统,很多都使用了EXT4格式,下面介绍几个实用的功能。
首先获取EXT4的特性:
root@test:~# dumpe2fs /dev/mmcblk0p15
dumpe2fs 1.46.5 (30-Dec-2021)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 64783e92-dd8f-4eed-bd6d-58dbce16e654
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: unsigned_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 708528
Block count: 2833920
Reserved block count: 0
Free blocks: 2762800
Free inodes: 708514
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8144
Inode blocks per group: 509
Flex block group size: 16
Filesystem created: Thu Jan 1 08:00:39 1970
Last mount time: Mon Dec 8 22:16:37 2025
Last write time: Mon Dec 8 22:16:37 2025
Mount count: 2
Maximum mount count: -1
Last checked: Thu Jan 1 08:00:39 1970
Check interval: 0 (<none>)
Lifetime writes: 177 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
这是读的EXT4超级块的信息,从这里我们可以得到好多信息,挑几个说明一下:
1、Filesystem features:
文件系统支持的特性,比如has_journal large_file等
2、Errors behavior:
文件系统出错时采用的方式,有以下几个选择:
continue:忽略错误,继续运行
remount-ro:将文件系统重新挂载为只读
panic:触发内核 panic(系统崩溃)
一般推荐使用remount-ro的方式
这个特性可以通过tune2fs工具来修改,如下:
1)查看当前特性
bash
root@test:~# tune2fs -l /dev/mmcblk0p15 | grep "Errors behavior"
Errors behavior: Continue
2)修改remount-ro
bash
root@test:~# tune2fs -e remount-ro /dev/mmcblk0p15
tune2fs 1.46.5 (30-Dec-2021)
Setting error behavior to 2
root@test:~# tune2fs -l /dev/mmcblk0p15 | grep "Errors behavior"
Errors behavior: Remount read-only
重启后生效
3)手动破坏分区进行试验
bash
root@test:~# dd if=/dev/zero of=/dev/mmcblk0p15 count=3
3+0 records in
3+0 records out
1536 bytes (1.5 kB, 1.5 KiB) copied, 0.000317058 s, 4.8 MB/s
root@test:~# echo 11111 > /second/2.txt
[ 95.782427] EXT4-fs error (device mmcblk0p15): ext4_map_blocks:601: inode #2: block 9203: comm bash: lblock 0 mapped to illegal pblock 9203 (length 1)
[ 95.801136] Aborting journal on device mmcblk0p15-8.
[ 95.806432] EXT4-fs (mmcblk0p15): Remounting filesystem read-only
-bash: /data/2.txt: Structure needs cleaning
root@test:~#
可以看到分区检测到错误后,就被重新挂载为read-only了,避免进一步被破坏。
3、Lifetime writes:
记录自文件系统创建以来(对应镜像烧录以来)总写入数据量的持久化计数器(单位 KB),主要用于评估闪存设备的磨损程度。