Updatedb和定位命令问题-重新启动后不再索引来自外部硬盘驱动器的文件


20

重新启动后,不再索引我的外部硬盘驱动器中的文件。我必须重新安装然后再运行

# updatedb

每次重新启动后。问题是updateb,我的外部硬盘驱动器需要几分钟。重新启动后,有什么方法可以保留外部索引,以便locate命令可以搜索外部?

编辑:每个请求在这里是我的规格:

$ 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

1
请提供配置文件和安装选项:cat /etc/updatedb.confmounton_ac_power; echo $?
安排

会做,不会再有大约8个小时的时间访问linux机器
user784637 2011年

安排好了,我已经用规格更新了答案,感谢您的帮助=)
user784637 2011年

<将来的注意事项>这里是如何大致确定updatedb正在做什么的方法:(1.)updatedb使用--verbose和运行--debug-pruning。(2.)查看文字以查看正在被索引而不被索引的内容->调整您的/etc/updatedb.conf。我grep为我需要但被跳过的文件。例如我已经修改/etc/updatedb.conf以:(1)PRUNE_BIND_MOUNTS = "no"(2)删除nfs nfs4 nfsd autofsPRUNEFS(3)删除/netPRUNEPATHS
特雷弗博伊德史密斯

Answers:


35

您的外部硬盘上的文件未建立索引,因为updatedb配置为不索引/media,通常是在外部存储的下,。此配置在文件中设置/etc/updatedb.conf。特别是/mediaPRUNEPATHS行中的条目。

如何建立updatedb外部驱动器索引的一些建议:

1.将外部驱动器安装到/mnt

如果您应该将外部硬盘永久安装,则建议对其进行配置,以便将其安装在下面/mnt而不是下面/media。通常可以通过编辑来完成/etc/fstab。搜索“ fstab”以了解相关信息。您将需要sudo权限才能进行编辑/etc/fstab

2.为您的外部硬盘创建一个专用数据库,并根据需要进行查询。

以下命令将创建一个专用数据库:

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

这将.externalharddisk.db在您家中的隐藏文件中创建数据库。您不需要sudo该命令。再次执行相同的命令以保持数据库更新。小心:如果在未装载外部硬盘的情况下运行该命令,updatedb则会认为文件已删除,并将清空数据库。

您可以设置脚本来自动执行该任务。搜索“ cronjob”以了解操作方法。注意:您可以将用户cronjob设置为user。您不需要sudo权限即可设置用户cronjob。

以下命令将查询数据库:

locate -d ~/.externalharddisk.db searchterm

您还可以同时查询专用数据库和默认数据库:

locate -d ~/.externalharddisk.db: searchterm

末尾的冒号后面没有任何内容,这意味着也可以在默认数据库中搜索。

您可以创建别名以便于使用。将以下行放入您的.bashrc

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

现在,您可以locate用来仅搜索默认数据库,locate-external也可以在外部硬盘中搜索。

3. /mediaPRUNEPATHS

注意:我不建议这样做!这是因为工作方式updatedb。如果updatedb在删除外部硬盘的同时运行,则所有指向外部硬盘的条目都将从数据库中删除。如果updatedb在连接外部硬盘时运行,则指向外部硬盘的条目将再次添加。由于updatedb在后台正常运行,因此您无法确定当前是否已索引外部硬盘上的文件。

此外:如果/media从中删除PRUNEPATHS,则此行为也将应用于updatedb更新数据库时碰巧挂载的任何其他外部存储。


2
您还可以将此别名添加到~/.bashrc文件中:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77

为您和OP +1。但是locate-external,不是考虑单独的外部DB命令,即我正在考虑将三个数据库附加到一个数据库中,--database /mnt/c...用于WSL,--dataabase /mnt/e...用于WSL + Linux共享脚本和文档以及--database /var/lib/mlocate/mlocate.db用于双重引导的Ubuntu 16.04。即,所有三个数据库都在同一locate命令行上(当然还有一个别名)。但是在我开始之前,很高兴知道它是否会起作用。请问您对此有何想法?
WinEunuuchs2Unix

我不同意/media从中删除的说法PRUNEPATHS。是的,它有您提到的问题,但将其完全排除甚至更糟-您永远都不会在这些驱动器上找到文件。这就像要切断手指,以免烹饪时手指被灼伤(除非有另外一个明显的解决方案,我没有看到)。
Sridhar Sarnobat

2

updatedb.conf/mediaPRUNEPATHS。您应该将其删除,因为您的外部驱动器似乎已安装在此处。


2

这些是进一步的点缀,可以添加到Lesmana的答案中

[1]点缀:我可以建议添加-i以确保搜索到的查询的大小写不再是问题:因此请添加到.bashrc >>

别名locate-external ='locate -d〜/ .externalharddisk.db:-i '

[2]关于两个数据库更新;主高清中的一个,外部高清中的一个;可能值得在.bashrc中再添加一个条目

别名updateALL ='sudo已更新b &&已更新b -l 0 -o〜/ .externalharddisk.db -U / media / externalharddisk'

然后只需updateALL在终端中运行即可一次更新两个数据库

PS:当然. ~/.bashrc,一旦将新行保存在.bashrcPS²中,当然不要忘记将其固定起来
:当然externalharddisk,以上所有行也都用您的外部HD名称(例如/ media / YOURHDNAME)替换了

*PS³,您当然可以合并更新并在.bashrc中定位

别名LO ='sudo Updatedb && Updatedb -l 0 -o〜/ .externalharddisk.db -U / media / externalharddisk; 找到-d〜/ .externalharddisk.db:-i '

因此,现在您需要更新和搜索的只是在LO后面输入您要搜索的字词


+1进行序列更新,然后定位
LMSingh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.