Linux文件系统修复(e2fsprogs)

xiaoxiao2021-03-01  25

Linux文件系统修复(e2fsprogs)

最近在平台开发的时候,发现我们设备在重启或者断电时候,偶尔会出现有些分区不能mount的情况,log如下: *[ 5.279611] EXT4-fs (mmcblk0p2): recovery complete [ 5.279629] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) [ 5.558100] JBD2: Invalid checksum recovering block 1 in log [ 5.645147] JBD2: recovery failed [ 5.645165] EXT4-fs (mmcblk0p4): error loading journal*

我们把一8G SD分为4个区: / # ls -l /dev/mmcblk0 brw——- 1 root root 179, 0 Jan 1 00:00 /dev/mmcblk0 brw——- 1 root root 179, 1 Jan 1 00:00 /dev/mmcblk0p1 brw——- 1 root root 179, 2 Jan 1 00:00 /dev/mmcblk0p2 brw——- 1 root root 179, 3 Jan 1 00:00 /dev/mmcblk0p3 brw——- 1 root root 179, 4 Jan 1 00:00 /dev/mmcblk0p4 / #*

这个时候会发现某个分区上的文件系统已经出现损坏,为了解决这个问题,查询了很多资料,如果需要保留之前的存储内容,不能通过重新格式化的方式去格式化这个分区,只能通过修复的方式去修复这个分区,这个方法就是通过文件系统工具e2fsprogs去实现,这是因为我们使用的BusyBox中Utilities源码发现并没有fsck相关的.c和.h,所以不能用BusyBox所带的fsck命令,必须重新编译工具e2fsprogs。

e2fsprogs介绍

e2fsprogs (也叫做e2fs programs)是一个Ext2(及Ext3/4)文件系统工具集(Ext2 Filesystems Utilities ),它包含了诸如创建、修复、配置、调试ext2文件系统等的标准工具。 e2fsprogs是开放源代码软件 ,遵从GPLv2或LGPLv2。 【来自百度百科】

e2fsprogs源码下载

网页下载地址: https://github.com/tytso/e2fsprogs git下载地址:git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git

e2fsprogs编译

export PATH=/usr/local/arm/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin:$PATH cd e2fsprogs mkdir build cd build ../configure –host=aarch64-linux-gnu cc=arm-linux-gcc –prefix=/home/git/Tools/e2fsprogs/build make make install 最后会编译出目标文件到指定的目录下,然后在build目录下会有一个sbin目录,里面就是编译出来的文件系统工具:

renanl@plt-dev:~/git/Tools/e2fsprogs/build/sbin$ ls badblocks debugfs e2freefrag e2image e2mmpstatus e4crypt filefrag fsck fsck.ext3 logsave mkfs.ext2 mkfs.ext4 resize2fs uuidd blkid dumpe2fs e2fsck e2label e2undo e4defrag findfs fsck.ext2 fsck.ext4 mke2fs mkfs.ext3 mklost+found tune2fs

copy工具

把编译出来的工具集copy到busybox系统目录sbin下即可:

使用修改命令fsck

1)脚本中需要每次都同意加参数-y fsck.ext4 -f -y /dev/mmcblk0p1

2)一般执行

/sbin # fsck.ext4 -f /dev/mmcblk0p1 e2fsck 1.44.4 (18-Aug-2018) ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file while determining whether /dev/mmcblk0p1 is mounted. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mmcblk0p1: 520/51200 files (1.2% non-contiguous), 102504/204800 blocks /sbin #

参考文档: 【1】https://blog.csdn.net/Chasing_Chasing/article/details/82215531 【2】http://blog.sina.com.cn/s/blog_406a91a00102xaq8.html

转载请注明原文地址: https://www.6miu.com/read-3135580.html

最新回复(0)