Eu tenho algumas unidades de samba que estão sendo acessadas por vários usuários diariamente. Eu já tenho código para reconhecer unidades compartilhadas (de uma tabela SQL) e montá-las em um diretório especial onde todos os usuários possam acessá-las.
Eu quero saber, se eu remover uma unidade da minha tabela SQL (colocando-a efetivamente offline) como ou há uma maneira de desmontar um dispositivo ocupado? Até agora, descobri que qualquer forma de umount
não funciona.
Ignorando a possibilidade de destruir dados - é possível desmontar um dispositivo que está sendo lido no momento?
cd
montou dir, então você se tornou root ou logon novamente e o outro shell está preso. Façaexit
em todas as conchas.Respostas:
SIM!! Existe uma maneira de desconectar um dispositivo ocupado imediatamente (mesmo se estiver ocupado e não puder ser desmontado com força). Você pode limpar tudo mais tarde:
NOTA:
fonte
-l
aqui está uma letra minúsculaL
(para "desmontagem lenta"). (Veja esta resposta relacionada .)-l
/--lazy
Vai abrir arquivos não corruptos, mas no Linux, parece que você não pode saber quando o dispositivo é realmente desmontado e pode ser removidoSe possível, vamos localizar / identificar o processo ocupado, encerrar o processo e desmontar o compartilhamento de samba para minimizar os danos.
lsof | grep '<mountpoint of /dev/sda1>'
(ou qualquer que seja o dispositivo montado)pkill target_process
(mata proc. ocupado por nome |kill PID
|killall target_process
)umount /dev/sda1
(ou qualquer que seja o dispositivo montado)fonte
lsof
:# opkg install lsof
Verifique se você ainda não está no dispositivo montado ao tentar desmontar.
fonte
umount
.Tente o seguinte, mas antes de executá-lo, observe que o
-k
sinalizador eliminará todos os processos em execução, mantendo o dispositivo ocupado.A
-i
bandeira fazfuser
perguntar antes de matar.fonte
lsof | grep '/dev/<my-device>
não retornou nada, mas isso funciona muito bem! Você também pode sugerirfuser -m /dev/<my-device>
caso queira descobrir o processo antes de matá-lo.Evitar
umount -l
No momento da redação deste artigo, a resposta mais votada recomenda o uso
umount -l
.umount -l
é perigoso ou, na melhor das hipóteses, inseguro . Em suma:Solução alternativa / alternativa
O comportamento útil de
umount -l
ocultar o sistema de arquivos do acesso por nomes de caminho absolutos , minimizando assim o uso adicional de pontos de referência.Esse mesmo comportamento pode ser alcançado montando um diretório vazio com permissões
000
sobre o diretório a ser desmontado.Em seguida, quaisquer novos acessos aos nomes de arquivos no ponto de montagem abaixo atingirão o diretório recém-sobreposto com zero permissões - assim, novos bloqueadores para desmontar serão impedidos.
Primeiro tente
remount,ro
A principal conquista desmontada a ser desbloqueada é a remontagem somente leitura. Quando você recebe o
remount,ro
emblema, você sabe que:mount -o remount,ro /dev/device
é garantido que falhe se houver arquivos abertos para gravação , então tente isso diretamente. Você pode estar se sentindo com sorte, punk!Se você não tiver sorte, concentre-se apenas nos processos com arquivos abertos para gravação :
Você poderá consertar o dispositivo somente leitura e garantir um estado consistente.
Se você não conseguir remontar somente leitura neste momento, investigue algumas das outras possíveis causas listadas aqui .
Realização de remontagem somente leitura desbloqueada 🔓☑
Parabéns, seus dados no ponto de montagem agora são consistentes e protegidos de futuras gravações.
Por que
fuser
é inferior alsof
Por que não usar o uso
fuser
anteriormente? Bem, você poderia ter, masfuser
opera em um diretório , não em um dispositivo ; portanto, se você deseja remover o ponto de montagem do espaço para nome do arquivo e ainda usá-fuser
lo, precisará:mount -o bind /media/hdd /mnt
para outro localAqui está como:
Você teria então:
fuser
.Isso é mais complicado [1] , mas permite que você use:
que solicitará interativamente para interromper os processos com arquivos abertos para gravação. Obviamente, você poderia fazer isso sem ocultar o ponto de montagem, mas as opções acima imitam
umount -l
, sem nenhum dos perigos.A
-w
opção se restringe aos processos de gravação e-i
é interativa; portanto, após uma remontagem somente leitura, se você estiver com pressa, poderá usar:para matar todos os processos restantes com arquivos abertos sob o ponto de montagem.
Felizmente, neste momento, você pode desmontar o dispositivo. (Você precisará executar
umount
o ponto de montagem duas vezes se tiver vinculado um000
diretório de modo na parte superior.)Ou use:
para eliminar interativamente os processos somente leitura restantes, bloqueando a desmontagem.
Droga, eu ainda entendo
target is busy
!Os arquivos abertos não são o único bloqueador de desmontagem. Veja aqui e aqui outras causas e seus remédios.
Mesmo se você tiver algum gremlin oculto que o impeça de desmontar completamente o dispositivo, você terá pelo menos seu sistema de arquivos em um estado consistente.
Você pode usar
lsof +f -- /dev/device
para listar todos os processos com arquivos abertos no dispositivo que contém o sistema de arquivos e depois matá-los.[1] É menos complicado de usar
mount --move
, mas isso requer omount --make-private /parent-mount-point
que tem implicações . Basicamente, se o ponto de montagem estiver montado no/
sistema de arquivos, você deve evitar isso.fonte
--lazy
é tão perigoso, por que não existe um aviso naumount
página de manual? Tudo o que diz é "Verifique os sistemas de arquivos NFS exportados com exportfs -v. Se encontrado, remova com o diretório exportfs -d share: /. Eles não aparecem na lista fusor / lsof e podem impedir que umount seja bem-sucedido.
fonte
Confira
umount2
:fonte
Alguém mencionou que se você estiver usando o terminal e seu diretório atual estiver dentro do caminho que deseja desmontar, você receberá o erro.
Como complementar, nesse caso, você
lsof | grep path-to-be-unmounted
deve ter uma saída abaixo:fonte
Outra alternativa quando tudo funciona é editar
/etc/fstab
, adicionarnoauto
sinalizador e reiniciar a máquina. O dispositivo não será montado e, quando terminar de fazer o que for, remova o sinalizador e reinicie novamente.fonte
Resposta de nicho:
Se você tiver um pool zfs nesse dispositivo, pelo menos quando for um pool baseado em arquivo,
lsof
não mostrará o uso. Mas você pode simplesmente correre depois desmonte.
fonte