df กล่าวว่าดิสก์เต็ม แต่ไม่ได้


58

บนเซิร์ฟเวอร์เสมือนที่ใช้งาน Ubuntu 10.04 df จะรายงานสิ่งต่อไปนี้:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

นี่ทำให้ฉันสับสนด้วยสองเหตุผล: 1. ) df บอกว่า / dev / sda1 ติดตั้งที่ / มีความจุ 7.4 กิกะไบต์ซึ่งมีการใช้งานเพียง 7.0 กิกะไบต์ แต่มันรายงาน / เต็ม 100 เปอร์เซ็นต์; และ 2. ) ฉันสามารถสร้างไฟล์ใน / เพื่อให้มันมีพื้นที่เหลือชัดเจน

อาจเกี่ยวข้องกันคือไดเรกทอรี / www เป็นลิงก์สัญลักษณ์ไปที่ / home / www ซึ่งอยู่ในพาร์ติชันอื่น (/ dev / sda3 ติดตั้งที่ / home)

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


ขอบคุณทุกคำตอบที่เป็นประโยชน์ ฉันไม่สามารถสร้างไฟล์ในฐานะผู้ใช้ทั่วไปได้ดังนั้นจึงดูเหมือนว่ามันเป็นบัฟเฟอร์ 5 เปอร์เซ็นต์ที่ป้องกันไม่ให้เกิดภัยพิบัติ ตอนนี้ฉันแค่ต้องคิดออกว่าทำไมดิสก์ถึงเต็ม (ฉันกังวลเล็กน้อยว่ามีสิ่งที่เป็นอันตรายอาจเกิดขึ้นได้เพราะไม่มีไฟล์บันทึกใด ๆ ที่ใช้พื้นที่มากและมีซอฟต์แวร์ไม่มากนักติดตั้งแค่เซิร์ฟเวอร์ LAMP ธรรมดา) ...
Chris

3
สถานที่แรกที่ฉันดูคือ / tmp ความเป็นไปได้อีกอย่างก็คือคุณมีไฟล์ที่ถูกลบซึ่งโปรแกรมกำลังรันอยู่ ฉันคิดว่าคุณสามารถเรียกใช้ 'lsof | grep ลบ 'เป็นรูทเพื่อค้นหา
สกอตต์

คำตอบ:


103

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

คุณสามารถตรวจสอบกับ sudo lsof +L1


8
มันแก้ไขความลึกลับของฉัน ฉันลบไฟล์บันทึกขนาดใหญ่ออกจาก uwsgi โดยไม่ต้องเริ่มบริการใหม่ เมื่อสอบถามdf -ahฉันได้ดิสก์เต็ม แต่du -sh /บอกว่าฉันควรมีพื้นที่ว่าง หลังจาก retart uwsgi ฉันมีพื้นที่ว่างเยอะมาก!
Fabio Montefuscolo

ฉันมีบันทึก 40G ที่ติดอยู่ในบริเวณขอบรกและ lsof + L1 ทำให้ฉันมีวิสัยทัศน์ของเอ็กซ์เรย์เพื่อดูว่าเกิดอะไรขึ้น ;-) สิ่งที่ฉันต้องทำก็คือรีสตาร์ทบริการ
PJ Brunet

46

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

หากคุณมี daemons ที่ทำงานในฐานะผู้ใช้ที่ไม่ใช่รูท แต่จำเป็นต้องจัดการไฟล์ในระบบไฟล์นั้นสิ่งต่าง ๆ จะพัง namedร่วมกันหนึ่งภูตดังกล่าวเป็น ntpdอีกประการหนึ่งคือ


1
สำหรับคำถามที่ว่าทำไมดิสก์ของคุณเต็ม 7G นั้นมีพื้นที่ไม่มาก คุณดูเหมือนจะมีทุกอย่างที่ทิ้งไว้ในพาร์ติชัน / ระบบไฟล์ ( /) โดยทั่วไปถือว่าเป็นสิ่งที่ไม่ดี (เพราะถ้ามีบางสิ่งที่ยุ่งเหยิง/เต็มไปหมดและโลกจะจบลง) แต่ลีนุกซ์ลีนุกซ์ยังคงมีอยู่ในการทำเช่นนี้เพราะมัน "ง่ายกว่า" ฉันจะเริ่มต้นด้วยการดู/var(โดยเฉพาะ/var/log) สำหรับ logfiles ขนาดใหญ่ du -hs /(ในฐานะที่เป็น root) จะช่วยให้คุณค้นหาไดเรกทอรีที่ใหญ่ที่สุดและชี้ให้คุณเห็นสิ่งที่จำเป็นต้องทำความสะอาด
voretaq7


17

ระบบไฟล์ Linux ส่วนใหญ่จองพื้นที่ 5% สำหรับใช้เฉพาะผู้ใช้รูท

คุณสามารถเห็นสิ่งนี้ด้วยเช่น

dumpe2fs /dev/sda1 | grep -i reserved

คุณสามารถเปลี่ยนจำนวนเงินที่สงวนได้โดยใช้:

tune2fs -m 0 /dev/sda1

ในกรณีส่วนใหญ่เซิร์ฟเวอร์จะปรากฏขึ้นเพื่อทำงานต่อได้ดี - สมมติว่ากระบวนการทั้งหมดกำลังทำงานเป็น 'root'


8

ฉันมีปัญหานี้และรู้สึกงุนงงกับความจริงที่ว่าการลบไฟล์ขนาดใหญ่ต่าง ๆ ไม่ได้ปรับปรุงสถานการณ์ (ไม่รู้เกี่ยวกับบัฟเฟอร์ 5%) ต่อไปนี้ติดตามเบาะแสบางอย่างที่นี่

จากรากเดินลงไดเรกทอรีที่ใหญ่ที่สุดเปิดเผยโดยทำซ้ำ: -

du -sh */ 

จนกระทั่งฉันมาถึงไดเรกทอรีสำหรับไฟล์บันทึกของเว็บเซิร์ฟเวอร์ซึ่งมีบันทึกขนาดใหญ่มาก

ซึ่งฉันตัดทอนด้วย

:>lighttpd.error.log

ทันใดนั้น df -h ลดเหลือ 48% ที่ใช้!


14
นั่นควรลงท้ายด้วย "... จากนั้นฉันจะตั้งค่าการวนรอบการบันทึก"
hayalci

hayalci: พบว่าการบันทึกถูกชี้ไปที่ไดเรกทอรีที่ไม่ถูกต้อง
zzapper

8

นอกเหนือจากสาเหตุที่แนะนำแล้วในบางกรณีอาจเป็นไปตาม:

  • ดิสก์อื่นถูกเมาท์ "เกิน" โฟลเดอร์ที่มีอยู่ซึ่งเต็มไปด้วยข้อมูล
  • du จะคำนวณขนาดที่ใช้ไปของดิสก์ที่ติดตั้งและ df จะแสดงค่าที่ใช้ไปจริง ๆ
  • วิธีแก้ปัญหา: (เมื่อเป็นไปได้) ให้ unmount ดิสก์ที่ไม่ใช่รูททั้งหมดและตรวจสอบขนาดdu -md 1อีกครั้ง แก้ไขสถานการณ์ด้วยการย้ายโฟลเดอร์ที่ซ่อนไปยังที่อื่นหรือติดตั้งในที่อื่น

คุณจะหาจุดเชื่อมต่ออื่นที่ไม่ใช่ df ได้อย่างไร
โฮแกน

@ โฮแกน: อาจจะเรียกว่า "เขา" หรือ "แมว / etc / fstab" จะช่วยได้อย่างไร
Robert Lujo

5

df -hกำลังปัดเศษค่า แม้เปอร์เซ็นต์จะถูกปัดเศษ งด-hและคุณเห็นความแตกต่างที่ละเอียดยิ่งขึ้น

โอ้ และ ext3 และ derivate ขอสงวนเปอร์เซ็นต์ (ค่าเริ่มต้น 5%) สำหรับระบบไฟล์สำหรับกลุ่มดาวที่มีปัญหาตรงนี้ หากระบบไฟล์รูทของคุณจะเต็มจริง ๆ (เหลือ 0 ไบต์) คุณจะไม่สามารถบูตระบบได้ ดังนั้นส่วนที่สงวนไว้จะป้องกันสิ่งนี้


อาจเป็นไปได้ว่าเขาหมด inodes ฟรี เรียกใช้ 'df -i' เพื่อรับการใช้งาน inodes
Andrew Case

เขาไม่ได้ให้ข้อมูลว่าดิสก์เป็นเต็มรูปแบบ เขาคิดเพียงว่าดิสก์เต็ม พื้นที่ใช้งาน 100% ที่ไม่มีข้อผิดพลาดนั้นเป็น "เต็มแทบ" เท่านั้น
mailq

1

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

apt-get install -f
sudo apt-get clean

และล้างถังขยะของคุณ


นี่เป็นคำแนะนำทั่วไปที่สมเหตุสมผลเกี่ยวกับการลดการใช้ดิสก์ แต่ไม่ได้ตอบคำถามเกี่ยวกับสาเหตุที่ df บอกว่าดิสก์เต็มเมื่อไม่ได้ใช้
Andrew Schulman

0

ตรวจสอบ / หายไป + พบฉันมีระบบ (centos 7) และบางส่วนของไฟล์ใน / หายไป + พบกินพื้นที่ทั้งหมด


0

หากพาร์ติชันของคุณเป็น btrfs อาจมีช่องว่างย่อยรับพื้นที่ ระบบไฟล์ btrfs สามารถมีไดรฟ์ย่อยจำนวนมากซึ่งหนึ่งในนั้นถูกเมาท์ คุณสามารถใช้btrfs subvolume list <dir>เพื่อแสดงรายการไดรฟ์ย่อยทั้งหมดและbtrfs subvolume delete <dir>/<subvolume>เพื่อลบรายการย่อย ตรวจสอบให้แน่ใจว่าคุณไม่ได้ลบสิ่งที่ติดตั้งโดยค่าเริ่มต้น

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