我的 debian(squeeze)服务器上的 updatedb 数据库非常慢。
- 数据库在哪里
- 我如何查看其内容并找出其中是否有一些路径包含无用的内容,我可以将其添加到修剪路径中?
- 我怎样才能修剪所有包含
*/.git/*
和*/.svn/*
类似的路径? - 为什么我定义的文件没有被排除
PRUNEPATHS
?
我的/etc/updatedb.conf
样子是这样的:
...
# filesystems which are pruned from updatedb database
PRUNEFS="NFS nfs nfs4 afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf"
export PRUNEFS
# paths which are pruned from updatedb database
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs /media /var/backups/rsnapshot /var/mod_pagespeed/"
...
编辑:
- 定位数据库位于
/var/cache/locate/locatedb
locate /
将列出数据库中的所有文件和目录(我通过将其导出到文件中来查看结果:locate />/tmp/locatedb.txt
,下载此 txt 文件并发现大量无用的东西)
答案1
您可能正在使用 GNU findutils 版本的locate,它不支持PRUNENAMES选项。安装mlocate将提供以下配置选项:
apt-get remove locate
mv /etc/updatedb.conf /etc/updatedb.conf-GNU.old
apt-get install mlocate
现在使用 mlocate 包,您可以编辑或创建 /etc/updatedb.conf 并添加以下行:
PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /var/cache /media /usr/tmp /var/tmp /sfs /afs /amd /alex /var/backups/rsnapshot /var/mod_pagespeed"
# the paths in `PRUNEPATHS` must be without trailing slashes
然后使用以下命令实现数据库:
updatedb
您可能可以删除庞大的旧定位数据库:
rm /var/cache/locate/locatedb
(mlocate 数据库存储在/var/lib/mlocate/mlocate.db
)
查看https://apps.ubuntu.com/cat/applications/mlocate/了解有关该软件包的更多信息。
(我花了大量的时间尝试解决类似的问题!)
答案2
PRUNENAMES
按照说明使用man updatedb.conf
不应被 updatedb(8) 扫描的以空格分隔的目录名称列表(不含路径)。默认情况下,不会跳过任何目录名称。
指某东西的用途
PRUNENAMES=".git .hg .svn"
应该可以解决问题(上面是 Fedora 18 上的标准值)。
答案3
locate /
将列出数据库中的所有文件和目录。
答案4
为什么文件没有被排除,我在 PRUNEPATHS 中定义
尽管 OP 的问题最终是版本/PRUNENAMES,但作为通过locate db输出进行拖钓的替代/补充,使用--debug-pruning标志手动运行updatedb会将各个修剪决策打印到stderr,这对于追踪修剪问题非常有用
例如将其粘贴到文件中(在本例中以 root 身份):
updatedb --debug-pruning > ~/updatedb_debug.log 2>&1 &
示例输出:
Matching bind_mount_paths:
...done
Checking whether filesystem `/boot' is excluded:
`/', type `rootfs'
`/proc', type `proc'
=> type matches, dir `/proc'
`/run', type `tmpfs'
...
Checking whether filesystem `/mnt/windows' is excluded:
Checking whether filesystem `/proc' is excluded:
Checking whether filesystem `/run' is excluded:
...
Skipping `/dev/mqueue': in prunefs
Skipping `/dev/pts': in prunefs
ETC
(正在使用 mlocate)