预缓存文件系统的文件列表

预缓存文件系统的文件列表

我想知道文件和目录列表以什么形式存储在 ext4 文件系统上的位置和形式。问题是,每当我尝试通过 Nautilus、Krusader 或任何文件管理器启动后第一次访问某个目录时,它的显示速度可能会非常慢。由于我看到它访问我的硬盘,我认为这是由硬盘速度慢引起的。因此,我正在考虑在启动时预先缓存系统的整个文件列表并将其存储在 RAM 缓存中,这样它就不会在系统运行时被卸载(在我的例子中是 Ubuntu 14.04)。

是否可以预先缓存并在缓存中保留整个文件系统的文件和目录列表?

我认为可以用 vmtouch 来完成,但我只是不知道目标是什么。

答案1

它实际上是在扫描文件列表,速度很慢。像这样的事情应该做:

find /home >/dev/null &

也就是说,它会将文件预先缓存在/home.但它会让你的磁盘忙碌一段时间,它会缓存有趣和不有趣的子目录,并且一些子目录在你真正需要它们之前可能仍然会从缓存中清除。这可能不值得。

答案2

为了向您显示目录,这些文件管理器至少需要扫描目录中的文件名列表以及文件类型和其他元数据。这些都是同样的调用ls -l。此外,某些文件管理器可能会检查文件的内容,以便为您提供有关其中内容的更准确的信息,例如实用file程序。他们还可能为某些文件类型(例如图像)构建预览,并可能尝试从捆绑了图标的几种文件类型中提取图标。

如果您发现这太慢,请尝试将它们配置为显示更少的信息。

要预读文件名和元数据,请运行

find ~ -type f >/dev/null

要预读文件的开头,请运行

find ~ -exec file {} + >/dev/null

我不推荐这个。这将花费很长时间,并在内存中存储大量永远不会使用的信息(因为您今天不会访问所有文件)。尝试事后猜测操作系统缓存算法通常会适得其反。

相关内容