ระบบไฟล์ ext4 ของฉันสูญเสียประสิทธิภาพเมื่อเติบโต
ฉันมีระบบจัดเก็บไฟล์รูปภาพจำนวนมาก เซิร์ฟเวอร์อิมเมจที่ใช้ Debian นี้จัดเก็บไฟล์อิมเมจโดยแบ่งเป็นโฟลเดอร์ปีบนชุดดิสก์ขนาด 1-2TB พร้อม RAID-1 ของฮาร์ดแวร์ ไฟล์เหล่านี้ถูกจัดเก็บไว้ในโครงสร้างของโฟลเดอร์ปีและโฟลเดอร์ 256 ระดับต่ำกว่านั้น 2 ระดับ
เช่น
ภาพ/2021/2b/0f/193528211006081503835.tif
ไฟล์เหล่านี้ถูกเขียนอย่างต่อเนื่องในระหว่างปีและกระจายอย่างสม่ำเสมอโดยใช้แฮช ดังนั้นแต่ละโฟลเดอร์ leaf/image
มีประมาณ 400 ไฟล์ในช่วงปลายปี
ซึ่งให้ไฟล์ทั้งหมดประมาณ 256 x 256 x 400 = 26 214 400 ไฟล์ต่อปีโฟลเดอร์
การวนซ้ำโครงสร้างโฟลเดอร์นี้ทำงานได้ดีจนถึงประมาณ 20 ล้านไฟล์
อาจใช้เวลาสองสามชั่วโมง เมื่อขยายใหญ่ขึ้น แม้แต่การแสดงรายการโฟลเดอร์ leaf ที่มีไฟล์ 300-400 ไฟล์ก็อาจใช้เวลา 1-4 วินาทีเมื่อไม่ได้อยู่ในแคช ฉันสงสัยว่ามันเกี่ยวข้องกับการแยกส่วนในรายการไดเร็กทอรี
การเข้าถึงแต่ละไฟล์เมื่อคุณรู้ว่าเส้นทางนั้นรวดเร็วเสมอ
และไม่ใช่ปัญหาฮาร์ดแวร์/ดิสก์ ประสิทธิภาพของ raw io นั้นดี อย่างไรก็ตาม ไฟล์จะไม่มีวันถูกลบออกจากโครงสร้างนี้
Defrag ด้วย e4defrag ไม่สร้างความแตกต่าง ฉันคิดว่ามันแค่จัดเรียงไฟล์ไม่ใช่ไดเร็กทอรี fsck.ext4 -D อาจเป็นวิธีแก้ปัญหา แต่เนื่องจากนี่เป็นระบบที่ใช้งานจริง ฉันจึงไม่กระตือรือร้นที่จะยกเลิกการต่อเชื่อมระบบไฟล์แล้วลอง
สิ่งที่ช่วยได้คือการคัดลอกไฟล์ไปยังโฟลเดอร์ชั่วคราวแล้วย้ายกลับไปเขียนทับต้นฉบับ เช่น
cp -a ภาพ/2021/2b/0f/* ภาพ/2021/2b/tmp
mv -f ภาพ/2021/2b/tmp/* ภาพ/2021/2b/0f
หลังจากการดำเนินการนี้ได้รับการกู้คืน (แม้ว่าจะไม่ได้อยู่ในแคช)
หากไฟล์ถูกแยกส่วน ฉันเข้าใจว่าทำไมสิ่งนี้ถึงช่วยได้ แต่มันไม่ได้เป็นไปตาม e4defragการย้ายไฟล์ไปยังโฟลเดอร์ temp และย้อนกลับไม่ได้ช่วยอะไร
บางคนสามารถช่วยฉันเข้าใจสิ่งที่เกิดขึ้นที่นี่