为什么初始化mlocate数据库需要这么长时间?

在尝试在Windows 10上的WSL2(Ubuntu 20.04)上安装xubuntu-desktop时,遇到了问题。
在等待很长时间后(整夜都没动),它卡在了“Initializing mlocate database; this may take some time...”这一步。
我关闭了该进程,并运行了以下命令:
sudo dpkg --configure -a
但它又卡在了同一个地方。
我的问题是:
1. 如何解决这个问题? 2. 为什么它需要这么长时间?
非常感谢您提前的帮助!

1不正常。在慢速硬盘上可能需要几秒钟,而在固态硬盘上可能只需几分之一秒。当然,这是在Windows 10上,所以可能发生了一些特定的情况。你可能希望在标题中加入这是在Windows 10上的信息。 - vanadium
好的,谢谢你的建议 @vanadium - Aditya Patnaik
updatedb命令(这就是正在发生的事情)必须遍历整个文件系统以获取每个文件的名称。如果wsl2/Windows10对“整个文件系统”有一些奇怪的想法,updatedb可能会感到困惑。阅读man updatedb,您可以使用选项来控制扫描的内容。一旦弄清楚了,手动运行sudo updatedb ....。完成初始创建后,更新应该更快。 - waltinator
谢谢@waltinator,我会试一试。 - Aditya Patnaik
1@vanadium 一块容量为2Tb且接近满的硬盘大约需要6天的时间。 - Rinzwind
2我也有这个问题,我正在使用与你相同的Ubuntu版本、WSL和Windows版本。 - Yeppii
4个回答

在Google上搜索这个问题,我找到了this gist,其中提到了以下内容:

[...] 在/etc/updatedb.conf中的PRUNEPATHS中添加/mnt,以避免索引Windows文件。

这与this previous answer有关:

[...] 我认为mlocate安装花费了很长时间并卡在60%是因为它也在索引Windows文件。

当我按照那个gist的指示操作时,它对我来说完美地解决了问题。

1同意这几乎肯定是问题所在,并且是一个很好的解决方案。谢谢你在这里发布它。依我之见,如果楼主有机会尝试,这应该成为被接受的答案。 - NotTheDr01ds
1这对我也起作用。 - PranshuKhandal
1在Ubuntu WSL中,将/mnt添加到PRUNEPATHS可以避免对Windows文件进行索引,这对我起了作用。 - Muneeb Ahmad Khurram
1在Windows 11上的WSL 2上对我起作用。谢谢。在安装过程中(apt install plocate),我遇到了困难,卡在索引步骤上。我取消了它,幸运的是/etc/updatedb.conf文件已经存在。我编辑了那个文件,然后再次尝试安装。这次安装很快就完成了。 - Ryan Stille

我在Windows 10上通过Microsoft Store安装了WSL2上的Ubuntu LTS 20。它没有预装locate,所以我自己安装了。在安装过程中,当第一次更新数据库时,它在60%处卡住了很长时间。我以为出了问题,于是谷歌了一下(找到了这个帖子)。
结果最终安装完成了,大约花了15分钟。当我第一次使用该命令时,我感到惊讶:它实际上将我的整个硬盘都解析到了它的数据库中,包括所有的Windows文件,甚至是我在Windows中无法正常访问的东西。
所以我认为mlocate安装过程中卡在60%处时间过长的原因是因为它同时在索引Windows文件。
嗯,如果你等了整整一晚上,那么可能是安装出了真正的问题。我建议在你的WSL上安装另一个发行版,或者至少不要在上面安装locate。

1感谢回答,@wsl2user。实际上,mlocate 依赖于一个由 cronjob 每天重新索引的数据库。WSL 不支持 cron。所以,你可以尝试运行 sudo updatedb.mlocate。这个过程仍然需要一些时间来完成,但会在 /var/lib/mlocate/mlocate.db 中填充数据库。期待能够通过 wsl2 的更新来解决这个问题。 - Aditya Patnaik
Linux给你更广泛的控制权,让你了解发生了什么。"不使用"只是一个非常遥远的选择。 - Augusto

所以,我也遇到了这个问题(在初始化mlocate数据库时卡在60%),可能需要一些时间...然而,没有看到明确的解决方向,我关闭了所有其他应用程序,在Ubuntu上按下了"Enter"键(大约搜索了10分钟左右),结果它说完成了,我重新获得了命令提示符,并且locate命令正常工作了!

如何移除mlocate:
1. 找到可执行文件。 2. 然后找出提供updatedb的软件包。 3. 没有其他程序需要它,所以你可以移除这个软件包。
$ type updatedb updatedb
$ rpm -qf /usr/bin/updatedb 
$ apt-get remove mlocate

另请参阅: https://unix.stackexchange.com/a/113681/47662