web-dev-qa-db-fra.com

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

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 ressources externes après le redémarrage afin que la commande de localisation puisse effectuer une recherche dans mes références 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
20
user784637

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

Quelques idées sur la façon dont vous pouvez configurer updatedbpour indexer votre lecteur externe:

1. Montez le lecteur externe sous /mnt.

Si votre disque dur externe est censé être monté en permanence, je suggère de le configurer de sorte qu'il soit monté sous /mnt au lieu de /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 éditer /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 va créer 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.db de votre domicile. Vous n'avez pas besoin de Sudopour 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é, updatedbpensera que les fichiers sont supprimés et videra la base de données.

Vous pouvez configurer un script pour automatiser cette tâche. Recherchez "cronjob" pour apprendre à le faire. Remarque: vous pouvez configurer un cronjob d’utilisateur en tant qu’utilisateur. Vous n'avez pas besoin des droits Sudo pour configurer un cronjob d'utilisateur.

La commande suivante interrogera la base de données:

locate -d ~/.externalharddisk.db searchterm

Vous pouvez également interroger simultanément la base de données dédiée et la base de données par défaut:

locate -d ~/.externalharddisk.db: searchterm

Les deux points à la fin suivis de rien signifie également effectuer une recherche dans la base de données par défaut.

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

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

Désormais, vous pouvez utiliser locatepour rechercher uniquement dans la base de données par défaut et locate-external pour effectuer également une recherche dans votre disque dur externe.

3. Supprimez /media de PRUNEPATHSname__

Note: Je ne recommande pas cela! Ceci est dû au fonctionnement de updatedbname__. Si updatedbest exécuté alors que le disque dur externe est supprimé, toutes les entrées pointant sur le disque dur externe sont supprimées de la base de données. Si updatedbest exécuté alors que le disque dur externe est connecté, les entrées pointant vers le disque dur externe sont à nouveau ajoutées. Étant donné que updatedbfonctionne régulièrement en arrière-plan, vous ne pouvez jamais être sûr que les fichiers du disque dur externe sont actuellement indexés ou non.

De plus, si vous supprimez /media de PRUNEPATHSname__, ce comportement s’appliquera également à tout autre stockage externe que vous aurez monté alors que updatedbmettra à jour la base de données.

35
lesmana

Dans updatedb.conf vous avez /media dans PRUNEPATHS. Vous devriez le retirer, car vos disques externes semblent y être montés.

2
taneli

Ce sont des embellissements supplémentaires à ajouter à réponse de Lesmana

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

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

[2] En ce qui concerne la mise à jour des deux bases de données ; celui du disque dur principal et le nouveau du disque dur externe; il vaut probablement la peine d’ajouter une entrée de plus au .bashrc

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

et ensuite simplement exécuter updateALLdans le terminal pour mettre à jour les deux bases de données simultanément

PS: bien sûr, n'oubliez pas de lancer . ~/.bashrc pour tout confirmer une fois qu'une nouvelle ligne est enregistrée dans le fichier .bashrc
PS²: et bien sûr aussi externalharddiskdans toutes les lignes ci-dessus est remplacé par le nom de votre nom de disque dur externe, à savoir/media/YOURHDNAME

* PS³ et vous pouvez bien sûr associer mise à jour et localisation dans votre fichier .bashrc

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

alors maintenant, tout ce que vous avez besoin de mettre à jour et de rechercher consiste à entrer LO 'suivi des termes que vous recherchez'

2
shantiq