我正在寻找一种方法来缓存主机文件、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
。