é possível criar um banco de dados de localização para um volume de rede no Mac OS X?

0

Preciso pesquisar rapidamente milhões de arquivos em um volume de rede e, em vez de pesquisar diretamente, gostaria de pesquisar as informações em um banco de dados.

Em vez de "rolar", parece razoável usar locate ou mlocate para criar um banco de dados, mas não consegui obter locate ou mlocate para trabalhar em um volume anexado à rede AFP ( ou SMB para esse assunto).

Alguém tem uma sugestão? Eu mudei o arquivo locate.rc em todas as combinações que eu poderia pensar, mas eu suspeito que nem AFP ro SMB são aceitáveis para a linha FILESYSTEMS.

FILESYSTEMS="hfs ufs afp"

Eu tentei o NFS buit Eu não tenho acesso ao servidor para poder configurá-lo para aceitar conexões de um Mac (parece exigir que você defina “inseguro” como uma das opções para o domínio).

    
por tom stratton 26.03.2013 / 22:35

2 respostas

1

Acontece que é possível fazer o locate.updatedb indexar outros sistemas de arquivos, incluindo a rede anexada. O problema é que a raiz do sistema de arquivos (e a árvore até o conteúdo que você deseja indexar) deve ser legível pelo usuário / grupo "nobody".

Você estava no caminho certo com /etc/locate.rc

Depois disso, descobri que /usr/libexec/locate.updatedb apenas usa find para construir o índice.
Ele percorre as entradas em /etc/locate.rc FILESYSTEMS (no 10.6, pelo menos, o padrão é apenas hfs se não for configurado).

A página man do find sugere o uso de "sysctl vfs" para descobrir o que é válido em sua máquina. No meu caso:

sysctl vfs|grep mounted
vfs.nfs has 1 mounted instance
vfs.hfs has 3 mounted instances
vfs.autofs has 3 mounted instances
vfs.afpfs has 4 mounted instances

Alguns testes rápidos para validar isso:

prowler:~%% mount |grep Volumes/keen
afp_1I6KyU4igzg00Q0vsj4E2G0H-1.2f0004fb on /Volumes/keen (afpfs, nodev, nosuid, mounted by keen)
prowler:~%% touch /Volumes/keen/test-afpfs
prowler:~%% find /Volumes/keen/ -name test-afpfs -fstype afpfs
prowler:~%% find /Volumes/keen/test-afpfs -name test-afpfs -fstype afpfs
/Volumes/keen/test-afpfs
prowler:~%% find /Volumes/keen/test-afpfs -name test-afpfs -fstype hfs
prowler:~%% 

Para o 10.6, pelo menos, o afpfs está correto para um sistema de arquivos montado em AFP.

Agora, para a falha de afpfs.

Quando o OSX (10.6) monta o volume do AFP (montado via um item de login ou Finder - > Go - > conecte ao servidor - os mecanismos OSX tradicionais para AFP), monta-o como legível somente pelo usuário:

prowler:/Volumes/keen%% ls -ld /Volumes/keen
drwx------  6 keen  keen  264 Dec 13 12:45 /Volumes/keen/

e tentando corrigir manualmente isso falha:

prowler:/Volumes/keen%% sudo chmod a+rx /Volumes/keen
prowler:/Volumes/keen%% ls -ld /Volumes/keen
drwx------  6 keen  keen  264 Dec 13 12:52 /Volumes/keen/

Ainda não encontrei uma solução alternativa (não tentei o autofs, já que esse método tende a ser quebrado a cada versão do OSX ...).

Os volumes hfs (e presumivelmente hfs +, etc) que são montados não têm esse problema, nem os volumes NFS montados via Utilitário de Disco - > Montagens NFS (10.6).

prowler:~%% mount |grep nfs
murf:/backups on /Users/keen/backups (nfs, nodev, nosuid, automounted, nobrowse)
prowler:~%% ls -ld /Users/keen/backups
drwxrwxrwx  33 root  wheel  2048 Dec 13 03:05 /Users/keen/backups/

Descobri isso ao tentar testar a indexação de localização apenas na montagem afp:

prowler:/Volumes/keen%% grep FILESYSTE /etc/locate.rc 
FILESYSTEMS="afpfs"

prowler:/Volumes/keen%% sudo /usr/libexec/locate.updatedbshell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
find: .: Permission denied

A execução com $ PWD fora da montagem afp não teve esse erro:

prowler:~%% sudo /usr/libexec/locate.updatedb
prowler:~%% 

mas também não teve resultados:

prowler:~%% locate test-afpfs
prowler:~%% 

Então a resposta curta como eu encontrei até agora - SIM! Você pode obter localização para indexar volumes de rede no OSX. NÃO, você não pode indexar um volume de rede afp.

    
por 13.12.2014 / 19:06
0

Então, se você está tentando pesquisar milhões de arquivos, provavelmente quer usar algo como o grep via linha de comando. Você acessaria o compartilhamento via / volumes / sharename (desde que você tenha conectado via SMB ou AFP).

#Print the files to screen:
grep -rI 'textstring' /Volumes/sharename/folder/

#capture the search in a file:
grep -rI 'textstring' /Volumes/sharename/folder/ > ~/desktop/searchResults.txt

* Isso pode ficar muito grande se você tiver uma pesquisa muito solta, pois capturará todos os arquivos correspondentes.

Se você está apenas tentando encontrar um arquivo, então você pode pesquisar como este

#display the results onscreen for a file ending in 'txt'
find /Volumes/sharename/folder -name '*txt'

#capture the results in a file on your desktop.
find /Volumes/sharename/folder -name '*txt' > ~/desktop/findResults.txt

* Isso também pode ser muito grande se você tiver uma pesquisa muito solta, pois capturará todos os arquivos correspondentes.

Você poderia usar um banco de dados para armazenar todos os arquivos, mas o banco de dados seria o tamanho do sistema no qual eles estão armazenados e você estaria replicando a funcionalidade do próprio sistema de arquivos fazendo isso.

Uma alternativa poderia ser pesquisar um conjunto local de arquivos criados usando o rsync. Se não houver um daemon rsync na máquina host, você ainda poderá extrair todos os arquivos aos quais você tem acesso. Novamente, você precisará de tanto espaço quanto os arquivos que está explorando.

    
por 28.03.2013 / 22:29