Como desmontar um sistema de arquivos no Linux sem investigar por que ele está ocupado?
Eu quero fazer isso em um comando. Ele deve lidar com aplicativos usando esse sistema de arquivos, submounts, containers ( lxc-execute -n qqq <command>
) e todas as outras coisas.
Apenas "desmonte. Sem objeções!". Patches ou configurações especiais do kernel são permitidos.
O sistema de arquivos deve ser realmente desmontado, por isso umount -l
certamente não é uma opção. Por exemplo, para cryptsetup remove
(BTW como forçar cryptsetup remove
? Atualizar :, cryptsetup luksSuspend
mas você não conseguirá cryptsetup luksResume
se não for LUKS).
Como invalidar todos os manipuladores de arquivos desse sistema de arquivos?
A única maneira confiável que eu conheço é montar o sistema de arquivos através do FUSE (geralmente não há problema em desmontar o FUSE, porque eu posso simplesmente matar o processo).
PS já sabe montar fuser
, lsof | grep
, cat /proc/*/mounts | grep
e obsoletas não-trabalho "remendo badfs".
umount --force
ouumount -f
(equivalente)Se isso falhar, use:
umount --lazy
ouumount --l
(equivalente)A opção " preguiçoso " irá "desanexar o sistema de arquivos da hierarquia do sistema de arquivos agora e limpar todas as referências ao sistema de arquivos assim que ele não estiver mais ocupado. (Requer o kernel 2.4.11 ou posterior.)" Isso pode causar instabilidade, mas desmontará a coisa. Qualquer programa que use a unidade pode falhar.
fonte
--force
que não funciona. E--lazy
não é realmente desmontável - ele não libera LVM, loopback ou coisas de configuração de criptografia.pode ser usado para forçar uma desmontagem quando o sistema de arquivos estiver ocupado.
fonte
umount2: Device or resource busy
o único sucesso parcial foi quando experimentei o patch badfs.Receio que não haja maneira de fazer isso em um comando.
umount -f
realmente não funciona tão bem quanto se poderia esperar. Se houver submounts sob alguma outra montagem, você não pode simplesmente desmontar essas montagens em alguma ordem aleatória e esperar que elas desçam.Mas não se preocupe, existe uma maneira de fazer de tudo isso um comando: criar um script shell / Perl que mate os processos desejados, desmonte contêineres, submeta e finalmente desmonte outra montagem. Então você pode simplesmente chamar seu script sob demanda. Inicialmente, isso é mais trabalho para você, mas depois que o script funciona, tudo é brincadeira de criança. :)
fonte