【问题标题】:Why would /etc/network/interfaces be empty after programmatic changes and subsequent reboot?为什么 /etc/network/interfaces 在程序更改和随后重新启动后会为空?
【发布时间】:2016-06-07 18:18:47
【问题描述】:

我在嵌入式设备上运行 node.js 服务器,它提供 Web UI 以允许用户修改网络接口设置 - 例如,从静态更改为 DHCP 或反之亦然,或设置特定的静态 IP 设置(网络掩码、网关等我什至对新配置文件的日志文件执行“cat /etc/network/interfaces”,以确认新接口文件的内容和语法有效性。到目前为止,一切都很好。

但是,如果我的设备重新启动(在重新启动之前有或没有 /etc/init.d/networking stop/start),我发现很多时候系统会出现一个空的 /etc/network /interfaces 文件,因此没有网络接口。 (幸运的是,我有一个允许 SSH 连接的 JTAG 接口,因此仍然可以连接到我的设备,但对于用户来说,他们的设备基本上是砖头。)

什么会导致操作系统清空 /etc/network/interfaces 文件?我认为这必须在系统初始化期间完成 - 但出于什么原因?

如果我使用文本编辑器手动进行相同的更改并重新启动,一切都很好 - 每次都会出现新的界面设置。

我无法解释可能导致这种行为的原因。

--

以下是我考虑过但已排除的其他因素:

  • 也许文件没有正确保存?我已经排除了这个,因为 cat 命令将表明它已成功保存。
  • 也许还有其他文件(或持久设置)需要修改,否则配置将被视为无效和空白?我已经排除了这一点,因为我的理解是接口文件是接口设置所需的唯一配置。
  • 接口文件中可能存在语法错误。我统治了 这是因为我已经将我的编程输出与有效文件进行了比较 一切看起来都很好。此外,我不认为语法错误 会导致文件空白。

编辑:我的设备基于运行 Debian Wheezy 3.14 变体的 TI Sitara uP。我运行 node.js v0.12.x 作为服务器后端。

【问题讨论】:

  • 可能文件未刷新到磁盘。 cat 可以从缓存中工作。看看sync (stackoverflow.com/questions/2384202/…) 是否有所作为。
  • @Malt,您能否将其作为答案 - 我已经使用“同步”作为服务器网络配置过程中的编程步骤运行了一些测试,并且一切似乎都在工作。我想感谢您的贡献 - 非常感谢!我敢肯定,作为答案,它对以后的其他人也很有用。
  • 我认为添加嵌入式设备的品牌和型号以及正在运行的操作系统对未来的读者很有用。其他人可能会遇到与其他各种文件相同的问题。

标签: linux network-programming debian embedded-linux


【解决方案1】:

修改后的文件可能没有刷新到磁盘并保留在缓存中。 cat 命令可能已从该缓存中读取文件。

尝试使用sync (see here) 强制刷新到底层存储。

【讨论】:

  • 正如 Malt 所怀疑的那样,node.js 的 fs.write 命令似乎从未完全提交到磁盘 - 但发出同步命令能够确保将文件保存到磁盘,所以它就在那里重启后。
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多