永久缓存 /etc/hosts 和 /etc/resolve.conf

永久缓存 /etc/hosts 和 /etc/resolve.conf

我正在寻找一种方法来缓存主机文件、resolv.conf 文件和新的 DNS 条目,而最接近但不太有效的方法是 nscd。 Nscd 会愉快地缓存主机文件中存在的 DNS 请求,但是当请求的服务器不在主机文件中时,主机文件将被读取。

我试图通过不让硬盘一直运行来节省电量,但​​每次我访问同一站点上的新页面时,硬盘都会旋转以读取主机文件以检查域。

有什么方法可以将主机和resolv.conf文件存储在内存中,然后当请求新域时,扫描保存hosts.conf的内存,而不是仅仅为了搜索主机文件而需要磁盘访问?

答案1

您可以创建一个保存在内存中的 tmpfs。我从未将它用于您的具体情况,但我真的不明白为什么它不起作用。

https://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs

假设我们将 ramdisk 安装到 /mnt/ramdisk (其中有一个名为 ramdisk_hosts_file 的文件,其中包含原始主机文件的内容。)

mount -o ro,bind /mnt/ramdisk/ramdisk_hosts_file /etc/hosts

尚未测试,但这应该将 RAM FS 中的文件直接挂载到主机文件上。

当然,任何编辑都会在重新启动时刷新,因此您可能需要设置一些内容来在启动和关闭时复制内容。

理论上这样的东西应该有效。显然你想测试这是一个实验室设置,可能会破坏一些东西:)

出于兴趣,当我有更多时间时,我会尝试创建类似的东西。

答案2

但是当请求的服务器不在主机文件中时,会读取主机文件

难道hosts文件优先于DNS吗?看一下/etc/nsswitch.conf,它可能看起来类似于:

hosts: local, bind

这意味着,如果出现系统不知道的主机名,/etc/hosts则会首先查阅该文件,但如果找不到它,就会发出 DNS 查询。这样就可以解释了。

您可以通过将该行替换为以下内容来重新排序该过程:

hosts: bind, local

这意味着:如果要解析未知的主机名,请询问 DNS,并且只有 ifit 出现空白查阅/etc/hosts

相关内容