Verifique se o diretório é um ponto de montagem [duplicado]

8

Usando o Python, examino volumes montados em Unix para arquivos e, em seguida, adiciono ou limpo os nomes de arquivos em um banco de dados, com base em sua existência. Acabei de perceber que, se o volume que está sendo varrido for desmontado por algum motivo, a varredura irá assumir que todos os nomes de arquivo naquele volume devem ser eliminados! Yikes Existe alguma maneira melhor de montar volumes ou sugestões?

A única coisa em que consigo pensar é colocar um arquivo fictício permanente em cada volume que eu verifique antes de digitalizar, garantindo, assim, que o volume seja apenas verificado se o arquivo fictício puder ser localizado.

    
por MFB 10.06.2015 / 11:58

2 respostas

10

Você pode usar mountpoint para verificar se o diretório fornecido é um ponto de montagem. Exemplo

mountpoint /mnt/foo; printf "$?\n"
/dev/foo is a mountpoint
0

mountpoint /mnt/bar; printf "$?\n"
/dev/bar is not a mountpoint
1

Como o valor de retorno indica, isso pode ser facilmente usado em uma instrução if em um script.

    
por 10.06.2015 / 12:26
5

Um diretório é um ponto de montagem se o campo st_dev retornado por stat for diferente do valor em seu pai. Esse é o critério usado pela maioria das ferramentas ( find -xdev , rsync -x , du -x ,…). Isso é fornecido como a função os.path.ismount no Python.

Isso não ajudará você diretamente, porque se um diretório estiver vazio, isso não significa que ele era um ponto de montagem em algum outro momento. Se você quiser detectar pontos de montagem, precisará fazê-lo no momento da indexação. Você pode querer manter pontos de montagem separados em índices separados e atualizar apenas os índices cujas raízes estão presentes e não vazias. Tenha em atenção que um directório que é por vezes um ponto de montagem pode não estar vazio mesmo quando o sistema de ficheiros habitual não está montado, porque algum outro sistema de ficheiros está instalado ou simplesmente porque existem ficheiros nesse diretório (os ficheiros de um directório estão ocultos) enquanto esse diretório é um ponto de montagem).

    
por 11.06.2015 / 01:46

Tags