/var/run目录

http://blog.ddup.us/?p=110

http://blog.youkuaiyun.com/fyinsonw/article/details/4113124

首先声明这不是愚人节消息,事实上这个消息是昨天就发出来了。Fedora15中将会在根目录中引入一个新的目录/run。而且据这位来在redhat的同学称,Fedora,Debian,Suse以及Ubuntu等发行版的开发人员已经就这件事请谈妥了。Fedora和Suse已经添加这个目录了,Debian和Ubuntu也会马上跟上。而引入这个目录的目的是为了使run-time-dir管理更加标准。

/var/run是干什么用的

根据linux的文件系统分层结构标准(FHS)中的定义:

/var/run 目录中存放的是自系统启动以来描述系统信息的文件。
比较常见的用途是daemon进程将自己的pid保存到这个目录。
标准要求这个文件夹中的文件必须是在系统启动的时候清空,以便建立新的文件。

为了达到这个要求,linux中/var/run使用的是tmpfs文件系统,这是一种存储在内存中的临时文件系统,当机器关闭的时候,文件系统自然就被清空了。使用df -Th命令能看到类似的输出结果:

文件系统    类型    容量  已用  可用 已用%% 挂载点
none         tmpfs    990M  384K  989M   1% /var/run
none         tmpfs    990M     0  990M   0% /var/lock

当然/var/run除了保存进程的pid之外也有其他的作用,比如utmp文件,就是用来记录机器的启动时间以及当前登陆用户的。

为什么要使用/run代替

这是因为/var/run文件系统并不是在系统一启动就是就绪的,而在此之前已经启动的进程就先将自己的运行信息存放在/dev中,/dev同样是一种tmpfs,而且是在系统一启动就可用的。但是/dev设计的本意是为了存放设备文件的,而不是为了保存进程运行时信息的,所以为了不引起混淆,/dev中存放进程信息的文件都以”.”开始命名,也就是都是隐藏文件夹。但是即便是这样,随着文件夹的数量越来越多,/dev里面也就越来越混乱,终于有人坐不住了,所以引入了替代方案,也就是 /var/run。

使用/var/run有什么好处

主要就是解决了上边说的管理不一致,最终使各个发行版统一管理。最终将/var/run和/var/lock都归并到/run中。而且在也不用使用隐藏文件夹这种伎俩了,对管理员来说轻松了不少。同样/dev中也不会有不相关的内容了。
但是这种根目录上的改变肯定不是一下就能完成的,Fedora15中只是刚引入/run目录并将/var/run和/var/run/lock挂载到/run和/run/lock上,到F16的时候,/var/run和/var/run/lock就只是做为符号链接出现了。

参考

Introducing /run

https://www.pathname.com/fhs/2.2/fhs-5.13.html

<think>我们正在讨论OpenWrt系统中的`/var/run`目录。用户想知道在重启后这个目录是否会被重新配置。 根据OpenWrt的设计,`/var/run`是一个临时文件系统(通常为tmpfs),它在每次系统启动时都会被清空并重新创建。 因此,重启后,`/var/run`目录下的所有文件和子目录都会被清除,然后系统服务和进程在启动过程中会重新创建它们所需的运行时文件。 参考引用中虽然没有直接提到OpenWrt的`/var/run`,但我们可以根据Linux系统的一般行为和OpenWrt的特定实现来回答。 在OpenWrt中: - `/var/run`通常挂载为tmpfs(内存文件系统),这意味着它不会持久保存到存储设备上。 - 系统重启后,内存中的内容都会丢失,所以`/var/run`目录会被清空。 - 系统启动脚本(位于`/etc/init.d/`)中的服务在启动时,会在`/var/run`下创建必要的运行时文件(如PID文件、套接字文件等)。 例如,Docker的运行时文件(如`/var/run/docker.sock`)在重启后会被重新创建(前提是Docker服务被配置为开机启动)。 所以,答案是:是的,OpenWrt系统中`/var/run`目录在重启后会被重新配置(即清空并重新创建运行时文件)。 如果用户有特定的文件或目录需要在重启后保留,那么应该将它们存储在其他位置(如`/etc`或`/data`等持久存储位置)。 下面,根据用户的要求,生成相关问题。 </think> ### OpenWrt 系统中 `/var/run` 目录重启行为分析 在 OpenWrt 系统中,**`/var/run` 目录在每次系统重启后会被完全重置**,这是由系统设计机制决定的,具体原因如下: #### 1. **临时文件系统特性** - `/var/run` 本质是一个 **`tmpfs` 内存文件系统**(挂载在 RAM 中),其内容**不持久化到存储设备**。 - 重启时内存数据清空,导致该目录下所有文件丢失。 - 可通过挂载点验证: ```bash mount | grep /var/run # 输出示例:tmpfs on /var/run type tmpfs (rw,nosuid,nodev,relatime) ``` #### 2. **启动时的自动重建** - 系统重启后,OpenWrt 的初始化进程(如 `procd`)会**自动重建 `/var/run` 目录结构**。 - 关键子目录示例: - `/var/run/dnsmasq/`(DNS 服务运行时文件) - `/var/run/hostapd/`(Wi-Fi AP 控制接口)[^1] - `/var/run/nginx/`(Web 服务 PID 文件) #### 3. **服务管理机制** - 所有守护进程(如 `dockerd`、`hostapd`)在启动时**主动创建自己的运行时文件**: - PID 文件(如 `/var/run/docker.pid`[^4]) - 套接字文件(如 `/var/run/docker.sock`[^2]) - 若服务启动失败,通常是因权限或配置问题,而非目录缺失[^3]。 #### 4. **手动干预建议** - **无需手动恢复目录**:系统自动处理重建 - **权限问题处理**: ```bash # 检查套接字权限(如 Docker) ls -l /var/run/docker.sock # 确认 docker 组权限[^2] ``` - **服务启动失败排查**: ```bash # 检查服务状态 service docker status # 查看启动日志 logread | grep dockerd ``` > 📌 **关键结论**: > OpenWrt 的 `/var/run` 是**临时运行时目录**,重启后必然清空重建。持久化配置应存放于 `/etc`(如 `/etc/docker/daemon.json`),运行时文件由服务进程自动生成。 --- ### 相关问题 1. **如何让 OpenWrt 在重启后自动恢复某个服务的运行时状态?** 2. **OpenWrt 中哪些目录的内容在重启后会被保留?** 3. **当 `/var/run/docker.sock` 重启后消失,如何强制 Docker 重新生成它?** 4. **如何修改 OpenWrt 的 tmpfs 挂载参数以调整 `/var/run` 大小?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值