สาเหตุของปัญหา
ปัญหาเกิดขึ้นกับวิธีการที่ XFS จัดสรร inodes ไม่เหมือนกับระบบไฟล์ส่วนใหญ่การจัดสรรเกิดขึ้นแบบไดนามิกเมื่อมีการสร้างไฟล์ใหม่ อย่างไรก็ตามยกเว้นว่าคุณระบุเป็นอย่างอื่น inodes จะถูก จำกัด ค่า 32- บิตซึ่งหมายความว่าพวกเขาจะต้องพอดีภายในเทราไบต์แรกของการจัดเก็บในระบบไฟล์ ดังนั้นถ้าคุณเติมเทราไบต์ตัวแรกจนเต็มแล้วจึงขยายดิสก์คุณจะยังไม่สามารถสร้างไฟล์ใหม่ได้เนื่องจาก inodes ไม่สามารถสร้างได้ในพื้นที่ใหม่
โซลูชันที่ 1 - เปลี่ยนตัวเลือกการเมาท์
ทางออกหนึ่งคือการเมานต์ระบบไฟล์อีกครั้งด้วยตัวเลือกการเมาinode64
ท์ อย่างไรก็ตามแอปพลิเคชั่นบางตัวจะทำงานผิดปกติในเรื่องนี้ (เช่น MySQL) และ NFS จะสับสนมาก ดังนั้นหากคุณไม่แน่ใจว่าระบบของคุณจะทำงานกับตัวเลือกนี้คุณสามารถไปยังตัวเลือกถัดไป
โซลูชันที่ 2 - ย้ายไฟล์
วิธีที่สองคือการค้นหาไฟล์บางไฟล์ที่จัดเก็บอยู่ในเทราไบต์แรกและย้ายไปยังพื้นที่อื่นของระบบไฟล์
ย้ายตามอายุ
ในกรณีของเรานี่เป็นเรื่องง่าย - ระบบไฟล์ใช้งานมานานหลายปีดังนั้นเราสามารถหาไฟล์ที่เก่าที่สุดแล้วย้ายออกจากระบบไฟล์แล้วย้ายกลับ สิ่งนี้ทำได้ง่ายโดยใช้การค้นหา:
find /extra -mindepth 3 -maxdepth 3 -type d -mtime +730 -exec du -sh {} \; > /tmp/olddirs.txt
ให้รายการที่มีขนาดและชื่อไดเรกทอรีสำหรับไดเรกทอรีทั้งหมดที่อยู่ต่ำกว่า 3 ระดับตรงกับจุดเมานท์ซึ่งเก่ากว่า 2 ปี จากนั้นเราสามารถเรียงลำดับรายการเพื่อค้นหาไดเรกทอรีที่ใหญ่ที่สุดและใช้mv
เพื่อย้ายออกไปยังระบบไฟล์อื่นและกลับมาอีกครั้ง
ย้ายตามกลุ่มการจัดสรร
หากคุณไม่สามารถไปตามอายุได้เช่นเมื่อมีการสร้างไฟล์จำนวนมากในเวลาเดียวกันคุณยังสามารถค้นหาไฟล์ที่เหมาะสมที่จะย้ายได้ แต่ใช้เวลานานขึ้น
XFS มีกลุ่มการจัดสรร (aka เอจี s), เริ่มต้นด้วย 0 xfs_info /path/to/mountpoint
คุณสามารถตรวจสอบบล็อกขนาดและจำนวนของบล็อกของแต่ละแบงก์จะคิดออกซึ่งกลุ่มที่อยู่บนเทราไบต์ครั้งแรกที่ใช้ หรือคุณสามารถตรวจสอบ AGs สองสามคนแรกเพื่อดูว่าอันไหนเต็มแล้วก็เคลียร์
- ตรวจสอบพื้นที่ว่างในสี่ AG แรก:
สำหรับ ag ใน `seq 0 1 5`; ทำเสียงสะท้อนที่ว่างใน AG $ ag; xfs_db -r -c "freesp -s -a $ ag" / dev / CACHE / CACHE; grep "รวมฟรี"; เสร็จแล้ว
หากพื้นที่ว่างทั้งหมดในกลุ่มใด ๆ น้อยกว่า 40 คุณจะไม่สามารถสร้างไฟล์ใหม่ได้
- ค้นหาไฟล์ใน AG นั้น
ต้องการการตรวจสอบข้อมูลเมตาสำหรับแต่ละไฟล์บนระบบไฟล์ ใช้เวลานาน ... นี่คือข้อเสนอแนะ:
ค้นหา / พิเศษ -mindepth 3 -type f -exec xfs_bmap -v {} \; > /tmp/agfilelist.txt
จากนั้นคุณสามารถ grep สำหรับ" 0 "
(นั่นคือช่องว่าง, ศูนย์และอีกช่องว่าง) เพื่อค้นหาไฟล์ทั้งหมดใน AG 0, grep สำหรับ" 1 "
การค้นหาไฟล์ใน AG 1, ฯลฯ ... เริ่มต้นด้วย AG 0, ย้ายไฟล์ที่ใหญ่ที่สุดออกไป (โดยใช้mv
ไม่ใช่cp
!) แล้วกลับมาอีกครั้ง ทำซ้ำจนกว่าคุณจะมีพื้นที่ว่างพอสมควร
ผล
เมื่อเราต้องการย้ายไฟล์ออกจาก / เพิ่มเติมเพียงพอแล้วกลับมาอีกครั้งมีพื้นที่มากมายใน AG 0 และเป็นไปได้อีกครั้งในการสร้างไฟล์ใหม่