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".