我有一个使用 buildroot 和 initramfs 构建的嵌入式系统设置。它在紧凑型闪存设备上运行,我在其中创建了单独的 ext3 分区来安装/etc/
和/var
目录以及自定义目录来存储数据。我不完全确定这是否是一个好主意,但我需要访问系统日志输出,并且还需要能够修改文件,因为/etc
它们需要在此处配置静态 IP 地址。一旦/etc/network/interfaces
编辑了文件来设置 IP,我就不再需要手动编辑任何内容,/etc
所以我想知道当设备在现场时将此安装设置为只读是否是一个好主意,或者是否有可能我系统上的其他应用程序需要写入/etc
?中的任何文件我运行一个相当小的系统,实际上只是 dropbear 和 busybox 正在运行(以及控制设备的自定义控制器应用程序)。我浏览了各种论坛和网站,这个想法似乎并没有太大争议,但我的知识相当有限。我意识到我可以尝试将其安装为只读,但似乎事情可能会悄无声息地崩溃,所以这是一个坏主意吗?
答案1
只读/etc
在嵌入式设备上越来越常见。很少更改的文件/etc
在桌面和服务器安装中也越来越常见,类似 和 的文件位于另一个文件系统上/etc/mtab
并/etc/resolv.conf
以符号方式链接/etc
(以便/etc
在安装软件或计算机配置更改时需要修改文件,但在安装USB 驱动器或在笔记本电脑中连接到不同的网络)。
新兴的标准是安装 tmpfs 文件系统/run
和/etc
类似的符号链接
/etc/mtab -> /run/mtab
/etc/resolv.conf -> /etc/resolvconf/run/resolv.conf
现有或嵌入式系统可能将 tmpfs 安装在不同的位置,例如/dev/shm
或/lib/init/rw
或/var/run
。
设为只读的问题/etc
在于,这会锁定您将能够修改的文件集。
避免此问题的另一种方法是将根文件系统设为 initramfs。这是一个存储在内核映像旁边并由引导加载程序加载的存档。它被解压到 RAM 中并成为文件系统根中的根。如果您打算保留 initramfs,它不应该太大(因为它耗尽了宝贵的 RAM),但 BusyBox 二进制文件加上一些配置文件可能是可接受的 RAM 使用方式。
另一种方法是拥有一个只读根文件系统和一个联合安装读写文件系统。
答案2
这是特定于发行版的,但我能想到的一些事情:
/etc/mtab
、/etc/adjtime
和/etc/resolv.conf
是可能需要修改的典型文件。/etc/motd
也/etc/issue
可能是这样。cups
也会自行更新一些配置文件。有些东西可能也需要创建一个nologin
文件。/etc
在大多数情况下,您应该能够将文件替换为/var
.
答案3
只需检查是否有没有什么在那里进行了修改。最后的修改时间(如 ls(1) 所报告的)应该足够了。许多当前的 Linux 发行版应该已经(或几乎)存在了。您可以尝试将其设置为只读,并在日志中查找任何抱怨的内容。
OTOH,/etc 相当小,因此节省其 R/W 空间没有多大意义。