Cenário
- um compartilhamento NFS é montado em
/mnt/temp/dir (e outros compartilhamentos são montados em subdiretórios),
- Eu
umount de tudo, mas supostamente, ele não funciona bem (talvez eu comece com umount /mnt/temp/dir em vez de umbrar compartilhamentos "aninhados" como /mnt/temp/dir/subdir* primeiro),
- eu faço
mount -o bind /data/temp /mnt/temp ,
- eu faço
mount /mnt/temp/dir ,
- eu faço
mount /mnt/temp/dir/subdir1 ... e funciona bem.
Nota: /mnt/temp é inicialmente hospedado na raiz ( / ) do sistema de arquivos /dev/sda6 , e /data é outro sistema de arquivos de /dev/sda8 .
Problema
Não consigo excluir o diretório /mnt/temp/dir no sistema de arquivos raiz:
# mount -o bind / /test/root
# rmdir /test/root/mnt/temp/dir
rmdir: failed to remove 'dir': Device or resource busy
Alguma explicação
/mnt/temp/dir é montado duas vezes , provavelmente uma vez na raiz fs e uma vez na /data fs.
Aqui está o cat /proc/mounts :
nfsserver:/some/share/ /mnt/temp/dir nfs rw,relatime(...) 0 0
nfsserver:/some/share/ /mnt/temp/dir nfs rw,relatime,(...) 0 0
Mais interessante, aqui está o cat /proc/1/mountinfo :
29 20 0:18 / /mnt/temp/dir rw,relatime - nfs nfsserver:/some/share/ rw,(...)
33 31 0:18 / /mnt/temp/dir rw,relatime - nfs nfsserver:/some/share/ rw,(...)
Veja, os dois números no começo são diferentes .
O Kernel doc diz para esses dois campos:
(1) mount ID: unique identifier of the mount (may be reused after umount)
(2) parent ID: ID of parent (or of self for the top of the mount tree)
Eles também têm pais diferentes 20 e 31 (root fs e /data fs), veja:
20 1 8:6 / / rw,relatime - ext4 /dev/sda6 rw,(...)
31 20 8:8 /temp /mnt/temp rw,relatime - ext4 /dev/sda8 rw,(...)
Se eu tentar umount /mnt/temp/dir , recebo duas mensagens de erro:
umount.nfs: /mnt/temp/dir: device is busy
umount.nfs: /mnt/temp/dir: device is busy
Pergunta
Como posso umount o "mau" (ID de montagem 29)?
Até mesmo a chamada de sistema umount(2) usa um caminho para o argumento e não um "ID de montagem".