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

从Ubuntu 11.10 Oneiric的技术概述 :

Ubuntu 11.10已经从/var/run/var/lock/dev/shm迁移出来,现在分别使用/run/run/lock/run/shm

  • 我在我的应用程序中对这些路径进行了硬编码,为什么要对Oneiric进行此更改?
  • 我该怎么做才能使我的应用程序向后兼容? 除了首先检查是否存在/run ,还有/var/run之外,还有更好的方法吗?

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

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

以下链接应有助于解释其基本原理:

  1. /run是一个新的交叉分发tmpfs位置,用于存储临时状态文件 – 即包含运行时信息的文件,这些信息可能需要在引导过程的早期写入,也可能不需要在重新引导时保留。

    使/run目录可用使我们更接近于可以正常使用系统并且根文件系统以只读方式挂载的程度,而不需要任何笨重的解决方法,例如aufs/unionfs覆盖。

    /run替换Filesystem Hierarchy Standard中描述的几个现有位置:

    • /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发布目标

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

从我所读到的,这是为什么/ run被引入的原始解释。 http://lwn.net/Articles/436012/

注意:从/运行介绍,小配置可能会遇到麻烦。 我的Ubuntu服务器是256Mo RAM,/ run默认设置为49Mo。
在启动时,它会填充文件系统直到完整。
在fstab中进行更改不会降低tempfs / run size的大小。 我在gg上找到的其他程序也没有。
我找到了在init脚本中添加的解决方案: /etc/rc.localmount -t tmpfs tmpfs /run -o remount,size=85M在启动时扩展。 (85M是我的conf。)

你不应该硬编码任何这些/run路径!

  • 使用/var/run ,因为符号链接将适用于/run如果适用)
  • /var/lock与上面相同
  • 不要硬编码/dev/shm ,总是使用shm_open等(posix API)