Ponto de montagem compartilhado do Linux inconsistente entre os processos filho e pai

1

Deixe-me tentar explicar o contexto:

No bash principal:

Nós usamos

mount --bind /tmp/source /tmp/target
mount --make-shared /tmp/target

para criar este ponto de montagem compartilhado target

E então usamos

unshare -m /bin/bash

para iniciar uma festa infantil. Até agora tudo parece normal.

E então no bash principal, nós desmontamos o target com sucesso.

umount /tmp/target

De acordo com o documento do kernel: sharedsubtree . O filho bash também deve ver que o target já tem umount, embora o thread filho tenha sido iniciado por CLONE_NEWNS (unshare -m). Mas o problema agora é aprovado:

No bash infantil, nós cat /proc/self/mountinfo e encontrado target ainda existe!

78 48 8:3 /tmp/source /tmp/target rw,relatime shared:1 - ext4 /dev/disk/by-uuid/98708f21-a59d-4b80-a85c-27b78c22e316 rw,errors=remount-ro,data=ordered

Este é um comportamento inigualável no documento acima. No bash principal, nós cat /proc/self/mountinfo e encontrado taregt já desmontou. Agora não conseguimos rmdir target folder porque o filho bash ainda mantém este ponto de montagem compartilhado.

rm -rf /tmp/target
rm: cannot remove ‘/tmp/target’: Device or resource busy

Testamos isso no Ubuntu 14.04 e no CentOS 6.6. Isso é um bug do kernel? Ou eu entendi mal a montagem compartilhada do Linux.

    
por haosdent 11.09.2015 / 16:50

0 respostas