เหตุใดโปรแกรม `updatedb` จึงทำงานเร็ว


22

โดยปกติเมื่อฉันมีโปรแกรมที่ทำการสแกนดิสก์เต็มรูปแบบและไปยังไฟล์ทั้งหมดในระบบพวกเขาใช้เวลานานในการรัน เพราะเหตุใด updatedb จึงทำงานเร็วกว่าการเปรียบเทียบ

คำตอบ:


22

คำตอบขึ้นอยู่กับรุ่นของlocateคุณใช้ แต่มีโอกาสที่ยุติธรรมมันmlocateซึ่งupdatedbวิ่งได้อย่างรวดเร็วโดยการหลีกเลี่ยงการทำสแกนดิสก์เต็มรูปแบบ:

mlocate คือการนำไปใช้งาน find / updatedb เครื่องหมาย 'm' หมายถึง "การผสาน": updatedb จะนำฐานข้อมูลที่มีอยู่กลับมาใช้ใหม่เพื่อหลีกเลี่ยงการอ่านซ้ำส่วนใหญ่ของระบบไฟล์ซึ่งทำให้การ updateb เร็วขึ้นและไม่ทำให้ระบบแคชมากเท่าที่ควร

(ฐานข้อมูลจะจัดเก็บการประทับเวลาของแต่ละไดเรกทอรีctimeหรือmtimeสิ่งที่ใหม่กว่า)

เช่นเดียวกับการใช้งานมากที่สุดของupdatedb, mlocateนอกจากนี้ยังจะข้ามระบบไฟล์และเส้นทางที่มีการกำหนดค่าที่จะไม่สนใจ ตามปกติแล้วไม่มีในmlocateกรณีของ แต่ปกติแล้วการแจกแจงจะให้พื้นฐานupdatedb.confที่ละเว้นระบบไฟล์ในเครือข่ายระบบไฟล์เสมือนเป็นต้น (ดูที่ไฟล์กำหนดค่าของ Debianตัวอย่างเช่นนี่เป็นมาตรฐานการปฏิบัติใน Debian ดังนั้น GNU จึงupdatedbถูกกำหนดค่าไว้ในทำนองเดียวกัน )


คำถามและคำตอบที่ดีอย่างเป็นธรรมไม่ทราบว่ามีการสแกน "differencial"
Rui F Ribeiro

1
ขอบคุณ! ฉันไม่เคยสังเกตเห็นว่าการแก้ไขไฟล์ยังเปลี่ยน ctime และ mtime ของไดเรกทอรีหลักทั้งหมดด้วย
hugomg

4
@hugomg ฉันไม่คิดว่ามันจะจริง ควรเปลี่ยนเฉพาะmtimeของพาเรนต์ปัจจุบันเท่านั้น
Kusalananda

ดังนั้นถ้าฉันเข้าใจถูกต้องmlocateใส่ใจctimeและmtimeบอกเป็นนัยว่าใส่ใจว่ารายการของไดเรกทอรียังคงเหมือนเดิม (ไม่มีไฟล์ที่ถูกลบหรือเพิ่ม) ซึ่งหมายความว่ามันไม่สนใจไฟล์จริง ๆ ด้วยตนเอง ถูกต้องไหม
Sergiy Kolodyazhnyy

@Sergiy: แน่นอน ไม่ใช่locate grep -Rไม่อ่านเนื้อหาไฟล์
เควิน

9

นอกเหนือจากการตรวจสอบเวลาปรับเปลี่ยนแล้วmlocateยังละเว้นระบบย่อยบางอย่างของระบบไฟล์ที่มีไฟล์จำนวนมากที่ไม่น่าสนใจหรือซ้ำซ้อนตามที่ระบุใน /etc/updatedb.conf (และอธิบายในman updatedb.conf ):

  • ผูกติด
  • ระบบไฟล์บางชนิด (9p, afs, bdev, ฯลฯ )
  • ฐานข้อมูลที่เก็บ VCS (.git, .hg ฯลฯ )
  • บางไดเร็กทอรีที่ฮาร์ดโค้ด (/ media, / tmp, / var / spool / cups เป็นต้น)

นี่ไม่ใช่กรณีเริ่มต้นดังนั้นพฤติกรรมพื้นฐานขึ้นอยู่กับการกระจายที่ใช้ ( updatedbการใช้งานอื่น ๆยังสนับสนุนการยกเว้นที่กำหนดค่าไว้)
Stephen Kitt

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