在NAND闪存上突然创建了硬链接

时间:2012-07-17 23:38:21

标签: bash embedded-linux hardlink

我很惊讶在我(作为usr1)拥有的配置文件和我在OS守护程序中创建的临时文件(每5分钟)之间突然创建的硬链接,从原始配置文件复制。

复制回原始文件后,我使用重命名(* file2,* file1);在C中杀死任何跟踪到config.txt.tmp

该目录在mnt / sram驱动器上是root用户所有,并且没有人对嵌入式计算机具有root访问权限。 存储介质是嵌入式Linux 2.6.10上的NAND闪存SRAM

ls -l显示

2 config.txt       699byte date_modify  
2 config.txt.tmp   699byte date_modify

config.txt.tmp应该被创建,从config.txt复制,发送配置参数到config.txt然后在5-7 C行内原子地删除

该目录是root用户,无法创建硬链接。

任何人都有低级别功能中“硬链接”创建的解释吗? 我可以面对竞争条件吗?或者它可能是一些内存代码存储在闪存?还是Linux中的一个错误?

我的代码运行了5年,100台机器,最近只有1台机器出现了这个问题。

1 个答案:

答案 0 :(得分:1)

通过执行

检查文件是否实际硬链接
ls -i

显示inode。

我的头顶:

    移动前
  • 文件缓冲区可能已脏了吗?
  • 如果涉及到一个分支,那么即使在分叉之前,脏缓冲区也可能正在发挥作用
  • 是闪存'覆盖'文件系统驱动程序吗?也许它已经改变并包含以前没有的优化
    思考
    • 的unionfs
    • AUFS
    • ...?

修改

  

FWIW:从你的文字中,我得到的印象是你可能正在做相反的事情:我希望你写一个.tmp副本,一旦一切都被冲洗了。 synched,'atomically'(好吧,用于文件系统支持和排序模式的交叉指针)将其重命名为位。 (我现在只是猜测,因为大部分图片实在太模糊了)

另见:Is rename() without fsync() safe?