首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同分区上的/etc文件

不同分区上的/etc文件
EN

Unix & Linux用户
提问于 2014-05-11 09:44:04
回答 2查看 1K关注 0票数 3

我的设置要求我的一些/etc文件驻留在一个单独的分区上。为此,我创建了一个软链接:

代码语言:javascript
复制
ls -li /etc/group
956 lrwxrwxrwx 1 root root 21 May  7 15:48 /etc/group -> /var/common/etc/group

ls -li /var/common/etc/group
3145744 -rw-r--r-- 1 root root 668 May 11 11:02 /var/common/etc/group

我的问题是当我试图使用以下文件执行命令时:

代码语言:javascript
复制
groupadd foo
groupadd: failure while writing changes to /etc/group

strace报告:

代码语言:javascript
复制
rename("/etc/group+", "/var/common/etc/group") = -1 EXDEV (Invalid cross-device link)
write(2, "groupadd: failure while writing "..., 54groupadd: failure while writing changes to /etc/group
) = 54

有什么办法让groupadd工作吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2014-05-11 10:22:37

基于这个原因,在/etc中跨分区拆分文件是个坏主意。

正在发生的情况是,groupadd实用程序正在创建一个临时文件,然后通过简单的rename操作将实际的/etc/groups文件(或者更确切地说,符号链接指向的内容)替换为临时文件。

问题是rename()只在同一个文件系统上工作,否则会引发错误。

这里可能遇到的另一个潜在问题是,当执行rename时,它会破坏符号链接,而现在它是一个普通的文件。

另一个潜在的问题是,在系统有机会挂载其他卷之前,/etc中的许多文件是正确引导所必需的。因此,这些文件实际上将丢失。

总之,不,这是无法解决的。反正也不应该这么做。

票数 7
EN

Unix & Linux用户

发布于 2014-05-12 00:14:39

/etc应该位于根文件系统上。明智的做法是保持这种状态。

如果您确实需要拆分/etc,那么使用联合挂载可能会得到更好的结果。不过,我不知道Linux是否支持其中一个组件与挂载点匹配的联合挂载,而且很难不让联合挂载的根文件系统上的真正/etc不匹配。

如果您想将所有的/etc放在不同的分区上,您可以创建一个包含所需内容的最小/etc (/etc/fstab、init需要什么(/etc/inittab/etc/init/etc/rc*或您的init系统使用什么)、最小/etc/passwd/etc/group等等)。在引导的早期(比/etc/rc.local更早),将/var/common/etc绑定到/etc上。但这需要大量的工作才能完成,而且它将导致/var/common/etc成为整个/etc,这可能不是您想要的。对于一些不使用任何常规init系统并且对根文件系统的大小有严格限制的嵌入式系统来说,这种设置基本上是有意义的。

如果您有一个在多个服务器之间共享的/var/common,那么您应该以不同的方式处理这个问题。使用适当的配置管理系统将共享文件部署到/etc

/etc/passwd/etc/group这样的文件不应该在机器之间共享。仅对本地用户和组使用这些文件。对于跨计算机共享的条目,请使用NIS或LDAP。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/128896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档