Ubuntu 11.10 已不再使用
/var/run
、/var/lock
和,/dev/shm
而现在分别使用 、/run
和/run/lock
。/run/shm
- 我在我的应用程序中对这些路径进行硬编码,为什么对 Oneiric 进行这种更改?
- 我该怎么做才能使我的应用程序向后和向前兼容?除了先检查是否存在
/run
,然后检查是否存在,还有其他更好的方法吗/var/run
?
答案1
目的是减少文件系统的数量。在 11.04 上,和tmpfs
处有单独的tmpfs
文件系统。如果这些目录都在一个父目录下,那么只需要一个。它还为不应在重启后保留的更多运行时状态数据提供了一个明显的位置。/var/lock
/var/run
/dev/shm
tmpfs
除非您的应用程序依赖于文件的规范路径,否则您的应用程序无需修改即可运行,因为旧位置将符号链接到新位置。AppArmor 策略就是一个依赖于真实路径名的案例,这就是为什么特别提到它的原因。
以下链接有助于解释其基本原理:
答案2
/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 发布目标
我建议在您的软件中创建一个部分,在这些部分中将这些目录设置为变量,更改您的代码以使用这些变量,然后根据它所使用的系统更改变量(但我敢打赌您已经知道这一点)。
答案3
据我所读,这是对引入 /run 的原因的最初的解释。http://lwn.net/Articles/436012/
答案4
注意:自从引入 /run 以来,小配置可能会遇到麻烦。我的 Ubuntu 服务器有 256M RAM,/run 默认设置为 49M。
启动时,它会填满文件系统,直到填满为止。
在 fstab 中进行更改不会增加 tempfs /run 大小。我在 gg 上找到的其他程序也是如此。
我找到了在启动时在 init 脚本中添加 : extends 行的解决/etc/rc.local
方案
mount -t tmpfs tmpfs /run -o remount,size=85M
。(85M 是给我自己用的。)