Eu tenho um script de backup escrito em Python que cria o diretório de destino antes de copiar o diretório de origem para ele. Eu o configurei para usar /external-backup
como destino, onde é montado um disco rígido externo. Acabei de executar o script sem que o disco rígido estivesse ligado (ou montado) e descobri que estava funcionando normalmente, embora fazendo um backup no disco rígido interno, que não tem espaço suficiente para fazer o backup.
Minha pergunta é: como posso verificar se o volume está montado no lugar certo antes de gravá-lo? Se eu conseguir detectar que /external-backup
não está montado, posso impedir a gravação.
A questão do bônus é por que isso foi permitido, quando o sistema operacional sabe que o diretório deve estar em outro dispositivo e o que aconteceria com os dados (no disco rígido interno) devo montar posteriormente esse dispositivo (o disco rígido externo)? Claramente, não pode haver duas cópias em dispositivos diferentes no mesmo caminho!
Desde já, obrigado!
/external-backup
não vive em um dispositivo externo, ele vive no sistema de arquivos pai. O sistema sabe apenas o quemount
diz, não faz ideia do que deve estar lá. Não há nada de especial em um "ponto de montagem" em um sistema de arquivos Unix. É apenas um diretório regular.Para uma resposta definitiva para algo que apenas o kernel sabe com certeza, pergunte ao kernel:
Esse arquivo pode ser lido / analisado como se fosse um arquivo normal, usando as ferramentas que você desejar. Incluindo Python. Exemplo rápido e sujo:
fonte
A maneira mais fácil de verificar é invocar
mount
viasubprocess
e ver se aparece lá. Para obter crédito extra, useos.readlink()
o conteúdo de/dev/disk/by-*
para descobrir qual dispositivo é.fonte
mount
é definida na melhor das hipóteses. O que fazmount
de saída se eu tiver montado/dev/evil device on tour
em/directory on which I mount devices
? A análise da saída pode não ser confiável nesses casos ...Resposta bônus. Se o dispositivo externo não estiver montado, os dados serão gravados na partição raiz no caminho
/external-backup
. Se o dispositivo externo estiver montado, os dados na partição raiz ainda estarão lá, mas não/external-backup
poderão ser acessados porque agora estão apontando para o dispositivo externo.fonte
Pergunta antiga, mas pensei em contribuir de qualquer maneira com minha solução (com base na resposta de Dennis Williamson e Ignacio Vazquez-Abrams ). Como estou usando-o em um ambiente não Linux para verificar a montagem de diretórios remotos, / proc e mtab não podem ser usados e nenhuma verificação adicional foi implementada:
Melhorias bem-vindas!
fonte
O arquivo / etc / mtab existe para informar o que está montado atualmente. Há uma
getmntent
chamada, mas acho que não foi exportada noos
módulo. O rápido e sujo? Abra / etc / mtab e divida. Verifique se o dispositivo está presente na coluna 0 e se o ponto de montagem de destino na coluna 1 está correto.fonte