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/fooem outro lugarmkdir /writable/place/foo mount --bind /usr/foo /writable/place/foo -
Squash
/usr/foocom 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)