กินพื้นที่ว่างในดิสก์ของฉันคืออะไร


13

ฉันใช้งาน Linux Mint 14 Nadia พาร์ติชัน Linux มี 10G เมื่อระบบเริ่มต้นขึ้นduรายงานการใช้งาน 80% จากนั้นการใช้งานจะเพิ่มขึ้นอย่างช้า ๆ จนกว่าจะถึง 100% และระบบจะไม่สามารถใช้งานได้ (สามารถเกิดขึ้นได้กับคำสั่งของวันหรือสัปดาห์) หลังจากรีบูตการใช้งานจะรีเซ็ตเป็น 80%

สิ่งที่แปลกประหลาดที่สุดของทั้งหมดคือduไม่มีการเปลี่ยนแปลงใด ๆ

นี่คือผลลัพธ์ของคำสั่งเหล่านั้น (Windows และพาร์ติชันไดรฟ์ภายนอกถูกลบทิ้ง):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(หมายเหตุ: ฉันใช้การไฮเบอร์เนตหลังจากการไฮเบอร์เนตการใช้งานยังคงเหมือนเดิมและหลังจากรีบูตเครื่องจะรีเซ็ตเป็น 80%)

ฉันจะติดตามสิ่งที่กินพื้นที่ได้อย่างไร

ฉันอ่านคำถามนี้แล้ว ฉันยังอยู่ในความมืด ฉันจะทราบได้อย่างไรว่าโปรแกรมใดรับผิดชอบต่อพฤติกรรมนี้

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


1
ฉันชอบncduมากกว่าธรรมดาduสำหรับการค้นหาไฟล์ขนาดใหญ่ | ไดเรกทอรี มันจะสแกนทรีไดเรกทอรีทั้งหมดก่อนที่จะให้คุณทำอะไรก็ได้ คุณอาจต้องการผ่านเส้นทางที่เฉพาะเจาะจง (เช่นncdu /varหรือเพียงแค่ncdu ~)
Blacklight Shining

มีคำตอบที่ดี อยู่แล้วในเว็บไซต์นี้
Sparhawk

คำตอบ:


15

การดำเนินการซ้ำของ

sudo du -x   -d1 -h /

(ลงในไดเรกทอรีต้นไม้) ควรบอกให้คุณทราบว่ามีการใช้พื้นที่ว่างที่ไหน ซึ่งอาจอธิบายได้โดยไม่มีการตรวจสอบเพิ่มเติมว่าแอปพลิเคชันใดเป็นสาเหตุของสิ่งนั้น

ไฟล์ที่มองไม่เห็น

หากduไม่แสดงไฟล์เหล่านี้แสดงว่ามีความเป็นไปได้ข้อหนึ่งที่ถูกลบทิ้ง ไฟล์ (หรือมากกว่า: ชื่อของมันคือรายการในไดเรกทอรี) สามารถลบได้ในขณะที่ไฟล์นั้นยังคงใช้งานอยู่ ตราบใดที่มีไฟล์อธิบายที่ถูกต้องชี้ไปที่ไฟล์นี้มันจะครอบคลุมพื้นที่ในไดรฟ์ (ถ้าไม่ใช่ไฟล์ที่ว่างเปล่า ... )

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

คุณสามารถค้นหาไฟล์เหล่านี้ได้ด้วยfind:

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

อาจเป็นไฟล์ขนาดใหญ่ไฟล์เดียวหรือเป็นไฟล์ขนาดเล็กที่ทำให้เกิดปัญหาของคุณ ระบบของฉันมีไฟล์ดังกล่าวประมาณ 30 ไฟล์ (เป็นของกระบวนการเพียงห้ากระบวนการ) ls -lแสดงขนาดของไฟล์เหล่านี้ แต่ดูเหมือนว่าเป็นไปไม่ได้ที่จะรับค่าfindนี้

หลังจากฆ่ากระบวนการแล้วพื้นที่จะพร้อมใช้งานสำหรับระบบไฟล์ ( df) อีกครั้ง


นี่ไม่ได้ตอบคำถามของฉัน duรายงานการเปลี่ยนแปลงในพื้นที่ใช้งาน: 7.3G เมื่อเริ่มต้นและ 7.3G หลังจากเวลาผ่านไป dfรายงาน 7.3G ฟรีเมื่อเริ่มต้นและสูงถึง 10G เมื่อเวลาผ่านไป duฉันไม่สามารถหาปัญหากับ
Arry

@ แท้จริงแล้วฉันอ่านเร็วเกินไป
Hauke ​​Laging

8

ใช้สิ่งที่ชอบ

lsof -s | grep deleted | sort -k 8

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

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

หลังจากนั้นหากคุณพบกระบวนการที่น่าจะเป็นผู้ร้ายเราสามารถดูวิธีการแก้ไขได้


คำแนะนำที่ดี แต่ในเครื่องของฉันคำสั่งนี้รายงานเพียง 2 ไฟล์ที่ถูกลบที่เปิดด้วยขนาด 2k ซึ่งเป็นหนทางไกลจาก 2.7G ที่ใช้ไปในช่วงเวลาหนึ่งโดยกระบวนการหลงทางบางอย่าง
Arry

นี่เป็นคำแนะนำที่ดีมากและมันช่วยให้ฉันแก้ปัญหาได้เช่นเดียวกับคำถามหลัก ฉันมีความแตกต่างอย่างมากระหว่างคำสั่ง df และ du ในกรณีเฉพาะของฉันฉันมีการหมุนเวียนบันทึกและบริการที่ส่งต่อบันทึก (logstash ในตัวอย่างนี้) บริการ logstash ทำให้การบันทึกที่หมุนเวียนอยู่เปิดอยู่แม้ว่าจะถูกลบไปแล้วก็ตาม สิ่งนี้ทำให้เกิดความแตกต่างระหว่าง du และ df เมื่อบริการ logstash เริ่มต้นใหม่พื้นที่ดิสก์ปรากฏขึ้นอย่างถูกต้อง
aemus

ฉันมีกระบวนการเขียนไฟล์ผนวกเฉพาะไฟล์ที่ขยายอย่างไม่มีกำหนดและในที่สุดก็เต็มดิสก์ จากนั้นฉันตัดสินใจ rm ไฟล์นั้น แต่กระบวนการไม่ปิดไฟล์ descriptor ดังนั้นจึงยังคงมีการใช้งานอยู่ การรีสตาร์ทกระบวนการและการ จำกัด ขนาด AOF สามารถแก้ไขปัญหาของฉันได้
aviggiano

ควรทราบว่านี่ต้องใช้สิทธิ์รูท นอกจากนี้ฉันเคยsudo lsof -s | grep deleted | sort -hk7ได้รับเรียงลำดับตัวเลข หากไม่มี -h การเรียงลำดับจะใช้คำศัพท์ตลก ๆ กับตัวเลข
Derek

นี่คือสิ่งที่น่าอัศจรรย์ ได้รับการโหวตมากขึ้น
Techie

4
find / -size +10000k -print0 | xargs -0 ls -l -h

ใช้เพื่อหาซ้ำสิ่งที่จะเติมมากกว่า 10MB + จาก/(root) และแสดงรายละเอียดที่มีจำนวนมากที่มีในls -l xargsถ้าคุณเขียน 1000000 (ศูนย์เพิ่มเติม 2) คุณสามารถรับ 1GB +

du / -h --max-depth=1 | sort -h

คุณยังสามารถใช้ du และเพียงขุดลงไปด้วยตนเอง


1

เมื่อใดก็ตามที่สิ่งนี้เกิดขึ้นฉันมักจะเริ่มต้นการโฟกัสในไดเรกทอรีย่อย โครงสร้าง FHS ที่ Linux distros ยึดติดอยู่นั้นเป็นสิ่งสำคัญ

ดูครั้งแรกในตามด้วย/var/home

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

คุณสามารถ จำกัด โฟกัสของคุณไปยังไดเรกทอรีย่อยภายในตำแหน่งที่ตั้งเหล่านั้นเช่นกัน เมื่อคุณได้หมดมองในการมีผมมักจะย้ายไปและสุดท้ายที่เหลือไดเรกทอรีย่อยที่/root/

หากเป็น Red Hat based distro แคชที่yumใช้ในการอัปเดตอาจใช้พื้นที่จำนวนมาก คุณสามารถใช้คำสั่งนี้เพื่อล้างมัน:

$ yum clean packages

สิ่งรบกวนอื่น ๆ ที่ใช้aptสามารถทำสิ่งที่คล้ายกัน, apt-get clean.

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

$ ls -la /

ใส่ใจเป็นพิเศษกับไฟล์จุด! สิ่งที่ชื่อ.blahเช่น



0

ฉันมีสถานการณ์ที่เกือบจะเหมือนกัน

ในกรณีของฉันเหตุผลคือ VMware หนึ่งใน VMwares อื่น ๆ ในเครื่องเดียวกันนั้นจะใช้พื้นที่ดิสก์ นั่นเป็นสาเหตุที่การใช้พื้นที่ดิสก์ของฉัน 100%

หลังจากลบไฟล์ขนาดใหญ่จาก VMware ของเพื่อนบ้านแล้วก็ทำงานได้อย่างถูกต้อง

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