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 lugarmkdir /writable/place/foo mount --bind /usr/foo /writable/place/foo
-
Squash
/usr/foo
com o seu diretório de substituiçãomount --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)