AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 537965
Accepted
Travis Griggs
Travis Griggs
Asked: 2019-08-29 14:03:32 +0800 CST2019-08-29 14:03:32 +0800 CST 2019-08-29 14:03:32 +0800 CST

在嵌入式环境中同步还是不同步?

  • 772

我有一个在一块闪存上运行 Debian 10 的单板设备。使用 UBIFS,并将其分为两个卷:一个 ro 根和一个 rw /var。我发现在电源循环/重置条件下,我可以得到 0 字节文件。我将我的“设置”保存在 /var/opt/myApp 中。将 /var 的挂载选项更改为包含sync似乎会使这些事件消失。

我知道通常的建议是异步优于同步,但通常会用“通常,但并非总是”来警告,几乎没有解释异常可能是什么。

另一种解决方案是修改我将数据写入磁盘的所有调用站点,不仅在文件关闭时刷新,而且同步(我用python做了很多)。从编码/完整性的角度来看,安装sync似乎既减少了工作量,又避免了我错过在某些地方添加同步保护,因为它是通用的。

此外,我允许设备将数据保存到 USB 拇指驱动器。我想我也应该安装这些同步,以减少在将数据写入它们后立即将它们拉出时的损失。

这是一个适当的特殊配置来证明使用的合理性sync吗?还是我应该使用替代解决方案?

linux filesystems
  • 1 1 个回答
  • 1408 Views

1 个回答

  • Voted
  1. Best Answer
    HarshaD
    2019-10-19T06:39:09+08:002019-10-19T06:39:09+08:00

    这是我的意见:抱歉提前冗长。

    当我们具体谈论时,ubifs我们应该总是sync选择/类似的选项。

    ubifs支持write-back caching

    这意味着写入文件的更改不会直接写入闪存。它们首先存储在页面缓存中,然后写入闪存。(阅读有关write buffersUBIFS 中 NAND 闪存的更多信息)

    这通过减少写入次数来提高文件系统性能。

    请注意,这是asynchronousfs 的行为。

    正如您在问题中所说,当您使用 -sync 选项安装 UBIFS 时,它会使文件系统synchronous(每次更改都写入闪存)但是以性能下降为代价。

    如果您正在使用asynchronous像 ubifs 这样的文件系统,那么确保将写入写入闪存的责任在于应用程序开发人员。这是 write(2) 的手册页所说的:

    $ man 2 write
    NOTES
       A  successful return from write() does not make any guarantee that data
       has been committed to disk.  In fact, on some buggy implementations, it
       does  not  even guarantee that space has successfully been reserved for
       the data.  The only way to be sure is to call fsync(2)  after  you  are
       done writing all your data.
    

    使用

    sync- 同步整个 fs。可能不是最优的

    fsync- 主要做这项工作

    fdatasync- 仅刷新数据更改而不刷新元数据(权限)。比可能更优化fsync(不确定)

    另请阅读有关 fsync 的 Good Read

    所以最后,你的选择:

    1. 使用“同步”挂载 - 性能受到影响
    2. 使用上述sync选项改进应用程序。
    3. 在应用程序中处理 0 字节文件
    4. 创建临时文件并稍后重命名它们

    最后一个想法,可能想切换到同步 fs 之类的jffs2(如果使用 NAND 闪存,则不是完全同步的)。我知道这不是您问题的答案,但是,写了这么多还不如写这个....

    • 1

相关问题

  • du/df 和 ls 报告不同的磁盘使用情况

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • Linux 内核开发人员如何处理数百万行代码的工作?他们是一种方法吗?[关闭]

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve