Se algum processo tiver seu diretório de trabalho atual ou diretório raiz em um sistema de arquivos montado, posso desmontar/remontar esse sistema de arquivos?
Se algum processo tiver um descritor de arquivo de leitura/gravação ou mmap de leitura/gravação/compartilhado de um arquivo em um sistema de arquivos montado, posso remontar esse sistema de arquivos para somente leitura? Se sim, o que acontecerá com esses descritores de arquivo e mmaps quando você escrever neles?
O diretório de trabalho e o diretório raiz de um processo são contados como uma referência ativa ao sistema de arquivos, o mesmo que um arquivo aberto. Portanto, eles impedem que o sistema de arquivos seja desmontado. O kernel retorna um erro "ocupado".
Um sistema de arquivos pode ser remontado como somente leitura se não houver arquivos abertos para gravação. O diretório de trabalho e o diretório raiz de um processo não são contados como arquivos abertos para gravação; eles não impedem que o sistema de arquivos seja remontado como somente leitura.
Há outro caso: pelo menos em alguns sistemas de arquivos, você não pode remontar como somente leitura se um arquivo desvinculado estiver aberto, mesmo para leitura. Fechar um arquivo desvinculado permite que o espaço seja recuperado, mas isso pode exigir a atualização de blocos de metadados do sistema de arquivos no disco.
O comando
umount -l
(que usaumount2(..., MNT_DETACH)
) é capaz de desanexar sistemas de arquivos ocupados da árvore de montagem. O sistema de arquivos permanece ativo. Ele será encerrado assim que o último arquivo aberto for fechado. A documentação não informa se o desligamento ocorre em segundo plano ou se você pode confiar que o sistema de arquivos foi desligado de forma limpa após o retorno da última chamada close().