背景

路由器在使用过程中,偶像启动挂载文件系统异常,查看打印后发现挂载overlay异常,打印错误代码-39,跟踪代码发现由于work目录非空导致清除失败,接下来分析原因。

overlay原理

通过overlay挂载,可保护lower分区使其只读,对lower分区需改文件放在upper目录,workdir目录用于文件的原子性保证。

错误打印overlayfs: cleanup of 'work/work' failed (-39)

Unable to handle kernel NULL pointer dereference at virtual address 00000030

pgd = ffffffc034282000

[00000030] *pgd=00000000343ca003, *pud=00000000343ca003, *pmd=000000003e1c6003, *pte=0000000000000000

Internal error: Oops: 96000007 [#1] PREEMPT SMP

Modules linked in:

CPU: 1 PID: 910 Comm: rm Not tainted 4.1.27 #1

Hardware name: Broadcom-v8A (DT)

task: ffffffc03e103100 ti: ffffffc033c7c000 task.ti: ffffffc033c7c000

PC is at ovl_do_remove+0x158/0x394

LR is at ovl_do_remove+0x150/0x394

pc : [] lr : [] pstate: 20000145

sp : ffffffc033c7fcd0

x29: ffffffc033c7fcd0 x28: ffffffc033c7c000

x27: 0000000000000000 x26: 00000000ffffffec

x25: 00000000ffffffeb x24: 0000000000000000

x23: ffffffc03e5817d0 x22: ffffffc03423a7c0

x21: ffffffc03e581728 x20: 00000000fffffff4

x19: ffffffc03e57f0d8 x18: 0000000000000000

x17: 0000000000000000 x16: ffffffc00014541c

x15: 0000000000000000 x14: 0000003fffffffff

x13: 0000003fffffffff x12: 0000000000000000

x11: 0000000000000000 x10: 0000000000000000

x9 : 0000000000000000 x8 : 0000000000000000

x7 : ffffffc0007f7678 x6 : ffffffc03423a838

x5 : 0000000000000000 x4 : 0000000000000000

x3 : 0000000000000000 x2 : ffffffc03e1035c8

x1 : ffffffc03ea9f9c0 x0 : ffffffc03e55cd98

解决思路

1、最简单的方式在启动脚本种检查work非空就删除文件并重启进行恢复,方法简单但是有副作用导致二次重启;dir="/xxx/work/work"

is_empty_dir(){

return `/bin/ls -A $1|wc -w`

}

if [ -d $dir ]; then

/bin/echo "$dir is dir"

if is_empty_dir $dir

then

/bin/echo "$dir is empty"

else

/bin/echo "$dir is not empty, cleanup!"

/bin/rm -rf $dir/*

reboot

fi

else

echo "$dir is NULL!"

fi

2、在启动挂载overlay时,发现work目录非空也强制进行删除,work目录下存放的时中间文件,可以直接删除的;

解决

网上搜索发现有网友遇到此问题,并通过内核补丁解决此问题,这个问题应该算是overlay的bug,在后面高版本的内核已经解决了此问题,所以问题很简单了,找到补丁或者对比高版本内核,合入清除work代码;

总结

需要对overlay文件系统工作方式熟悉,并跟踪代码发现问题和解决问题。

linux内核开启overlay,Linux-overlay启动挂载为只读或写文件异常相关推荐

  1. linux内核开启ssh,linux开启ssh服务

    本文概略:1)ubuntu发行版开启ssh.2)centos发行版开启ssh 1.ubuntu发行版安装/开启ssh服务 1.1 安装ssh服务端 sudo apt-get install opens ...

  2. Linux内核开启DebugFS以及查看debug信息(/sys/kernel/debug及debugfs)

    一.Linux内核开启DebugFS 进入内核配置界面,查找DebugFS: 开启配置: 二.Linux内核挂载DebugFS mount -t debugfs none /sys/kernel/de ...

  3. 编译Linux内核没有zImage,Linux 编译系统的简单介绍与内核编译安装

    这里不只是讲怎样编译.安装Linux内核的,更主要的是介绍内核的编译系统和各个重要的文件.最后还利用学到的编译.安装Linux内核去修改Linux的01调度变成随机调度.如果你只是需要编译.安装内核的 ...

  4. 武汉linux内核好找吗,Linux内核入门

    Linux内核入门 收藏 如何获取Linux内核源代码 下载Linux内核当然要去http://www.kernel.org/了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补 ...

  5. linux 内核优化实战,Linux编译优化必须掌握的几个姿势总结

    01.编译选项和内核编译 Linux内核(英语:linux kernel),是一种计算机操作系统内核,已C语言和汇编语言写成,匹配POSIX标准,以GNU通用公共许可证发布.从技术上说Linux只是一 ...

  6. linux 内核 课程,Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频教 ......

    课程名称 Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频 课程目录 (1)\1, 计算机是如何工作的?:目录中文件数:0个 (2)\2, 操作系统 ...

  7. 编译3.0的linux内核,1-3-编译Linux内核

    1-3-编译Linux内核 1.将Linux源码包拷贝到共享文件夹. 2.进入共享文件夹. 3.解压,命令#tar xvfj Kernel_3.0.8_TQ210_for_Linux_v2.2.tar ...

  8. linux内核精髓:精通linux内核必会的75个绝技,Linux内核精髓精通Linux内核必会的75个绝技 PDF 高清扫描版...

    经过近20年的发展,Linux操作系统已经成为当今最成功的开源软件之一,使用广泛,影响深远.随着Linux操作系统功能的不断丰富和完善,Linux内核的源代码也从最初的几万行增加到如今的数百万行,庞大 ...

  9. 2021-10-16python笔记(Linux内核简介与Linux基础命令)

    前面的博文已经教会了大家如何下载和安装Linux操作系统,并且使用Xshell软件远程连接Linux服务器,这节课我们要进入真正的Linux基础学习中. 知识点概括: 1.Linux的心脏-Linux ...

最新文章

  1. requests模拟登陆 验证码
  2. 如何查找cvpr类的论文_如何查找期刊论文?(3个实用的方法)
  3. unity3d为对象添加脚本的两种方法
  4. 10个有趣的Python教程,附视频讲解+练手项目。
  5. 计算机网络 --- 数据链路层CSMA/CA协议
  6. samba在企业网应用
  7. 11.python之线程,协程,进程,
  8. 具体数学-第7课(取整基础)
  9. mysql存储过程的学习(mysql提高执行效率之进阶过程)
  10. 5个Web前端开发软件,零基础入门完全够用了!
  11. 如何实现电脑端和手机端数据传输与共享
  12. 计算机服务添加打印机服务,windows7系统添加打印机Print Spooler服务教程
  13. 通信原理学习笔记6-1:数字解调——基础解调链路、匹配滤波器和AWGN信道最佳接收机
  14. 房地产企业项目管理的特点与目标
  15. WPS office 2019中如何改变Word公式编辑器中公式的颜色???
  16. vant swipe 三图一屏
  17. 下属被阿里挖角的那个早晨,我开始想念周鸿祎!
  18. 2019-2-27-VisualStudio-插件-翻译注释
  19. ROS基础(13)——机器人建模之运动仿真
  20. Ubuntu安装luminati

热门文章

  1. 安卓手机上用termux编译TeX文档并生成PDF
  2. opencv训练样本分类器
  3. 计算最短路径的A* 算法简介
  4. 9_less中的层级结构
  5. ES6_字符串模板以及其使用
  6. .net oracle 连接超时_ADO.NET (一) 前言
  7. HTML基础知识点(2)——常用标签
  8. hdfs 数据迁移_基于 JindoFS+OSS 构建高效数据湖
  9. mysql可扩展数据库_五大技巧提高MySQL可扩展性
  10. python中if控制语句_了解Python控制流语句——if语句