/ arquivos do etc em uma partição diferente

3

Minha configuração requer que alguns dos meus arquivos /etc residam em uma partição separada. Para este propósito eu criei um link:

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 esses arquivos:

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

strace relató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 fazer com que groupadd funcione?

    
por ChaimKut 11.05.2014 / 11:44

2 respostas

7

A divisão de arquivos em /etc nas partições é uma má ideia por esse motivo.

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

Outro problema em potencial que você pode encontrar aqui é que quando algo vai fazer o rename , ele acusa o link simbólico, e agora é um arquivo comum.

Outro problema potencial é que muitos arquivos em /etc são necessários para a inicialização adequada, antes que o sistema tenha a chance de montar outros volumes. Assim, esses arquivos estarão em falta.

Em suma, não, isso não pode ser corrigido. E isso não deve ser feito de qualquer maneira.

    
por 11.05.2014 / 12:22
1

/etc foi criado no sistema de arquivos raiz. A coisa sensata a fazer é manter assim.

Se você realmente precisar dividir /etc , poderá obter melhores resultados com uma montagem de união. Não sei se o Linux suporta montagens de união em que um dos componentes corresponde ao ponto de montagem, e seria difícil não fazer com que a% real/etc na parte do sistema de arquivos raiz da união seja montada.

Se você quiser colocar todos os /etc em uma partição diferente, poderá criar um /etc mínimo que contenha exatamente o que é necessário ( /etc/fstab , o que o init precisa ( /etc/inittab ou /etc/init e /etc/rc* ou qualquer que seja o seu sistema init usa),% /etc/passwd e /etc/group , etc.). No início durante a inicialização (muito antes de /etc/rc.local !), Ligue a montagem /var/common/etc em /etc . Mas isso exigirá muito trabalho para acertar, e isso resultará em /var/common/etc sendo todo o /etc , que provavelmente não é o que você deseja. Essa configuração geralmente faz sentido para alguns sistemas embarcados que não usam nenhum dos sistemas init usuais e possuem uma restrição rigorosa sobre o tamanho do sistema de arquivos raiz.

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

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

    
por 12.05.2014 / 02:14