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


66

Ubuntu 11.10 Oneiric技术概述中

Ubuntu的11.10已迁移远离/var/run/var/lock/dev/shm与现在使用/run/run/lock/run/shm不是(分别)。

  • 我在应用程序中对这些路径进行了硬编码,为什么对Oneiric进行了此更改?
  • 如何使我的应用程序向后兼容和向前兼容?除了先检查/run,然后再检查是否有更好的方法/var/run

Answers:


58

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

除非您的应用程序依赖于文件的规范路径,否则您的应用程序应在运行时不做任何修改,因为旧位置将被符号链接到新位置。AppArmor策略是一种情况,它确实取决于真实的路径名,这就是为什么专门提到它的原因。

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


36
  1. /run 是用于存储暂态文件的新的跨分布tmpfs位置,瞬态文件是指包含运行时信息的文件,这些信息在引导过程的早期可能需要写入,也可能不需要,并且不需要在重新引导期间保留。

    使/run目录可用使我们更进一步,可以正常使用以只读方式安装了根文件系统的系统,而不需要任何笨拙的解决方法(例如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发行目标

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


1
您是什么意思/etc。这些都必须在重新启动后继续存在,对吗?那只是通用的conf文件。
埃文·卡罗尔

6
哦,我明白了。下了三个文件/etc/etc/lvm/cache/ /etc/mtab /etc/network/run/ifstate很快/etc/adjtime。我想对他们来说很糟糕/etc
埃文·卡罗尔


3

注意:自/ run简介以来,小的配置可能会遇到麻烦。我的Ubuntu服务器是256Mo RAM,默认情况下/ run设置为49Mo。
在启动时,它将填充文件系统,直到充满为止。
在fstab中进行更改不会增加tempfs / run大小。我在gg上找到的其他程序也没有。
我找到了要在init脚本中添加的解决方案: 在启动时要扩展/etc/rc.local的行 mount -t tmpfs tmpfs /run -o remount,size=85M(85M用于我的会议。)


2

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

  • 使用/var/run,因为/run如果适用,将建立符号链接
  • /var/lock 和上面一样
  • /dev/shm永远不要硬编码,请始终使用shm_openetc(posix API)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.