Cha*_*Kut 3 partition symlink group
我的设置要求我的一些/etc文件驻留在单独的分区上。为此,我创建了一个软链接:
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
Run Code Online (Sandbox Code Playgroud)
我的问题是当我尝试使用这些文件执行命令时:
groupadd foo
groupadd: failure while writing changes to /etc/group
Run Code Online (Sandbox Code Playgroud)
strace 报告:
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
Run Code Online (Sandbox Code Playgroud)
有什么想法可以让我groupadd上班吗?
/etc由于这个原因,跨分区拆分文件是一个坏主意。
发生的事情是该groupadd实用程序正在创建一个临时文件,然后/etc/groups通过一个简单的rename操作将实际文件(或者更确切地说,符号链接指向的文件)替换为临时文件。
问题是rename()它只适用于同一个文件系统,否则会引发错误。
您在此处可能遇到的另一个潜在问题是,当执行某些操作时rename,它会破坏符号链接,现在它是一个普通文件。
另一个潜在问题是/etc,在系统有机会装入其他卷之前,正确引导需要许多文件。因此,这些文件实际上将丢失。
简而言之,不,这无法修复。而且无论如何都不应该这样做。