首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Linux中正常关机并防止SD卡损坏

如何在Linux中正常关机并防止SD卡损坏
EN

Stack Overflow用户
提问于 2019-06-11 18:22:18
回答 1查看 362关注 0票数 0

我在嵌入式Linux系统上工作,它挂载了一张SD卡(格式为FAT32),每秒连续写入大约500KB的数据。

现在为了处理电源故障,我们设计了一个电池,它提供大约3秒的备份。

这使我们能够完成正常的关闭。

我们只有一个进程将数据写入SD卡.So,其他进程无论如何都不会访问SD卡。

在断电和关机过程中,我们使用fflush和fsync,最后对写入数据的当前文件进行fclose。

我们甚至用示波器通过探测硬件线路来验证,当我们在关机过程中调用fflush和fsync时,SD卡的数据事务变得活跃。在此期间,正在尝试将ie缓存数据写入SD卡。这让我相信fflush和fsync是正确实现的。

我唯一没有做的事情就是卸载SD卡,因为它需要更长的时间。

但在大约10次尝试后,我们仍然可以看到SDCARD根分区被损坏,文件丢失。

是正常正常关机所必需的。据我所知,mount只创建了此文件系统根目录的inode与文件系统的其余部分的链接。umount只删除链接。

在嵌入式Linux中,确保SD卡关机时保护SD卡的完美方法或步骤是什么?

下面是当前在关机过程中执行的代码。有必要打个电话吗?

代码语言:javascript
运行
复制
    if(fflush(file)<0)
        printf("Failed  fflush errno=%d",errno);
    if(fsync(fileno(file))<0)
        printf ("Failed  fsync errno=%d",errno);
    if(fclose(file)<0)
        printf("Failed  fclose errno=%d",errno);
    file=NULL;
EN

回答 1

Stack Overflow用户

发布于 2019-06-11 19:37:39

你做得几乎是对的,然而,有一个问题:你的SD设备可能需要额外的时间来刷新它自己的内部缓冲区。

所需的时间取决于精确的芯片组(当然还有品牌、型号等)。

为了正确关闭系统,您需要一个备用电池来保证您的安全:考虑到企业RAID卡上的备用电池的使用时间从2分钟到5分钟不等,并且制造商确切地知道每个硬件的详细信息。

不幸的是,在fsync()之后,你必须等待更多的时间。在类似的情况下,我们的RasperryPi设备是安全的,有一个备用电池,允许设备操作至少20秒(尽管在我们的情况下10-15是安全的),只是为了玩得轻松。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56541592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档