当前位置: 首页>>技术问答>>正文


为什么/var/run被迁移到/run?

,

问题描述

technical overview of Ubuntu 11.10 Oneiric

Ubuntu 11.10 has migrated away from /var/run, /var/lock and /dev/shm and now uses /run, /run/lock and /run/shm instead (respectively).

  • 我在我的应用程序中硬编码这些路径,为什么对Oneiric做出这种改变?

  • 我可以做些什么来使我的应用程序向后 – 和forward-compatible?除了先检查是否存在/run,然后再检查/var/run,还有其他更好的方法吗?

最佳解决方法

目的是减少tmpfs文件系统的数量。在11.04,在/var/lock/var/run/dev/shm有单独的tmpfs文件系统。如果这些目录全部位于单个父目录下,那么只需要一个tmpfs。它还为进一步的运行时状态数据提供了一个明显的位置,这些数据不应该在重新启动时保留。

除非您的应用程序依赖于文件的规范路径,否则您的应用程序应该无需修改即可运行,因为旧的位置将被符号链接到新的位置。 AppArmor策略是取决于真实路径名称的一种情况,这就是为什么它被特别提及。

以下链接应该有助于解释理由:

次佳解决方法

  1. /run是用于存储瞬态文件的新的cross-distribution tmpfs位置,即包含run-time信息的文件,可能需要或可能不需要在启动过程中尽早写入,并且不需要在重新启动时保留。

    使/run目录可用使我们更接近于可以正常使用系统的情况,并在read-only上安装根文件系统,而不需要任何笨重的解决方法,例如aufs/unionfs覆盖。

    /run替换文件系统层次结构标准中描述的几个现有位置:

    • /var/run/run

    • /var/lock/run/lock

    • /dev/shm/run/shm [目前只有Debian计划这样做]

    • /tmp/run/tmp [可选;目前只有Debian计划提供此功能]

    • /run还替换了一些用于临时文件的其他位置:

    • /lib/init/rw/run

    • /dev/.*/run/*

    • /dev/shm/*/run/*

    • /etc/run/*下的可写文件

    (所以你可能会期望这些移动)。

    来源:debian release goals

  2. 我会建议在软件中创建一个部分,在这些部分中设置变量中的这些目录,更改代码以使用这些变量,然后根据所使用的系统更改变量(但我敢打赌,您已经知道这一点)。

第三种解决方法

根据我所读到的,这是关于为什么/运行被引入的原始解释。 http://lwn.net/Articles/436012/

第四种方法

注意:由于/运行介绍,小配置可能会遇到麻烦。我的Ubuntu服务器是256Mo RAM,并且/run默认设置为49Mo。在启动时,它会填满文件系统直到完整。在fstab中进行更改不会影响tempfs /运行大小。我在gg上找到的其他程序也没有。我发现要在初始化脚本中添加以下解决方案:/etc/rc.local mount -t tmpfs tmpfs /run -o remount,size=85M行要在启动时扩展(85M适用于我的配置)。

第五种方法

您不应该对这些/run路径进行硬编码!

  • 使用/var/run,因为符合链接将适用于/run(如果适用)

  • /var/lock与上面相同

  • 不要硬编码/dev/shm有史以来,总是使用shm_open等(POSIX API)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1037.html,未经允许,请勿转载。