Umount recursivo após montagem rbind

12

Ao entrar em um chroot, às vezes é necessário montar / sys e / dev usando -rbind ao invés de -bind para garantir que tudo esteja no lugar certo quando alguém procura.

O problema surge quando desmontar.

Um simples umount sempre falha; com as crianças sendo montadas também parece estar em uso:

$ umount /mnt/chroot/sys
umount: /mnt/chroot/sys: device is busy.
    (In some cases useful info about processes that use
     the device is found by lsof(8) or fuser(1))

Outra solução possível é listar as montagens do proc e desmontar cada uma delas assim:

$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount

No entanto, isso também falha porque as montagens recursivas não estão realmente registradas no mtab:

/mnt/chroot/sys/kernel/security is not mounted (according to mtab)

Talvez a solução seja realizar um desleixo lento, mas isso parece muito perigoso para mim.

Existe uma maneira melhor de fazer isso do que eu senti falta?

    
por natecornell 21.03.2014 / 18:43

4 respostas

9

O crédito vai para Gilles por esta resposta; Gilles observou na pergunta que o parâmetro '-n' ignora o mtab e desmonta qualquer coisa listada em / proc / mounts.

Na página de manual:

-n     Unmount without writing in /etc/mtab.

Então, para responder à minha pergunta sobre como desvendar uma montagem --rbind, este é o comando completo que funcionou para mim:

grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount -n

Merci, Gilles!

    
por 22.03.2014 / 07:25
7

Isso funcionou para mim corretamente - link :

mount --rbind /dev /mnt/test
mount --make-rslave /mnt/test
umount -R /mnt/test

Era importante ter os dois primeiros comandos como dois comandos separados: não combine --rbind e --make-rslave em uma chamada de montagem.

Sem --make-rslave , o comportamento foi indesejado (e não teve êxito):

  • umount -l afetaria os pontos de montagem antigos originais também
  • e umount -R seriam afetados pelos arquivos ocupados (abertos) sob os pontos de montagem antigos originais. (Muito inesperado ...)
por 15.06.2017 / 01:19
2

Desde util-linux v2.23 (25-Abr-2013) o comando umount suporta a opção -R, --recursive .

Aqui está o que a página man diz:

Recursively unmount each specified directory. Recursion for each directory will stop if any unmount operation in the chain fails for any reason. The relationship between mountpoints is determined by /proc/self/mountinfo entries. The filesystem must be specified by mountpoint path; a recursive unmount by device name (or UUID) is unsupported.

    
por 15.04.2016 / 13:49
0

Obrigado por isso. Eu uso isso em meus scripts para desmontar o chroot-tree inteiro: (Certifique-se de definir $ MNT em conformidade)

for dir in $(grep "$MNT" /proc/mounts | cut -f2 -d" " | sort -r)
do
    umount $dir 2> /dev/null
    (( $? )) && umount -n $dir
done
    
por 15.07.2015 / 14:45