Linux /usr/bin 文件在重启后消失

Linux /usr/bin 文件在重启后消失

我已将可执行二进制文件移至 /usr/bin。此操作有效,让我能够按预期运行该程序。

但是,下次重启后,我发现命令没有响应,当我检查 /usr/bin 时,该文件已不复存在。有东西删除了它。

我测试了几次,也尝试了符号链接。出现了同样的效果。

我记得在 Fedora Core 5 盒子上也出现过类似的情况,当时我在其中一个路径中有一个文件,每次我用较新的版本替换它时,旧版本过一段时间就会重新出现。有些东西备份了该文件,不允许我更改它。但它允许我稍后删除它。

两个系统上的行为类似。当前计算机是运行 Linux 的 Thecus RAID 盒。

两个问题:

  1. 到底是怎么回事?

  2. 我该如何放置或替换这些文件以使它们留在我放置它们的位置?

答案1

与标准 Linux PC/服务器相比,大多数基于 Linux 的嵌入式设备使用 RAMDisk 来挂载“/”,以获得更好的性能。Linux“initrd”在启动期间挂载在 /。initrd 包含 /usr/bin、/bin、/sbin 和其他目录。因此,如果您在“/”处添加/替换任何文件,该文件将在下次启动时消失,因为它挂载在 RAM 上,而旧的 initrd 将在下次启动时挂载。

有 2 个解决方案。

(1) 检查 mount 的输出,看看是否安装了任何辅助存储。您可以将可执行文件存储在这里的公共目录中,并将其添加到 PATH 变量中。但是,您必须确保某些启动脚本(login 或 .bashrc)在每次启动时更新 PATH 变量。

(2)更新 initrd。如果你知道正在使用哪个 initrd,你可以打开(gunzip?)它,挂载它,复制可执行文件,卸载它,关闭(gzip)它,然后保存它。

编辑:您可能需要设备上的管理员权限才能替换 initrd。我更喜欢第一个解决方案,因为它易于维护并且不需要管理员权限。

答案2

您设置了这些盒子吗?尤其是对于 Thecus 盒子,系统可能会在每次启动时从 ROM 恢复操作系统特定区域,作为一种安全措施。如果是这样,您可以研究是否可以使用较新的 /user/bin 刷新 ROM。

答案3

我同意 CarlF 的诊断——系统很可能在 RAMFS 中运行,每次启动时都从 ROM 加载。要永久更改它,您需要重新刷新 ROM。

可能还有其他选择,但你必须向我们提供详细信息——你使用的是什么型号的 Thecus?

我发现了一个页面在 Thecus n4100 上运行 Debian。这表明 n4100 有一个 MiniPCI 插槽,可用于添加 CF 卡以提供一些可写存储,或备用启动分区。您的型号可能具有类似的功能。

或者,您可以安装网络共享(CIFS/SMB/NFS)并使用您的软件加载它。

相关内容