updatedb & find command problem - Os arquivos do disco rígido externo não são mais indexados após a reinicialização

20

Os arquivos do meu disco rígido externo não são mais indexados após a reinicialização. Eu tenho que remontar e depois correr

# updatedb

após cada reinicialização. O problema é atualizado e leva alguns minutos para meus discos rígidos externos. Existe alguma maneira de manter a indexação de meus externos após a reinicialização, para que o comando de localização possa pesquisar meus externos?

EDIT: Por solicitação, aqui estão as minhas especificações:

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/me/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=me)
/dev/sdb1 on /media/me type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdd1 on /media/Little Boy type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sde1 on /media/Fat Man type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

# on_ac_power; echo $?
255
user784637
fonte
11
Por favor, forneça os arquivos de configuração e opções de montagem: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
organizar
vai fazer, não terá acesso a uma máquina linux para cerca de mais 8 horas
user784637
Organize, atualizei minha resposta com minhas especificações, obrigado pela ajuda =)
user784637
<note for the future> Veja como descobrir GERALMENTE o que updatedbestá fazendo: (1.) Corra updatedbcom --verbosee --debug-pruning. (2.) Veja o texto para ver o que está sendo indexado e não está sendo indexado -> ajuste seu /etc/updatedb.conf. Eu grepprocurava por arquivos que eu precisava, mas estavam sendo ignorados. Por exemplo, eu modifiquei /etc/updatedb.confcom: (1.) PRUNE_BIND_MOUNTS = "no"(2.) remover nfs nfs4 nfsd autofsde PRUNEFS(3.) remover /netdePRUNEPATHS
Trevor Boyd Smith

Respostas:

35

Os arquivos do seu disco rígido externo não são indexados porque updatedbestão configurados para não indexar nada /media, onde é normalmente montado o armazenamento externo. Esta configuração é definida no arquivo /etc/updatedb.conf. Especificamente a entrada /mediana PRUNEPATHSlinha.

Algumas idéias de como você pode fazer updatedbpara indexar sua unidade externa:

1. Monte a unidade externa em um lugar /mnt.

Se o seu disco rígido externo deve ser montado permanentemente , sugiro configurá-lo para que seja montado embaixo em /mntvez de embaixo /media. Isso geralmente pode ser feito editando /etc/fstab. Procure por "fstab" para aprender sobre isso. Você precisará de direitos sudo para editar /etc/fstab.

2. Crie um banco de dados dedicado para o seu disco rígido externo e consulte-o sob demanda.

O comando a seguir criará um banco de dados dedicado:

updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk

Isso criará o banco de dados no arquivo oculto .externalharddisk.dbem sua casa. Você não precisa sudodesse comando. Execute o mesmo comando novamente para manter o banco de dados atualizado. Cuidado: se você executar esse comando enquanto o disco rígido externo não estiver montado, updatedbos arquivos serão excluídos e esvaziarão o banco de dados.

Você pode configurar um script para automatizar essa tarefa. Procure por "cronjob" para aprender como fazer isso. Nota: você pode configurar um cronjob de usuário como usuário. Você não precisa de direitos sudo para configurar um cronjob de usuário.

O seguinte comando consultará o banco de dados:

locate -d ~/.externalharddisk.db searchterm

Você também pode consultar o banco de dados dedicado e o banco de dados padrão ao mesmo tempo:

locate -d ~/.externalharddisk.db: searchterm

Os dois pontos no final seguidos por nada significam também pesquisar no banco de dados padrão.

Você pode criar um alias para facilitar o uso. Coloque a seguinte linha no seu .bashrc:

alias locate-external='locate -d ~/.externalharddisk.db:'

Agora você pode usar locatepara pesquisar apenas no banco de dados padrão e locate-externaltambém no disco rígido externo.

3. Remova /mediadePRUNEPATHS

Nota: Eu não recomendo isso ! Isso é por causa da maneira como updatedbfunciona. Se for updatedbexecutado enquanto o disco rígido externo é removido, todas as entradas que apontam para o disco rígido externo serão removidas do banco de dados. Se for updatedbexecutado enquanto o disco rígido externo estiver conectado, as entradas apontando para o disco rígido externo serão adicionadas novamente. Como updatedbestá sendo executado regularmente em segundo plano, você nunca pode ter certeza se os arquivos do disco rígido externo estão atualmente indexados ou não.

Além disso: se você remover /mediade PRUNEPATHS, esse comportamento também se aplicará a qualquer outro armazenamento externo que você tenha montado enquanto updatedbestiver atualizando o banco de dados.

lesmana
fonte
2
Além disso você pode adicionar esse alias para o ~/.bashrcarquivo:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77
+1 para você e OP. No entanto, em vez de um comando de banco de dados externo separado locate-external, ou seja , estou pensando em anexar três bancos de dados em um --database /mnt/c...para WSL, --dataabase /mnt/e...para scripts e documentos compartilhados WSL + Linux e --database /var/lib/mlocate/mlocate.dbpara o Ubuntu 16.04 com inicialização dupla. Todos os três bancos de dados na mesma linha de comando localizar (com um alias, é claro). Mas antes de começar, seria bom saber se funcionaria. Posso ter seus pensamentos sobre isso?
WinEunuuchs2Unix 11/11
Eu não concordo com o argumento de remoção /mediade PRUNEPATHS. Embora sim, tenha o problema que você mencionou, excluí-lo completamente é ainda pior - você NUNCA localizará arquivos nessas unidades. É como amputar os dedos para que eles não se queimem durante o cozimento (a menos que haja outra solução óbvia implícita que eu não esteja vendo).
Sridhar Sarnobat
2

Em updatedb.confque você tem /mediaem PRUNEPATHS. Você deve removê-lo, pois suas unidades externas parecem montadas lá.

taneli
fonte
2

Estes são outros enfeites a serem adicionados à resposta de Lesmana

[1] leve embelezamento: posso sugerir a adição de -i para garantir que o caso da consulta pesquisada não seja mais um problema : para adicionar ao .bashrc >>

alias Locate-external = 'Localize -d ~ / .externalharddisk.db: -i '

[2] No que diz respeito à atualização de ambas as bases de dados ; aquele no HD principal e o novo no externo; provavelmente vale a pena adicionar mais uma entrada ao arquivo .bashrc

alias updateALL = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk'

e então simplesmente executar updateALLno terminal para atualizar os dois bancos de dados de uma só vez

PS: é claro que não se esqueça de correr . ~/.bashrcpara confirmar tudo assim que uma nova linha for salva no .bashrc
PS²: e, é claro, também externalharddiskem todas as linhas acima é substituída pelo nome do seu nome de HD externo, por exemplo, / media / YOURHDNAME

* PS³ e, é claro, você pode combinar a atualização e a localização no seu .bashrc

alias LO = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk; localize -d ~ / .externalharddisk.db: -i '

agora, tudo o que você precisa atualizar e pesquisar é inserir LO 'seguido pelos termos que você procura'

shantiq
fonte
+1 para atualização de sequenciamento e depois localize
LMSingh