ขีด จำกัด ขนาด / etc / hosts คืออะไร


44

ฉันจะกำหนดหรือกำหนดขนาด จำกัด ได้/etc/hostsอย่างไร สามารถมีได้กี่บรรทัด


64
... ฉันคิดว่าในจุดที่นี้จะกลายเป็นความกังวลที่เกิดขึ้นจริงมากกว่าความอยากรู้ทางวิชาการที่คุณได้ไกลผ่านจุดที่มันจะฉลาดในการตั้งค่าเซิร์ฟเวอร์ DNS เอกชนในแง่ของประสิทธิภาพและการบำรุงรักษา
Shadur

5
ฉันประหลาดใจที่คุณถาม เหตุใดคุณจึงคาดหวังว่าขนาด จำกัด ที่แม่นยำและยากจะ จำกัด ขนาดของไฟล์การกำหนดค่า
Basile Starynkevitch

3
@BasileStarynkevitch ฉันถามเพราะไฟล์โฮสต์ขนาด ~ 2 MB ไม่ทำงานกับเราเตอร์ของฉัน แต่ปัญหาคือฉันไม่ได้ถอนการติดตั้ง dnsmasq เพื่ออ่านไฟล์โฮสต์อีกครั้ง
Geremia

2
@Geremia ไฟล์โฮสต์ของฉันคือ 500M, 15,000+ รายการ, ไม่มีปัญหา เป็นการดีที่สุดที่จะระบุสาเหตุของปัญหาของคุณและแก้ปัญหาก่อน
bsd

3
คุณใช้ไฟล์โฮสต์เพื่อบล็อกที่อยู่ IP หรือไม่ ถ้าเป็นเช่นนั้นคุณควรใช้ iptables กับ ipset การใช้ iptables เพียงอย่างเดียวจะทำให้เกิดประสิทธิภาพการทำงานที่สำคัญอย่างไรก็ตามด้วย ipset รายการเกือบ 500,000 ips มีผลกระทบเล็กน้อย
cybernard

คำตอบ:


57

ผลกระทบเชิงปัญหารวมถึงการแก้ปัญหาชื่อโฮสต์ช้า (เว้นแต่ว่าระบบปฏิบัติการจะแปลงรายการเชิงเส้นเป็นโครงสร้างที่เร็วกว่าการค้นหา?) และความเป็นไปได้ที่จะเกิดปฏิสัมพันธ์ที่น่าประหลาดใจกับการtabทำเชลล์ให้เสร็จสมบูรณ์ก่อนถึงขนาดไฟล์ที่มีความหมาย

ตัวอย่างเช่น! ถ้าหนึ่งในนั้นใส่ 500,000 รายการโฮสต์/etc/hosts

# perl -E 'for (1..500000) { say "127.0.0.10 $_.science" }' >> /etc/hosts

สำหรับวิทยาศาสตร์แล้วความtabสมบูรณ์ของชื่อโฮสต์เริ่มต้นใน ZSH ใช้เวลาประมาณ 25 วินาทีในระบบของฉันเพื่อส่งคืนพรอมต์การดำเนินการเสร็จสมบูรณ์


21

ฉันไม่คิดว่ามันมีขนาด จำกัด ในแง่ของจำนวนบรรทัด

ก่อนที่ DNS (ซึ่งถูกนำมาใช้ในปี 1985) มันเป็นไฟล์ที่ทำหน้าที่เป็นวิธีเดียวในการทำการค้นหาชื่อโฮสต์ดังนั้นฉันจึงเชื่อว่านี่หมายความว่าไฟล์นั้นควรจะมีรายการนับพันหรืออย่างน้อยนับร้อยรายการ สามารถรองรับโหนดอินเทอร์เน็ต pre-1985 ที่เชื่อมต่อได้ดีที่สุด

นี่คือตัวอย่างจากปี 1985 (รูปแบบที่มีการเปลี่ยนแปลงบ้าง): http://jim.rees.org/apollo-archive/hosts.txt ไฟล์นี้มี 1680 บรรทัดซึ่ง 1325 เป็นสายโฮสต์ ส่วนที่เหลืออีก 355 สายว่างเปล่าความคิดเห็นเครือข่ายหรือเกตเวย์1

ข้อ จำกัด ที่แท้จริงที่ฉันพบได้คือในบางระบบแต่ละบรรทัดจะถูก จำกัด ให้น้อยกว่าBUFSIZอักขระ (1024 บนเครื่อง OpenBSD ของฉัน)

หากคุณมีรายการมากกว่าสองสามรายการ/etc/hostsคุณควรพิจารณาตั้งค่าเซิร์ฟเวอร์ชื่อท้องถิ่นแทน แต่นั่นเป็นความเห็นส่วนตัวของฉัน


1 ขอบคุณ Jeff Schaller ที่ขุดสิ่งนี้


ก่อน DNS ฉันไม่คิดว่ามันเป็นเรื่องธรรมดาที่จะแปลงตารางโฮสต์อินเทอร์เน็ตเต็ม/etc/hostsรูปแบบเพื่อจัดรูปแบบ ระบบ Unix ส่วนใหญ่ไม่ได้อยู่บนอินเทอร์เน็ตและแม้ว่าจะเป็นเครื่อง แต่ก็ไม่จำเป็นต้องมีโต๊ะโฮสต์ที่สมบูรณ์เพียงแค่หยิบเครื่องที่ต้องการคุยด้วย ฉันจะแปลกใจถ้ามีเครื่องจักรจำนวนมากที่มีมากกว่า 100 รายการ
Barmar

13

ฉันจะกำหนดขนาด จำกัด ของ / etc / hosts ได้อย่างไร

เป็นไฟล์ปกติดังนั้นขีด จำกัด จะสอดคล้องกับขีด จำกัด ของระบบไฟล์พื้นฐาน (ซึ่งตัวมันเองจะถูก จำกัด ด้วยจำนวนดิสก์ที่อยู่ด้านหลัง) ลบด้วยพื้นที่ที่ใช้โดยไฟล์อื่น ๆ ในระบบไฟล์เดียวกัน (อาจเป็นรูท ( /)):

  • ext2 / 3: 2 TiB
  • ext4: 16 TiB (พร้อมขนาดบล็อก 4KiB เริ่มต้น)
  • xfs: 500 TiB

ฉันจะกำหนดขนาด จำกัด ของ / etc / hosts ได้อย่างไร

เนื่องจากเป็นไฟล์ที่แก้ไขด้วยตนเองเพียงด้วยตนเอง:

sed -i '100,$d' /etc/hosts

(เพื่อลบบรรทัด 100 และเกิน)


3
เป็นจริงในหลักการ แต่ข้อ จำกัด ของระบบไฟล์ (เช่นเทราไบต์) นั้นแทบไม่เกี่ยวข้องเลย
Basile Starynkevitch

11

ขนาด จำกัด ใช้เฉพาะเมื่อจัดสรรบัฟเฟอร์คงที่ gethostbyname(3)ซึ่งแยกวิเคราะห์รายการใน/etc/hostsไม่ได้จัดสรรบัฟเฟอร์คงที่ - และไม่เคยมี BSD 4.3 ของอัลกอริทึมรุ่น 1983 แสดงการเปิดไฟล์ขณะแยกวิเคราะห์รูปแบบไฟล์แบบปิด:

sethostent(0);
while (p = gethostent()) {
    if (strcmp(p->h_name, name) == 0)
        break;
    for (cp = p->h_aliases; *cp != 0; cp++)
        if (strcmp(*cp, name) == 0)
            goto found;
}
found:
endhostent();

การใช้งานที่ทันสมัยรักษามรดกนี้ในทุกสิ่งที่จำเป็น

อย่างไรก็ตามภายใน*hostentตระกูลของฟังก์ชั่นจัดเก็บตัวชี้ไฟล์ไปยังบรรทัดปัจจุบันในไฟล์ sethostentเปิดไฟล์และตั้งตำแหน่งตัวชี้ไฟล์ gethostentรับข้อมูลและเลื่อนตัวชี้ไป endhostentปิดตัวชี้ไฟล์ ไลบรารี GNU C มีการอ้างอิงอย่างละเอียดเกี่ยวกับฟังก์ชันเหล่านี้

ตามที่คุณอาจคาดเดาจากการนำไปใช้รายการที่เกิดขึ้นก่อนหน้านี้ในการแก้ไขไฟล์จะเร็วขึ้น หากไฟล์โฮสต์ของคุณมีขนาดใหญ่สิ่งนี้จะเข้ามาเล่น

ดังนั้นไม่ว่าไฟล์จะใหญ่แค่ไหน OS ก็จะใช้งานมัน อย่างไรก็ตามในที่สุดคุณจะถึงขีด จำกัด ของระบบไฟล์ (ตามคำตอบของ Jeff Schaller ) คุณมีขีด จำกัด ขนาดบรรทัดสูงสุด (ต่อคำตอบของ Kusalananda ) แต่ในที่สุดคุณสามารถทำให้มันใหญ่เท่าที่คุณต้องการ แต่ได้โปรดอย่า


2
การใช้ glibc และ linux นั้นไม่ได้ตรงไปตรงมาอย่างน่าเสียดาย ถ้าคุณเรียกใช้ gethostbyname และระบบนั้นถูกติดตั้งตามค่าเริ่มต้น (ในหลาย ๆ ระบบ) ดังนั้นมันจะแทนการอ่าน / etc / host เรียก nscd ฉันไม่รู้ว่า nscd จะแคชเฉพาะการเข้าชมในไฟล์หรือพยายามแคชโดยรวม ในกรณีต่อมาคุณจะมีข้อ จำกัด ram สำหรับขนาดไฟล์ (สมมติว่าการกำหนดค่า nscd อนุญาตให้มีรายการจำนวนมาก)
PlasmaHH

1
รุ่น 4.3BSD เป็นที่นี่ สนับสนุนเวอร์ชัน / etc / hosts dbm-hashed IIRC, dbm กำหนดขีด จำกัด ขนาดบางอย่างที่อาจทำให้ความพยายามในการสร้างฐานข้อมูลแฮชล้มเหลว
Mark Plotnick

2

... ฉันใช้สมองและชีวิตของฉันฉันไม่สามารถนึกถึงสถานการณ์หรือสถานการณ์ที่คุณจะเข้าใกล้ปัญหาขีด จำกัด ขนาดใด ๆ ใน/etc/hosts- คุณจะพบกับปัญหาในทางปฏิบัติเช่นความรุนแรง ประสิทธิภาพการทำงานที่ถูกเรียกไปยังgetaddrinfo()ตระกูลของการเรียกระบบที่ทุกคนต้องปรึกษาไฟล์ก่อนที่จะตัดสินใจว่าจะส่งเคียวรี DNS ออกไปเพื่อพูดว่าไม่มีปัญหาใด ๆ ในการรักษาไฟล์ข้อความแบบแบนขนาดนั้น

ฉันสงสัยว่าสิ่งที่เรามีที่นี่คือความล้มเหลวในการสื่อสารในระดับที่สูงขึ้น คุณกำลังพยายามแก้ไขปัญหาอะไรด้วย/etc/hostsไฟล์ขนาดมหึมา? ฉันเกือบจะแน่ใจว่ามีทางออกที่ดีกว่านี้


8
บางคนใช้hostsไฟล์เพื่อขึ้นบัญชีดำโฆษณา / มัลแวร์ / การติดตาม / ฯลฯ มีรายการที่รวบรวมไว้บนอินเทอร์เน็ตรายการที่ฉันใช้คือ 41k บรรทัดและ 1.1MB ในขนาด
Bert

มันน่าจะดีกว่าสำหรับการใช้งานแบบdnsmasqนั้น - ดูเช่นdnsgate (ซึ่งฉันไม่ได้ลอง)
reinierpost

เหมืองมี 1.7MB พร้อม 57k บรรทัด คุณสามารถรับ/etc/hostsไฟล์ขนาดใหญ่ได้จากhostsfile.org
styrofoam fly

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.