Dois * diferentes * pontos de montagem com o mesmo caminho absoluto (problema de montagem de ligação)

5

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

    
por Totor 27.02.2015 / 19:24

1 resposta

1

Isso não foi testado, mas pelo menos ignorará o problema de "o dispositivo está ocupado".

Mova o ponto de montagem para um local diferente. Dessa forma, não haverá mais confusão entre os dois pontos de montagem.

mkdir /foo
mount --move /mnt/temp/dir /foo
    
por 25.04.2015 / 19:27