Linux文件系统修复(e2fsprogs)

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值