ไม่สามารถสร้างไฟล์บนระบบไฟล์ XFS ขนาดใหญ่


24

เรามีเซิร์ฟเวอร์ Linux ที่มีระบบไฟล์ 4 TB ซึ่งใช้ในการจัดเก็บคลังข้อมูลการโค่นล้ม มีที่เก็บหลายแห่งซึ่งหลายแห่งใช้งานมาหลายปีแล้ว

เดิมทีดิสก์นั้นมีขนาดประมาณ 1 TB แต่เราเริ่มใช้พื้นที่ไม่เพียงพอและเพิ่มเป็น 4 TB เมื่อประมาณหนึ่งปีที่แล้ว ตอนนี้ผู้คนกำลังรายงานว่าไม่สามารถเช็คอินไฟล์ไปยัง repos ของพวกเขาได้ No space left on deviceเกิดข้อผิดพลาดคือ

ดิสก์นั้นมีความจุประมาณ 1.5 TB และยังรายงานว่ามี inodes ฟรีและยังไม่สามารถสร้างไฟล์ใหม่ได้ ยังคงเป็นไปได้ที่จะอัปเดตไฟล์เก่าและที่เก็บบางส่วนจะได้รับการปรับปรุงเป็นระยะ แต่ที่เก็บเดียวกันอาจล้มเหลวในความพยายามครั้งต่อไป

คำตอบ:


44

สาเหตุของปัญหา

ปัญหาเกิดขึ้นกับวิธีการที่ 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 สองสามคนแรกเพื่อดูว่าอันไหนเต็มแล้วก็เคลียร์

  1. ตรวจสอบพื้นที่ว่างในสี่ AG แรก:
สำหรับ ag ใน `seq 0 1 5`; ทำเสียงสะท้อนที่ว่างใน AG $ ag; xfs_db -r -c "freesp -s -a $ ag" / dev / CACHE / CACHE; grep "รวมฟรี"; เสร็จแล้ว

หากพื้นที่ว่างทั้งหมดในกลุ่มใด ๆ น้อยกว่า 40 คุณจะไม่สามารถสร้างไฟล์ใหม่ได้

  1. ค้นหาไฟล์ใน 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 และเป็นไปได้อีกครั้งในการสร้างไฟล์ใหม่

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