problema actualizado del comando b & localizar: los archivos del disco duro externo ya no se indexan después de reiniciar

20

Los archivos de mi disco duro externo ya no se indexan después de reiniciar. Tengo que volver a montar y luego ejecutar

# updatedb

después de cada reinicio. El problema se actualizab tarda unos minutos en mis discos duros externos. ¿Hay alguna forma de que pueda retener la indexación de mis externos después de reiniciar para que el comando de localización pueda buscar a través de mis externos?

EDITAR: Por solicitud aquí están mis especificaciones:

$ 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
usuario784637
fuente
1
Sírvanse proporcionar los archivos de configuración y opciones de montaje: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
organizar
lo hará, no tendrá acceso a una máquina Linux durante unas 8 horas más
user784637
Organizar, He actualizado mi respuesta con las especificaciones de mi, gracias por su ayuda =)
user784637
<nota para el futuro> A continuación se explica cómo GENERALMENTE averiguar qué updatedbestá haciendo: (1.) Ejecutar updatedbcon --verbosey --debug-pruning. (2.) Mire el texto para ver qué se indexa y no se indexa -> ajuste su /etc/updatedb.conf. I grepD para los archivos que necesitaba, pero fueron saltadas. Por ejemplo, tuve que modificar /etc/updatedb.confcon: (1.) PRUNE_BIND_MOUNTS = "no"(2.) eliminar nfs nfs4 nfsd autofsde PRUNEFS(3.) eliminar /netdePRUNEPATHS
Trevor Boyd Smith

Respuestas:

35

Los archivos de su disco duro externo no están indexados porque updatedbestá configurado para no indexar nada debajo /media, que es donde generalmente se monta el almacenamiento externo. Esta configuración se establece en el archivo /etc/updatedb.conf. Específicamente la entrada /mediaen la PRUNEPATHSlínea.

Algunas ideas sobre cómo puede hacer updatedbpara indexar su unidad externa:

1. Monte la unidad externa debajo /mnt.

Si se supone que su disco duro externo debe estar montado permanentemente , le sugiero que lo configure para que se monte debajo en /mntlugar de debajo /media. Eso generalmente se puede hacer editando /etc/fstab. Busque "fstab" para aprender sobre eso. Necesitarás derechos de sudo para editar /etc/fstab.

2. Cree una base de datos dedicada para su disco duro externo y consulte a pedido.

El siguiente comando creará una base de datos dedicada:

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

Esto creará la base de datos en el archivo oculto .externalharddisk.dben su hogar. No necesitas sudoese comando. Ejecute el mismo comando nuevamente para mantener actualizada la base de datos. Cuidado: si ejecuta ese comando mientras el disco duro externo no está montado updatedb, pensará que los archivos se eliminan y vaciará la base de datos.

Puede configurar un script para automatizar esa tarea. Busque "cronjob" para aprender cómo hacerlo. Nota: puede configurar un cronjob de usuario como usuario. No necesita derechos de sudo para configurar un cronjob de usuario.

El siguiente comando consultará la base de datos:

locate -d ~/.externalharddisk.db searchterm

También puede consultar la base de datos dedicada y la base de datos predeterminada al mismo tiempo:

locate -d ~/.externalharddisk.db: searchterm

Los dos puntos al final seguidos de nada significa también buscar en la base de datos predeterminada.

Puede hacer un alias para un uso más fácil. Ponga la siguiente línea en su .bashrc:

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

Ahora puede usar locatepara buscar solo en la base de datos predeterminada y locate-externaltambién para buscar en su disco duro externo.

3. Eliminar /mediadePRUNEPATHS

Nota: ¡No recomiendo esto ! Esto se debe a la forma en que updatedbfunciona. Si se updatedbejecuta mientras se elimina el disco duro externo, todas las entradas que apuntan al disco duro externo se eliminarán de la base de datos. Si se updatedbejecuta mientras el disco duro externo está conectado, las entradas que apuntan al disco duro externo se agregarán nuevamente. Dado que updatedbse ejecuta regularmente en segundo plano, nunca puede estar seguro de si los archivos del disco duro externo están indexados o no.

Además: si se quita /mediade PRUNEPATHS, este comportamiento también se aplican a cualquier otro almacenamiento externo le sucede que tiene montada mientras updatedbse actualiza la base de datos.

lesmana
fuente
2
También puede agregar este alias a su ~/.bashrcarchivo:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77
+1 tanto para usted como para OP. Sin embargo, en lugar de un comando de base de datos externo separado locate-external, es decir , estoy considerando agregar tres bases de datos en una con --database /mnt/c...WSL, --dataabase /mnt/e...con scripts y documentos compartidos WSL + Linux y --database /var/lib/mlocate/mlocate.dbUbuntu 16.04 con arranque dual. es decir, las tres bases de datos en la misma línea de comando de localización (con un alias, por supuesto). Pero antes de comenzar, sería bueno saber si funcionará. ¿Puedo pensar en eso?
WinEunuuchs2Unix
No estoy de acuerdo con el argumento de eliminar /mediade PRUNEPATHS. Si bien tiene el problema que mencionó, excluirlo por completo es aún peor: NUNCA ubicará archivos en esas unidades. Es como amputar tus dedos para que no se quemen mientras cocinas (a menos que haya otra solución obvia implícita que no estoy viendo).
Sridhar Sarnobat
2

En updatedb.conftienes /mediaen PRUNEPATHS. Debe eliminarlo, ya que sus unidades externas parecen estar montadas allí.

taneli
fuente
2

Estos son otros adornos que se agregarán a la respuesta de Lesmana

[1] ligero adorno: ¿puedo sugerir que agregue -i para asegurarme de que el caso de la consulta buscada ya no sea un problema : así que agregue a .bashrc >>

alias localizar-externo = 'localizar -d ~ / .externalharddisk.db: -i '

[2] En cuanto a la actualización de ambas bases de datos ; el que está en el HD principal y el nuevo en el externo; probablemente valga la pena agregar una entrada más al .bashrc

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

y luego simplemente ejecutar updateALLen la terminal para actualizar ambas bases de datos a la vez

PD: por supuesto, no olvide ejecutar . ~/.bashrcpara reafirmar todo una vez que se guarda una nueva línea en el .bashrc
PS²: y, por supuesto, externalharddisken todas las líneas anteriores se reemplaza por el nombre de su nombre HD externo, es decir, / media / YOURHDNAME

* PS³ y, por supuesto, puedes combinar tanto la actualización como la ubicación en tu .bashrc

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

así que ahora todo lo que necesita actualizar y buscar es ingresar LO 'seguido de los términos que busca'

shantiq
fuente
+1 para la actualización de secuencia y luego localizar
LMSingh