如何解释/proc/uptime与系统文件的ctime不匹配?

如何解释/proc/uptime与系统文件的ctime不匹配?

我有一个小型网络空间(PHP + MySQL)。没什么特别的。

我可以使用 PHP 读取 /proc/uptime 并且它返回:

51967189.77 1731371689.58

因此正常运行时间为 601 天 (51967189 / 60 / 60 / 24)。

我还列出了文件夹中的文件/dev。左侧是创建时间(dmY)。

17.03.2023 .
17.03.2023 ..
17.03.2023 full
28.07.2021 log
17.03.2023 null
17.03.2023 random
17.03.2023 tty
17.03.2023 urandom
17.03.2023 zero

其他文件夹/bin /sbin /var /lib64也具有类似17.03.2023的创建时间。

因为这些文件和文件夹是在启动时创建的,所以意味着正常运行时间只有 5 天。

因此我有 601 天而不是 5 天。

它怎么会/proc/uptime与文件的创建时间不匹配呢/dev/null

答案1

请注意你的 /dev 实际上有多少个设备。

您的网站空间处于容器– 它有自己的专用 /dev(以及自己的 /bin 等),总体上是文件系统的独立视图,但仍与该系统上的所有其他 Web 空间共享实际的“操作系统”(正在运行的内核)。各种客户的容器来来去去,每个容器都会获得一个全新的 /dev,但主机操作系统仍持续运行,这就是通过 /proc 报告的正常运行时间。

(它与 Docker 或 LXC 中的“容器”类型相同。)

/dev/log 比较奇怪,因为它是一个从外部挂载的套接字(即从主机操作系统的 /dev/log),以便所有容器的日志都由同一个 syslog 守护进程收集。


此外,“ctime”不是创建时间——它是 inode改变时间,每当任何元数据发生变化时更新。实际的创建时间字段是“btime”(出生时间),这是 Linux 的一个相对较新的附加功能(PHP 的 stat() 尚不支持它)。

相关内容