나는 호스트 파일, resolv.conf 파일 및 새 DNS 항목을 캐시하는 방법을 찾고 있는데 가장 가깝지만 덜 효율적인 방법은 nscd입니다. Nscd는 호스트 파일에 있는 DNS 요청을 기꺼이 캐시하지만, 요청된 서버가 호스트 파일에 없으면 호스트 파일을 읽습니다.
하드 드라이브를 항상 실행 상태로 두지 않음으로써 전력을 절약하려고 노력하고 있지만 동일한 사이트의 새 페이지를 방문할 때마다 하드 드라이브가 회전하여 호스트 파일을 읽어 도메인을 확인합니다.
호스트 및 resolv.conf 파일을 메모리에 저장한 다음 새 도메인이 요청될 때 호스트 파일을 검색하기 위해 디스크 액세스를 요구하는 대신 호스트.conf가 들어 있는 메모리를 스캔할 수 있는 방법이 있습니까?
답변1
메모리에 유지되는 tmpfs를 만들 수 있습니다. 나는 귀하의 특정 상황에 그것을 사용한 적이 없지만 왜 그것이 작동하지 않는지 정말로 이해하지 못합니다.
https://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs
/mnt/ramdisk에 ramdisk를 설치한다고 가정합니다(원래 호스트 파일의 내용이 포함된 ramdisk_hosts_file이라는 파일이 있습니다).
mount -o ro,bind /mnt/ramdisk/ramdisk_hosts_file /etc/hosts
아직 테스트되지 않았지만 RAM FS의 파일을 호스트 파일에 직접 마운트해야 합니다.
물론 모든 편집 내용은 재부팅 시 새로 고쳐지므로 시작 및 종료 시 콘텐츠를 복사하도록 설정해야 할 수도 있습니다.
이론적으로는 이와 같은 것이 작동해야 합니다. 분명히 이것을 실험실 설정으로 테스트하고 싶고 뭔가가 깨질 수 있습니다 :)
관심이 있어서 시간이 더 나면 비슷한 것을 만들어 보도록 하겠습니다.
답변2
그러나 요청한 서버가 호스트 파일에 없으면 호스트 파일을 읽습니다.
호스트 파일이 DNS보다 우선합니까? 살펴보세요 /etc/nsswitch.conf
. 다음과 유사할 수 있습니다.
hosts: local, bind
즉, 시스템에 알려지지 않은 호스트 이름이 발생하면 /etc/hosts
파일을 먼저 참조하고, 발견되지 않으면 DNS 쿼리가 실행됩니다. 그것은 그것을 설명합니다.
이 줄을 다음으로 바꾸면 프로세스 순서를 변경할 수 있습니다.
hosts: bind, local
즉, 알 수 없는 호스트 이름을 확인하려면 DNS에 문의하고 빈 조회를 받을 경우에만 요청하세요 /etc/hosts
.