umount -f
infelizmente apenas remove as coisas do VFS sem , na verdade, desmontando. Ele simplesmente não aparece mais em /proc/mounts
ou em qualquer lugar, mas ainda está montado. Não há nenhuma maneira óbvia de verificar o que ainda está usando essa montagem (ou se ela ainda está lá, pois lsof
e outras coisas também falharam nesse ponto, se você usar o nome de caminho que não existe mais), sem verificar o sistema de arquivos bandeira suja e esperando que isso seja apagado uma vez que esteja realmente desmontado.
Você pode verificar algumas coisas manualmente, como dispositivos ou arquivos em uso por losetup
, cat /proc/mdstat
, dmsetup table
, ... e verificar /proc/*/{maps,cwd,exe,fd/*}
para referências ao dispositivo em questão (o próprio caminho de montagem não existe mais). Mas isso provavelmente não cobre tudo também.
Se você encontrar tal referência (como um descritor de arquivo aberto de processo em execução), verá que pode acessar esse arquivo e modificá-lo da maneira que desejar, provando assim que o sistema de arquivos ainda está montado e totalmente operacional, embora invisível.
Um pouco de código que usei para encontrar uma presença de retaguarda tão lenta, observe que ela é codificada para um nome de dispositivo diferente.
isbusy() {
grep -E '^/dev/mmcblk(0p3|1p1) ' /proc/mounts || \
grep -E '^([^ ]+ ){3}b3:0[39] ' /proc/*/maps || \
find /proc/[0-9]*/exe /proc/[0-9]*/cwd /proc/[0-9]*/fd -exec stat -tL {} + \
| grep -E '^([^ ]+ ){6}b30[39]'
}
Está incompleto.