ระบบไฟล์ลีนุกซ์; ความแตกต่างในการคำนวณขนาดโดยใช้ df & du


8

เมื่อฉันรันdfมันแสดงว่าอุปกรณ์รูทเต็ม

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

ฉันดูการinodeใช้งานและมีพื้นที่ว่างสำหรับอุปกรณ์รูทค่อนข้างมาก

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

แต่เมื่อฉันเรียกใช้duคำสั่งก็แสดงให้เห็นฉันได้ใช้เพียงออกจาก2G9.9G

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

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

โปรดช่วยฉันแก้ไข (เข้าใจ) ปัญหานี้

ขอบคุณ



@Gilles เช่นคุณกล่าวว่าฉันวิ่งdu -x /และฉันเห็นเพียง 2G จะใช้และฉันคำนวณขนาด inode 160Mซึ่งเป็น มันช่วยให้ฉันเข้าใจสิ่งต่าง ๆ แต่ฉันแค่ต้องการแก้ไขปัญหานี้
Rakesh Sankar

คุณduรูทไหม? มิฉะนั้นจะสามารถรายงานไฟล์ที่คุณสามารถเข้าถึงได้เท่านั้น
Gilles 'หยุดชั่วร้าย'

@Gilles ฉันกำลังวิ่งroot
Rakesh Sankar

ฉันไม่มีอะไรเพิ่มที่นี่นอกเหนือจากncduโปรแกรมที่ยอดเยี่ยมซึ่งช่วยให้เห็นภาพการใช้งานดิสก์
Rob

คำตอบ:


4

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

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

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


ขอบคุณข้อมูลที่ดีบางอย่าง (เพิ่มเติม) ฉันเข้าใจวันนี้ แต่หาhiddenพื้นที่ใช้แล้วฉันพยายามเรียกใช้fuserคำสั่งเพื่อดูไฟล์ทั้งหมดที่กำลังถูกใช้โดยกระบวนการ แต่ยกเลิกการเชื่อมโยง - ฉันไม่พบอะไรเลย คุณมีคำสั่งหรือทิศทางที่นำฉันไปสู่การค้นหาหรือไม่? นี่คือคำสั่งที่ฉันใช้fuser -v -a /
Rakesh Sankar

ฉันต้องรีบู๊ตเพื่อกำจัดพื้นที่ที่ซ่อนอยู่ แต่ฉันหาวิธีแก้ไขไม่ถูกต้องเพื่อลบไฟล์ที่ซ่อนอยู่
Rakesh Sankar

1

มีหลายครั้งที่เมื่อดิสก์เต็มคุณอาจสับสนจนกระทั่งรีบูต / เมานต์ดิสก์นั้นใหม่อีกครั้งแม้ว่าคุณจะลบไฟล์ที่โหลดแล้วก็ตาม


ฉันไม่สามารถรีบู๊ตได้เนื่องจากเป็นไซต์การผลิต แต่ฉันกำลังมองหาวิธีแก้ปัญหาที่สามารถช่วยฉันค้นหาพื้นที่ที่ซ่อนอยู่เหล่านี้และนำมันกลับมา
Rakesh Sankar

อาจเป็นการผลิต แต่บางครั้งการรีบูตเป็นคำตอบเดียว นั่นเป็นปัญหาที่น่าเสียดายที่มันเป็นรูทดิสก์ของคุณและระบบปฏิบัติการทั้งหมดของคุณติดตั้งอยู่ นี่คือเหตุผลที่หลายคนสนับสนุนการใช้ tmp, var, home ฯลฯ อยู่ในดิสก์อื่น ๆ เนื่องจากสามารถนำมาติดตั้งใหม่ได้ ดูเหมือนว่าเป็นเรื่องธรรมดามากขึ้นที่ระบบปฏิบัติการไม่ทราบว่ามีพื้นที่ว่างในดิสก์รูท
BugFinder

1

ในด้านของฉันฉันเพิ่งรีสตาร์ท syslogd เพื่อคืนพื้นที่ดิสก์ ฉันพลาด 3GB! เซิร์ฟเวอร์ของฉันเริ่มทำงาน 250 วันแล้ว


0

มีวิธีการล้างพื้นที่โดยไม่ต้องเริ่มต้นแอปพลิเคชันใหม่ นี่คือรายละเอียด:

  1. สมมติว่าคุณมีกระบวนการfooทำงานและสร้างไฟล์ 2 GB ชื่อ abc.log ตอนนี้พูดว่า abc.log นี้ถูกลบโดยคนอื่น

  2. รับค่าfoopid (สมมุติ 123) ดังนั้นจะแสดงรายการของอธิบายไฟล์เปิดโดย/proc/123/fd fooหนึ่งที่มี abc.log จะแสดงว่าถูกลบ สมมติว่าfdabs.log คือ 111 ถ้าคุณเรียกใช้less /proc/123/fd/111มันจะยังคงแสดงข้อมูลทั้งหมด 2 GB

  3. echo " " > /proc/123/fd/111วิ่ง สิ่งนี้จะเขียนทับเนื้อหาด้วยสตริงว่าง หลังจากคำสั่งนี้ถ้าคุณลองdfมันจะแสดงอีก 2 GB กู้คืนโดยการทำความสะอาด abc.log

แค่นั้นแหละ. ฉันลองสิ่งนี้บน CentOS และใช้งานได้


นี่คือสิ่งที่มีประโยชน์ที่จะรู้ แต่มันไม่ใช่คำตอบสำหรับคำถาม
Isaac Rabinovitch

ขออภัยคำตอบของฉันถูกกำหนดเป้าหมายไปที่การล้างพื้นที่ดิสก์มากขึ้นถ้าคุณรู้รหัสกระบวนการที่ลบไฟล์ สำหรับกรณีเฉพาะนี้คุณจะต้องผ่านไฟล์ทั้งหมดใน / proc / [0-9] * / fd, grep ไฟล์ที่ถูกลบและทำตามตรรกะที่กล่าวถึงข้างต้น
Kaustubh Sathe

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