ext4文件系统启动自检的必要性
最近我们发现多个用户设备掉电后重启,系统不工作。
研究这些返修设备,发现这些设备的表象是网络连接失败,DNS resolve不了。进一步发现/etc/resolv.conf为空,所以应用程序没法进行DNS resolve。但是在同一个路由器下面,其他设备是可以正常获取DNS 服务器信息的,后来检查dhcpc的log,发现他获取了DNS信息,但是写/etc/resolv.conf失败,这样应用程序读取dns server时就会失败。
为啥写文件失败呢?后来我们用df检查根文件系统,发现文件系统已经被占满了。下面显示整个16M的根目录空间都被占了
/ # df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 0 100% /
none % /dev
run % /run
shm % /dev/shm
ubi2:exa_data_ % /config
ubi2:exa_data_ % /log
ubi2:exa_data_ % /tokens
tmpfs % /dev/snd
tmpfs % /dev/input/event0
tmpfs % /dev/hbi
tmpfs % /tmp/ubus.sock
tmpfs % /run/dbus/system_bus_socket
cgroup_root % /sys/fs/cgroup
/ # lsof |grep deleted
/sbin/rc /run/openrc/exclusive/bootmisc (deleted)
/sbin/rc /run/openrc/exclusive/networking (deleted)
/sbin/rc /run/openrc/exclusive/syslog (deleted)
/sbin/rc /run/openrc/exclusive/avs-server (deleted)
/ # exit
但是我们到文件系统mount到的目录用du查看时,却发现实际的文件并没有占那么多。下面显示upperdir只占用了7M
[router] /overlay # du -d 1
2 ./workdir
7043 ./upperdir
12 ./lost+found
7058 .
那么多余的空间都跑哪去了呢?接着我们来检查一下文件系统对应的img。发现这个img居然被破坏了,这样就导致我们用df看到的信息不正确。
~$ fsck.ext4 rootfs_overlay.img
e2fsck 1.44.1 (24-Mar-2018)
rootfs_overlay.img contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 2378, i_blocks is 2, should be 0. Fix<y>? no
Deleted inode 2381 has zero dtime. Fix<y>? no
Deleted inode 2386 has zero dtime. Fix<y>? no
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +2612 -(8525--8526) -(8708--8720) -8725 -8731 -(8769--8772) -9235 -(9239--9248) -10319 -(10380--10396) -(10781--10785) -10923 -(12353--12356) -(12649--12656) -(13513--13764)
Fix<y>? no
Free blocks count wrong for group #1 (7063, counted=7062).
Fix<y>? no
Free blocks count wrong (8361, counted=8356).
Fix<y>? no
Inode bitmap differences: -2381 -2386
Fix<y>? no rootfs_overlay.img: ********** WARNING: Filesystem still has errors **********
rootfs_overlay.img: 351/4096 files (2.3% non-contiguous), 8023/16384 blocks
之后我们用fsck将这个image修复。然后重新mount文件系统,系统这时就工作正常了。
~$ fsck.ext4 rootfs_overlay.img
e2fsck 1.44.1 (24-Mar-2018)
rootfs_overlay.img contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 2378, i_blocks is 2, should be 0. Fix<y>? yes
Deleted inode 2381 has zero dtime. Fix<y>? yes
Deleted inode 2386 has zero dtime. Fix<y>? yes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +2612 -(8525--8526) -(8708--8720) -8725 -8731 -(8769--8772) -9235 -(9239--9248) -10319 -(10380--10396) -(10781--10785) -10923 -(12353--12356) -(12649--12656) -(13513--13764)
Fix<y>? yes
Free blocks count wrong for group #0 (1294, counted=1293).
Fix<y>? yes
Free blocks count wrong for group #1 (7063, counted=7382).
Fix<y>? yes
Free blocks count wrong (8361, counted=8675).
Fix<y>? yes
Inode bitmap differences: -2381 -2386
Fix<y>? yes
Free inodes count wrong for group #1 (1711, counted=1713).
Fix<y>? yes
Free inodes count wrong (3745, counted=3747).
Fix ('a' enables 'yes' to all) <y>? yes to all rootfs_overlay.img: ***** FILE SYSTEM WAS MODIFIED *****
rootfs_overlay.img: 349/4096 files (2.3% non-contiguous), 7709/16384 blocks
~$ fsck.ext4 rootfs_overlay.img
e2fsck 1.44.1 (24-Mar-2018)
rootfs_overlay.img: clean, 349/4096 files, 7709/16384 blocks
~$
文件系统被破坏,这个对于嵌入式系统来说,是一个很大的风险,设备极有可能变砖,导致返修。好在ext4是一个日志类型的文件系统,我们可以根据日志对文件系统进行恢复。所以设备启动,mount文件系统之前,一定要用fsck进行检查,一旦发现错误,必须立刻修复。
ext4文件系统启动自检的必要性的更多相关文章
- linux文件系统启动流程、启动脚本
linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...
- 从ramdisk根文件系统启动Linux成功,及使用initramfs启动linux
下面两篇文章是ARM9论坛上的讲解ramdisk文件系统的很不错的文章 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下. 其中涉及的内容较多,很多东西不再详述 ...
- 从ramdisk根文件系统启动Linux 二
今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下.其中涉及的内容较多,很多东西不再详述,如需深入研究请查阅相关资料(百度或谷歌一下一大堆). 开发环境:Fedo ...
- 使用nfs作为根文件系统启动,(3)
通过设置u-boot的bootargs来更改开机自动进入nfs远端服务器,不需要mount指令,实现虚拟机编译程序后直接通过u-boot烧写程序 1 使用nfs作为根文件系统启动 1.1 pr ...
- Linux文件系统启动过程及login的实现
1. busybox简介 busybox是一个集成了一百多个最常用linux命令和工具的软件,它将许多常用的LINUX命令和工具结合到了一个单独的可执行程序中.虽然与相应的GNU工具比较起来,busy ...
- Linux内核3.0移植并基于Initramfs根文件系统启动
Linux内核移植与启动 Target borad:FL2440 Bootloader:U-boot-2010.09 交叉编译器:buildroot-2012.08 1.linux内核基础知识 首先, ...
- [svc]为何linux ext4文件系统目录默认大小是4k?
linux ext4普通盘为什么目录大小是4k? Why does every directory have a size 4096 bytes (4 K)? To understand this, ...
- 【转】嵌入式Linux文件系统启动脚本及分析
原文网址:http://www.linuxidc.com/Linux/2011-03/33728.htm 在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含以下几个步骤: 1. 执行/s ...
- 轻松六步教会你如何修改system.img.ext4文件
http://bbs.xiaomi.cn/thread-2943923-1-1.html 希望更多的ROM作者,看了此教程后,学会ROM制作,给大家带来更多更好的ROM 首先下载如下包 Linux U ...
随机推荐
- Perl Tk在IC设计中的应用、Windows、Linux平台下的安装-各种错误的摸索解决
本文转自:自己的微信公众号<集成电路设计及EDA教程> <Perl Tk在IC设计中的应用.Windows.Linux平台下的安装-各种错误的摸索解决> Perl在IC设计中有 ...
- MySQL初次安装配置及修改密码
安装前的准备工作: 下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\mysql-8.0.11 下. 接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 ...
- POJ_1185_状态压缩dp
http://poj.org/problem?id=1185 一次考虑两行,比一行略为复杂.sta保存每种状态炮兵位置,sum保存每种状态当行炮兵总数,a保存地形,dp[i][j][k]表示到第i行当 ...
- 我的一个配置redux(实现一次存储与调用方法)之旅
前言 : 今天呢,就配置一下redux,redux的重要性呢,就叭叭叭一大堆,什么也没有带着配置一次来的重要,因为许多涉及到的属性和方法,用法是活的,但格式是需要记忆的. 过程中不要嫌我唠叨,有的地方 ...
- 第3章 JDK并发包(一)
3.1 多线程的团队协作:同步控制 3.1.1 synchronized的功能扩展:重入锁 重入锁可以完全替代synchronized关键字. 重入锁使用java.util.concurrent.lo ...
- Python原来这么好学-1.2节: 在Linux中安装python
这是一本教同学们彻底学通Python的高质量学习教程,认真地学习每一章节的内容,每天只需学好一节,帮助你成为一名卓越的Python程序员: 本教程面向的是零编程基础的同学,非科班人士,以及有一定编程水 ...
- 搭建 Kubernetes 集群
1.节点规划 master节点:192.168.188.135 node 节点:(node1)192.168.188.136,(node2)192.168.188.137 2.禁用SELinux ...
- centos7 安装 iRedmail 后 给nginx添加虚拟主机
iRedmail安装参考官方文档和 https://ywnz.com/linuxyffq/4563.html 准备工作 更新操作系统 yum update -y 安装必要组件 yum install ...
- MySQL优化---主从复制
主机所有写的数据都会生成二进制SQL日志执行文件,从机只需要将SQL日志执行文件获取到,然后进行数据同步即可 一.MySQL环境搭建(一主一从相同操作) MySQL-master:192.168.33 ...
- 面向对象之包装类与Object类
一.包装类(Wrapper) 1.包装类出现原因 为了使8种基本数据类型的变量具有类的特征,引入包装类 2.类型间转化 ① 基本数据类型---->对应的包装类:自动装箱 包装类---->对 ...