/etc 파일을 다른 파티션에 저장

/etc 파일을 다른 파티션에 저장

내 설정에서는 내 파일 중 일부가 /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 마운트를 지원하는지 여부는 알 수 없으며 /etcUnion 마운트의 루트 파일 시스템 부분에서 실제를 만들지 않는 것이 어려울 것입니다 .

모든 것을 다른 파티션에 넣으려면 필요한 것( , 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를 사용하십시오.

관련 정보