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:
- Na verdade, ele não desmonta o dispositivo, apenas remove o sistema de arquivos do espaço para nome. Gravações para abrir arquivos podem continuar.
- Pode causar corrupção no sistema de arquivos btrfs
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:
- Todos os dados pendentes foram gravados no disco
- Todas as futuras tentativas de gravação falharão
- Os dados estão em um estado consistente, se você precisar desconectar fisicamente o dispositivo.
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 :
lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'
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, mas fuser
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á:
- Duplicar temporariamente o ponto de montagem com
mount -o bind /media/hdd /mnt
para outro local
- Oculte o ponto de montagem original e bloqueie o espaço para nome:
Aqui está como:
null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"
# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked. https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"
# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"
# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"
Você teria então:
- O espaço para nome original oculto (não foi possível abrir mais arquivos, o problema não pode piorar)
- Um diretório montado de ligação duplicado (em oposição a um dispositivo) no qual executar
fuser
.
Isso é mais complicado [1] , mas permite que você use:
fuser -vmMkiw <mountpoint>
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:
fuser -vmMk <mountpoint>
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 um 000
diretório de modo na parte superior.)
Ou use:
fuser -vmMki <mountpoint>
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 o mount --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.