umount一个目录后,ls查看该目录下仍有文件

问题

最近在调试一个嵌入式设备flash上的目录时,出现一个看似奇怪的现象:

执行卸载目录命令: umount test后,ls test查看该目录下仍存在文件。

重启设备,在mount前,ls查看时仍然有上述文件。

感觉很奇怪,查看了资料,原来是把该目录mount在了flash上,解决了这个问题。

详细描述

test是程序中使用的目录,程序会查询该目录下是否存在文件。

test挂载在/dev/mtd5下,test的父目录parent挂载在/dev/mtd4下。

test的目录结构为/parent/test

程序启动时,会创建这些目录并执行挂载命令:

mkdir -p parent
mkdir -p parent/test

mount /dev/mtd4 /parent
mount /dev/mtd5 /parent/test

程序中有一项业务是清除test目录,执行如下流程:

  1. 卸载test目录
  2. 分别用0和1清除分区
  3. 挂载test目录

在执行过程中,程序会读取test目录下是否存在文件,理论上从第1步开始该目录就应该是空了,但实际上卸载目录后,ls查看仍存在文件。

而在执行第3步后,ls查看时没有文件了。经过排查,发现再umount后,ls查看仍然存在文件。

分析完毕后,查找原因:

  1. test挂载在flash上,如果某次在mount到/dev/mtd5之前,有人写文件到test目录,就会写在flash上
  2. 此时,即使不mount,ls查看目录会看到已经写入的文件
  3. mount后,ls就只能查看到挂载点上的文件了,原写入文件查看不到
  4. 但,每次umount后,ls都能查看到原写入的文件

解决办法:

  1. 全面检查程序,排除在umount后,有向test写入文件的操作
  2. 把test挂载在内存而非flash上,这样每次重启时,test下均为空,某次操作失误在重启后会消除
  3. 在启动脚本中,每次创建test目录后,执行一次清空test目录的操作rm -rf test/*,确保启动后为干净状态
总结

对于这个现象,一开始还以为是清除flash操作有问题,没有把文件完全清除,思路比较狭隘。

在任何情况下,当程序出现问题时,都不应该首先怀疑通用组件出了问题,而应该检查自己程序的问题,最后的结果也表明,是自己程序的问题的概率远大于通用组件问题。

定位问题时要思路开阔,不能一开始就局限想法,列出所有的可能,再排查。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值