Problème de commande updatedb & Locate - Les fichiers du disque dur externe ne sont plus indexés après le redémarrage

20

Les fichiers de mon disque dur externe ne sont plus indexés après le redémarrage. Je dois remonter puis courir

# updatedb

après chaque redémarrage. Le problème est mis à jourb prend quelques minutes pour mes disques durs externes. Existe-t-il un moyen de conserver l'indexation de mes externes après le redémarrage afin que la commande Locate puisse rechercher dans mes externes?

EDIT: par demande, voici mes spécifications:

$ 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
la source
1
S'il vous plaît fournir les fichiers de configuration et les options de montage: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
organiser
fera, n'aura pas accès à une machine linux pendant environ 8 heures de plus
user784637
Arrangez-vous, j'ai mis à jour ma réponse avec mes spécifications, merci pour votre aide =)
user784637
<note pour l'avenir> Voici comment comprendre GÉNÉRALEMENT ce qui updatedbse passe: (1.) Exécutez updatedbavec --verboseet --debug-pruning. (2.) Regardez le texte pour voir ce qui est indexé et non indexé -> ajustez votre /etc/updatedb.conf. J'ai greprecherché les fichiers dont j'avais besoin mais qui étaient ignorés. Par exemple, j'ai dû modifier /etc/updatedb.confavec: (1.) PRUNE_BIND_MOUNTS = "no"(2.) supprimer nfs nfs4 nfsd autofsde PRUNEFS(3.) supprimer /netdePRUNEPATHS
Trevor Boyd Smith

Réponses:

35

Les fichiers de votre disque dur externe ne sont pas indexés car il updatedbest configuré pour ne rien indexer sous /media, c'est là que le stockage externe est généralement monté. Cette configuration est définie dans le fichier /etc/updatedb.conf. Plus précisément l'entrée /mediadans la PRUNEPATHSligne.

Quelques idées updatedbpour indexer votre disque dur externe:

1. Montez le lecteur externe sous /mnt.

Si votre disque dur externe est censé être monté de façon permanente, je vous suggère de le configurer de sorte qu'il soit monté sous /mntau lieu de sous /media. Cela peut généralement être fait en éditant /etc/fstab. Recherchez "fstab" pour en savoir plus. Vous aurez besoin des droits sudo pour modifier /etc/fstab.

2. Créez une base de données dédiée pour votre disque dur externe et interrogez-la à la demande.

La commande suivante créera une base de données dédiée:

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

Cela créera la base de données dans le fichier caché .externalharddisk.dbde votre maison. Vous n'avez pas besoin sudode cette commande. Exécutez à nouveau la même commande pour maintenir la base de données à jour. Attention: si vous exécutez cette commande alors que le disque dur externe n'est pas monté, alors updatedbles fichiers seront supprimés et videront la base de données.

Vous pouvez configurer un script pour automatiser cette tâche. Recherchez «cronjob» pour savoir comment procéder. Remarque: vous pouvez configurer un cronjob utilisateur en tant qu'utilisateur. Vous n'avez pas besoin des droits sudo pour configurer un cronjob utilisateur.

La commande suivante interroge la base de données:

locate -d ~/.externalharddisk.db searchterm

Vous pouvez également interroger la base de données dédiée et la base de données par défaut en même temps:

locate -d ~/.externalharddisk.db: searchterm

Le signe deux-points à la fin suivi de rien signifie également rechercher dans la base de données par défaut.

Vous pouvez créer un alias pour une utilisation plus facile. Mettez la ligne suivante dans votre .bashrc:

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

Maintenant, vous pouvez utiliser locatepour rechercher uniquement la base de données par défaut et locate-externalpour rechercher également dans votre disque dur externe.

3. Supprimer /mediadePRUNEPATHS

Remarque: je ne le recommande pas ! C'est à cause de la façon dont updatedbfonctionne. Si updatedbs'exécute alors que le disque dur externe est supprimé, toutes les entrées pointant vers le disque dur externe seront supprimées de la base de données. Si updatedbs'exécute alors que le disque dur externe est connecté, les entrées pointant vers le disque dur externe seront à nouveau ajoutées. Depuis updatedbs'exécute régulièrement en arrière-plan, vous ne pouvez jamais être sûr si les fichiers du disque dur externe sont actuellement indexés ou non.

De plus: si vous supprimez /mediade PRUNEPATHS, ce comportement s'appliquera également à tout autre stockage externe que vous avez monté lors de la updatedbmise à jour de la base de données.

lesmana
la source
2
Vous pouvez également ajouter cet alias à votre ~/.bashrcfichier:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77
+1 à vous et à OP. Cependant, plutôt qu'une commande de base de données externe distincte locate-external, c'est-à - dire que j'envisage d'ajouter trois bases de données en une avec --database /mnt/c...pour WSL, --dataabase /mnt/e...pour les scripts et documents partagés WSL + Linux et --database /var/lib/mlocate/mlocate.dbpour Ubuntu 16.04 à double démarrage. c'est-à-dire les trois bases de données sur la même ligne de commande de localisation (avec un alias bien sûr). Mais avant de commencer, ce serait bien de savoir si cela fonctionnerait. Puis-je avoir votre avis là-dessus?
WinEunuuchs2Unix
Je ne suis pas d'accord avec l'argument de la suppression /mediade PRUNEPATHS. Bien que oui, il présente le problème que vous avez mentionné, l'exclure complètement est encore pire - vous ne localiserez JAMAIS de fichiers sur ces disques. C'est comme amputer vos doigts pour qu'ils ne se brûlent pas pendant la cuisson (sauf s'il y a une autre solution évidente implicite que je ne vois pas).
Sridhar Sarnobat
2

En updatedb.confvous avez /mediaen PRUNEPATHS. Vous devez le retirer, car vos disques externes semblent y être montés.

taneli
la source
2

Ce sont d'autres embellissements à ajouter à la réponse de Lesmana

[1] embellissement léger: puis-je suggérer d'ajouter le -i pour s'assurer que la casse de la requête recherchée n'est plus un problème : donc à ajouter à .bashrc >>

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

[2] En ce qui concerne la mise à jour des deux bases de données ; celui du HD principal et le nouveau de l'extérieur; cela vaut probablement la peine d'ajouter une entrée supplémentaire au .bashrc

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

puis de simplement exécuter updateALLdans le terminal pour mettre à jour les deux bases de données à la fois

PS: bien sûr, n'oubliez pas de courir . ~/.bashrcpour tout raffermir une fois qu'une nouvelle ligne est enregistrée dans le .bashrc
PS²: et bien sûr aussi externalharddiskdans toutes les lignes ci-dessus est remplacée par le nom de votre nom HD externe ie / media / YOURHDNAME

* PS³ et vous pouvez bien sûr combiner à la fois la mise à jour et la localisation dans votre .bashrc

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

Alors maintenant, tout ce dont vous avez besoin pour mettre à jour et rechercher est d'entrer LO "suivi des termes que vous recherchez"

shantiq
la source
+1 pour la mise à jour du séquençage, puis recherchez
LMSingh