Diretório Symlink com conteúdo

1

Portanto, eu tenho /usr as 'ro' filesystem (não posso alterar isso, regras de trabalho e segurança) e tenho outro diretório /bigdata que é 'rw' .

Estou instalando alguns serviços, mas ele precisa escrever em /usr/foo , então achei que poderia fazer um link simbólico para /bigdata . O problema é que tenho outros arquivos em /usr/foo .

Existe uma solução alternativa para isso que não inclui copiar todo o conteúdo de foo em bigdata ?

Obrigado!

    
por RbeJG 02.03.2017 / 13:51

1 resposta

1

Uma ideia seria substituir /usr/foo , mas apenas para o aplicativo mal-comportado. O aplicativo mal-comportado veria /usr/foo como um alias para /bigdata , mas todos os outros processos no sistema continuariam a ver o conteúdo real de /usr/foo , incluindo os arquivos que estão lá. Isso pressupõe que o aplicativo mal-comportado não se importa com o fato de o conteúdo normal de /usr/foo estar inacessível a ele.

sudo unshare --mount sh -c 'mount --make-rprivate / &&
    mount -n --bind /bigdata /usr/foo &&
    exec su "$SUDO_USER" -c misbehaving_application'

(testado)

Caso contrário, OverlayFS pode resolver o seu problema, como sugerido nos comentários.

Finalmente, como último recurso, algumas ginastas podem fazer o truque. A ideia seria:

  • bind mount uma cópia de /usr/foo em outro lugar

    mkdir /writable/place/foo
    mount --bind /usr/foo /writable/place/foo
    
  • Squash /usr/foo com o seu diretório de substituição

    mount --bind /bigdata /usr/foo
    
  • Vincule os arquivos existentes para que eles possam ser acessados em / usr / foo

    for x in /writable/place/foo/*; do
      ln -s "$x" /usr/foo
    done
    

(não testado)

    
por 02.03.2017 / 16:24