Одной из идей было бы переопределить /usr/foo
, но только для нарушающего правила приложения. Неправильное приложение будет видеть /usr/foo
как псевдоним для /bigdata
, но все остальные процессы в системе будут продолжать видеть реальное содержимое /usr/foo
, включая файлы, которые там находятся. Это предполагает, что нарушающее правила приложение не заботится о том, что нормальное содержимое /usr/foo
для него недоступно.
sudo unshare --mount sh -c 'mount --make-rprivate / &&
mount -n --bind /bigdata /usr/foo &&
exec su "$SUDO_USER" -c misbehaving_application'
(Проверено)
В противном случае, OverlayFS может решить вашу проблему, как было предложено в комментариях.
Наконец, в качестве последнего средства, некоторые гимнастические упражнения с симлинками могут помочь. Идея заключается в следующем:
bind смонтируйте копию /usr/foo
в другом месте
mkdir /writable/place/foo
mount --bind /usr/foo /writable/place/foo
Сквош /usr/foo
с вашей директорией замены
mount --bind /bigdata /usr/foo
Симлинк существующих файлов, чтобы к ним можно было получить доступ из /usr/foo
for x in /writable/place/foo/*; do
ln -s "$x" /usr/foo
done
(Не проверено)