/etc arquivos em uma partição diferente

/etc arquivos em uma partição diferente

Minha configuração exige que alguns dos meus /etcarquivos residam em uma partição separada. Para isso criei um softlink:

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

Meu problema é quando tento executar comandos usando estes arquivos:

groupadd foo
groupadd: failure while writing changes to /etc/group

stracerelatórios:

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

Alguma ideia de como posso começar groupadda trabalhar?

Responder1

Dividir arquivos /etcentre partições é uma má ideia por esse motivo.

O que está acontecendo é que o groupaddutilitário está criando um arquivo temporário e, em seguida, substituindo o arquivo real /etc/groups(ou melhor, para o qual o link simbólico aponta) pelo temporário por meio de uma renameoperação simples.
O problema é que rename()só funciona no mesmo sistema de arquivos, caso contrário, gera um erro.

Outro problema potencial que você pode encontrar aqui é que quando algo faz o rename, ele destrói o link simbólico e agora é um arquivo comum.

Outro problema potencial é que muitos arquivos /etcsão necessários para uma inicialização adequada, antes que o sistema tenha a chance de montar outros volumes. Portanto, esses arquivos estarão ausentes.

 

Resumindo, não, isso não pode ser consertado. E isso não deveria ser feito de qualquer maneira.

Responder2

/etcdeve estar no sistema de arquivos raiz. A coisa sensata a fazer é mantê-lo assim.

Se você realmente precisa split /etc, poderá obter melhores resultados com uma montagem union. Não sei se o Linux suporta montagens de união onde um dos componentes corresponde ao ponto de montagem, e seria difícil não tornar /etco sistema de arquivos raiz parte da montagem de união.

Se você quiser colocar tudo /etcem uma partição diferente, você pode fazer um mínimo /etcque contenha apenas o que é necessário ( /etc/fstab, o que o init precisa ( /etc/inittabou /etc/inite /etc/rc*ou o que quer que seu sistema init use), mínimo /etc/passwde /etc/group, etc.). No início da inicialização (muito antes /etc/rc.local!), Faça bind-mount /var/common/etcno /etc. Mas isso exigirá muito trabalho para acertar e resultará em /var/common/etcser o todo /etc, o que provavelmente não é o que você deseja. Esta configuração faz sentido principalmente para alguns sistemas embarcados que não usam nenhum dos sistemas init usuais e têm uma restrição rigorosa no tamanho do sistema de arquivos raiz.

Se você tiver um /var/commonservidor compartilhado entre muitos servidores, deverá abordar o problema de maneira diferente. Use um sistema de gerenciamento de configuração adequado para implantar arquivos compartilhados no /etc.

Um arquivo como /etc/passwde /etc/groupnão deve ser compartilhado entre máquinas. Use esses arquivos somente para usuários e grupos locais. Para entradas compartilhadas entre máquinas, use NIS ou LDAP.

informação relacionada