내 설정에서는 내 파일 중 일부가 /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
내 문제는 다음 파일을 사용하여 명령을 실행하려고 할 때입니다.
groupadd foo
groupadd: failure while writing changes to /etc/group
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
어떻게 groupadd
출근할 수 있는지 아이디어가 있나요?
답변1
이러한 이유로 여러 파티션 에 파일을 분할하는 것은 /etc
좋지 않습니다.
무슨 일이 일어나고 있는지는 groupadd
유틸리티가 임시 파일을 생성한 다음 /etc/groups
간단한 작업을 통해 실제 파일(또는 오히려 심볼릭 링크가 가리키는 파일)을 임시 파일로 바꾸는 것입니다 rename
.
문제는 rename()
동일한 파일 시스템에서만 작동한다는 것입니다. 그렇지 않으면 오류가 발생합니다.
여기서 발생할 수 있는 또 다른 잠재적인 문제는 무엇인가가 를 수행할 때 rename
심볼릭 링크를 방해하고 이제는 일반 파일이 된다는 것입니다.
또 다른 잠재적인 문제는 /etc
시스템이 다른 볼륨을 마운트하기 전에 적절한 부팅을 위해 많은 파일이 필요하다는 것입니다. 따라서 해당 파일은 실제로 누락됩니다.
간단히 말해서, 아니요, 이 문제는 고칠 수 없습니다. 그리고 어쨌든 그렇게 해서는 안 됩니다.
답변2
/etc
루트 파일 시스템에 있어야 합니다. 그렇게 하는 것이 제정신입니다.
정말로 분할이 필요한 경우 /etc
통합 마운트를 사용하면 더 나은 결과를 얻을 수 있습니다. Linux가 구성 요소 중 하나가 마운트 지점과 일치하는 Union 마운트를 지원하는지 여부는 알 수 없으며 /etc
Union 마운트의 루트 파일 시스템 부분에서 실제를 만들지 않는 것이 어려울 것입니다 .
모든 것을 다른 파티션에 넣으려면 필요한 것( , init에 필요한 것( 또는 및 또는 init 시스템에서 사용하는 모든 것), 최소 및 등) 만 포함하는 /etc
최소 파티션을 만들 수 있습니다 . 부팅 초기(!보다 훨씬 이전 ) 에 바인드 마운트합니다 . 하지만 이를 제대로 하려면 많은 작업이 필요하며 결과적으로 전체가 될 것입니다 . 이는 아마도 당신이 원하는 것이 아닐 것입니다. 이 설정은 일반적인 init 시스템을 사용하지 않고 루트 파일 시스템의 크기에 엄격한 제한이 있는 일부 임베디드 시스템에 적합합니다./etc
/etc/fstab
/etc/inittab
/etc/init
/etc/rc*
/etc/passwd
/etc/group
/etc/rc.local
/var/common/etc
/etc
/var/common/etc
/etc
여러 서버 간에 공유되는 가 있는 경우 /var/common
문제에 다르게 접근해야 합니다. 적절한 구성 관리 시스템을 사용하여 공유 파일을 /etc
.
/etc/passwd
와 같은 파일은 /etc/group
컴퓨터 간에 공유되어서는 안 됩니다. 로컬 사용자 및 그룹에 대해서만 이 파일을 사용하십시오. 시스템 간에 공유되는 항목의 경우 NIS 또는 LDAP를 사용하십시오.