Uma montagem em um diretório não vazio oculta os arquivos contidos nela, o que geralmente é chamado de sombreamento . Isso não faz com que os arquivos estejam em risco. Há várias etapas fáceis para solucionar problemas, consertar ou (quando necessário) solucionar esse problema.
Certifique-se de que seu próprio shell não é o que impede que o sistema de arquivos seja desmontado.
Para um sistema de arquivos montado em sudo fuser -km /home/my_name
, executar sudo fuser -km /home/my_name
para eliminar todos os processos que acessam o sistema de arquivos, como você fez, normalmente é suficiente para permitir que você desmonte-o. Você relatou que quando você fez isso, seu terminal foi fechado como resultado.
Isso acontecerá se seu diretório atual, no shell, for o ponto de montagem que você está tentando desmontar ou um de seus subdiretórios. (Seu shell está morto e, em seguida, o programa do terminal em execução vê que o shell foi fechado e, na maioria das configurações, também é encerrado automaticamente, da mesma forma que quando você executa o comando exit
.)
Para corrigir isso, simplesmente navegue para fora da montagem e tente desmontá-la novamente. Por exemplo, você pode alterar o diretório para /
first:
cd /
sudo umount /home/my_name
Encontre e feche ou mate qualquer processo que esteja acessando arquivos na montagem.
Se você já está em uma situação onde não quer matar processos com fuser
, ou se você é incapaz de fazer isso e precisa descobrir quais são esses processos, você tem várias opções para encontrá-los, incluindo alguns utilitários gráficos. Vou ilustrar brevemente uma opção aqui.
Você pode executar lsof
em um diretório para ver quais processos estão acessando arquivos dentro dele:
lsof /home/my_name
Isso funciona bem para pontos de montagem. Às vezes, lsof
é capaz de obter informações melhores se você executá-las como root, embora isso não seja necessário:
sudo lsof /home/my_name
A saída de lsof
geralmente parece algo assim:
ek@Io:~$ sudo lsof ~/mnt/old
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
flock 15529 ek cwd DIR 7,0 2048 1280 /home/ek/mnt/old
flock 15529 ek 3rW REG 7,0 21114 1311 /home/ek/mnt/old/md5sum.txt
less 15530 ek cwd DIR 7,0 2048 1280 /home/ek/mnt/old
less 15530 ek 3r REG 7,0 21114 1311 /home/ek/mnt/old/md5sum.txt
less 15530 ek 5r REG 7,0 231 1325 /home/ek/mnt/old/README.diskdefines
bash 27465 ek cwd DIR 7,0 2048 1280 /home/ek/mnt/old
Isso informa os arquivos e processos que estão sendo usados. Em particular, se você tem uma situação em que seu shell é o que está impedindo a desmontagem, e você não notou que este é o caso, então lsof
irá deixar claro como:
ek@Io:~$ lsof ~/mnt/old
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 27465 ek cwd DIR 7,0 2048 1472 /home/ek/mnt/old/boot
No exemplo acima, a única coisa que impedia que o sistema de arquivos fosse desmontado é que eu havia navegado em um subdiretório do ponto de montagem com meu shell ( bash
) e ainda estava lá.
Se você precisar de mais informações sobre um processo, uma maneira é executar ps
com seu ID de processo, que é fornecido na segunda coluna da saída de lsof
:
ek@Io:~$ ps 27465
PID TTY STAT TIME COMMAND
27465 pts/3 Ss+ 0:04 -bash
Você também pode matar o processo pelo seu PID ( kill 27465
, mas com o número apropriado em sua situação). Geralmente, é melhor tentar isso antes de passar para o kill -KILL 27465
mais strong. (O -9
flag funciona no lugar se -KILL
também.)
Naturalmente, antes de usar o comando kill
ou instalações semelhantes, geralmente é melhor tentar fechar os programas normalmente, especialmente se houver dados importantes em jogo. Por exemplo, é melhor salvar um documento e fechar um processador de texto do que sair do processador de texto com o comando kill
.
Acesse os arquivos sombreados por meio de uma montagem de ligação não-recursiva.
Como Paulo diz em em Superusuário , você pode acessar arquivos sombreados por montagens criando uma montagem de ligação e navegando até lá:
sudo mkdir /mnt/root
sudo mount --bind / /mnt/root
Esses comandos são ligeiramente adaptados da excelente resposta de Paul para essa pergunta. (Eu o encorajo a consultar essa página para detalhes adicionais.) Você não precisa usar /mnt/root
, mas é uma escolha tão boa quanto qualquer outra.
Se você fizer dessa forma, todo o seu sistema de arquivos raiz estará acessível através de /mnt/root
.
Se você tiver uma partição /home
separada, convém vincular a montagem de ligação a ela:
sudo mkdir /mnt/home
sudo mount --bind /home /mnt/home
Este é o mesmo que para /
, apenas com /home
.
Reiniciar.
sugestão do oldfred para reiniciar o sistema é uma solução razoável para este problema. Você deve ser capaz de desligar e reinicializar o sistema, se quiser. Seus dados são sombreados por uma montagem, mas não devem estar em risco de serem perdidos.
A reinicialização deve ser segura, mas você não precisa reiniciar para resolver isso, se não quiser. Se você tiver problemas com os métodos fornecidos acima e quiser fazê-los funcionar, por favor, comente ou (melhor) edite sua postagem. (Outras pessoas lendo isso com problemas semelhantes devem considerar postar uma nova pergunta.)