Uma solução apenas de shell seria:
Para shell interativo:
# unshare --mount
# mount --bind /MyDir/MySubDir/b /MyDir/a
#
não interativamente, antes de um script que não precisa saber sobre essas configurações:
# unshare --mount sh -c 'mount --bind /MyDir/MySubDir/b /MyDir/a; exec somethingelse'
A página de manual não compartilhada também avisa sobre as subárvores compartilhadas. Se você precisar desativá-los, considere adicionar, por exemplo, --make-private
para montar.
Como Hauke disse, você tem que ter certeza de não deixar o namespace apenas depois de tê-lo criado, porque ele irá desaparecer.
Se necessário, há um método para manter um namespace sem processo. Como envolve o mount, é apenas um pouco mais complicado para um namespace de montagem. Aqui está um exemplo interativo para isso:
shell1# unshare --mount
shell1# echo $$
12345
shell1#
shell2# : > /root/mntreference
shell2# mount --bind /proc/12345/ns/mnt /root/mntreference
Agora, desde que essa referência seja mantida montada, o namespace não desaparecerá, mesmo que não haja mais nenhum processo usando-a. Usar nsenter --mount=/root/mntreference
entrará, para que você possa facilmente executar scripts adicionais.
Usar o equivalente em C não deve ser um problema.