Como realmente forçar a desmontagem de um sistema de arquivos (sem investigação manual, por que ele está ocupado)

13

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 -lcertamente não é uma opção. Por exemplo, para cryptsetup remove(BTW como forçar cryptsetup remove? Atualizar :, cryptsetup luksSuspendmas você não conseguirá cryptsetup luksResumese 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 | grepe obsoletas não-trabalho "remendo badfs".

Vi.
fonte

Respostas:

3

Use a combinação de teclas Magic SysRq : Alt+ SysRq+u

Observe que você provavelmente deve fazer uma sincronização de emergência primeiro: Alt+ SysRq+s

Observe também que em alguns teclados (especialmente os mais novos), é necessário usar em PrtScvez deSysRq

sml
fonte
A tecla Shift não é necessária, apenas as teclas Alt + SysRq +. Outra coisa que vale a pena mencionar (especialmente para usuários de laptops) é que você pode pressionar Alt, pressionar e soltar o SysRq, pressionar e soltar a letra / dígito e, finalmente, soltar Alt. Mais importante ainda, isso remonta todos os sistemas de arquivos como somente leitura, portanto, é uma última coisa antes de reiniciar à força, não uma maneira geral de remontar sistemas de arquivos somente leitura.
Gilles 'SO- stop be evil'
@ Gilles: obrigado pela dica sobre a tecla Shift. Corrigi minhas instruções.
SML
1. Ele remonta apenas para somente leitura. Não é o que queria. Por exemplo, quero desmontá-lo e remontar usando o FUSE. 2. O ruim é que eu preciso "-o remontar, rw" sistema de arquivos raiz e outros depois disso para voltar ao trabalho normal.
Vi.
3

umount --forceou umount -f(equivalente)

Se isso falhar, use:

umount --lazyou umount --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.

Freedom_Ben
fonte
Claro --forceque não funciona. E --lazynão é realmente desmontável - ele não libera LVM, loopback ou coisas de configuração de criptografia.
Vi.
1
umount -f

pode ser usado para forçar uma desmontagem quando o sistema de arquivos estiver ocupado.

semelhante a limão
fonte
1
Isso nunca funcionou para mim: umount2: Device or resource busyo único sucesso parcial foi quando experimentei o patch badfs.
Vi.
Eu tinha a mesma mensagem de "erro", mas estava funcionando. O sistema de arquivos foi desmontado após o -f umount
IanH
3
Tente "preguiçoso umount", umount -l. Sempre desmonta, mas pode produzir um sistema de arquivos instável.
precisa
Acho que o comentário de Jimmy sobre essa resposta é realmente a melhor opção. É verdade que uma desmontagem "preguiçosa" pode causar instabilidade, mas supõe-se que você já esteja em um estado instável se precisar forçar a desmontagem do sistema de arquivos. Para esse fim, por que '-l' não é uma opção?
deesto
@deesto, a desmontagem preguiçosa não torna o dispositivo de bloco indesejável (volume LVM, contêiner LUKS, loopback) sem referência.
Vi.
1

Receio que não haja maneira de fazer isso em um comando. umount -frealmente 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. :)

Janne Pikkarainen
fonte
1
São casos em que não consigo desmontar nem mesmo manualmente: 1. processos ininterruptos de suspensão que não podem ser retomados (drivers com falha etc.) 2. Armazenamento com falha (que também trava cada solicitação). Eu quero que essa "desmontagem suja" lide com isso.
Vi.