ใครกำลังเติมดิสก์ของฉัน


9

ฉันมีดิสก์หลักของฉันเต็มแล้ว:

root@kodi:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            1.9G     0  1.9G   0% /dev
tmpfs           385M   12M  374M   3% /run
/dev/sda1        88G   84G     0 100% /
tmpfs           1.9G  4.0K  1.9G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdb1       917G  429G  442G  50% /media/Cloud
/dev/sdd1       917G  813G   58G  94% /media/Tera
cgmfs           100K     0  100K   0% /run/cgmanager/fs
tmpfs           385M     0  385M   0% /run/user/1000
root@kodi:/#

/ dev / sda1 เป็นดิสก์หลักของฉันที่ติดตั้ง ubuntu:

root@kodi:/home/fmf# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=9fab4895-7ccb-4415-b26d-311a17036cda       /               ext4    errors=remount-ro 0       1

# swap was on /dev/sda5 during installation
UUID=7b158f58-e4c1-4717-aa5f-dbeaa79ab93c       none            swap    sw              0       0

UUID=f9079f52-7661-48ad-9bc4-0d2452be66af       /media/Tera     ext2    defaults,nofail 0       0
UUID=fb1f92ee-54f5-44f8-ba92-544e90e6dfeb       /media/Cloud    ext2    defaults,nofail 0       0

root@kodi:/home/fmf#

ลองใช้ google search และพบคำสั่งบางอย่างเพื่อทดสอบว่าใครเป็นผู้รับผิดชอบ แต่ฉันไม่สามารถระบุได้ว่าใครเป็นผู้กรอก:

root@kodi:/# du --exclude=/media -cksh * | sort -hr | head -n 15
du: cannot access 'proc/16360/task/16360/fd/3': No such file or directory
du: cannot access 'proc/16360/task/16360/fdinfo/3': No such file or directory
du: cannot access 'proc/16360/fd/3': No such file or directory
du: cannot access 'proc/16360/fdinfo/3': No such file or directory
1.3T    total
1.3T    media
3.5G    home
3.0G    usr
1010M   var
645M    root
630M    lib
99M     boot
17M     bin
15M     sbin
13M     etc
12M     run
196K    tmp
16K     lost+found
12K     srv
root@kodi:/#

เห็นได้ชัดว่าไม่มีไฟล์หรือไดเรกทอรีใดที่ใหญ่พอที่จะเติมเต็ม 84G ของดิสก์ของฉัน

บางวันที่ผ่านมาฉันพบว่าดิสก์เต็มเนื่องจากข้อผิดพลาด. xsession ที่บ้าไปแล้ว ฉันพบว่านี่เป็นข้อผิดพลาดที่รู้จักในอูบุนตูและฉันแก้ไขการสร้าง crontab line ซึ่งทุกสิบนาทีจะลบ. xsession-errors อันที่จริงตอนนี้ฉันไม่ได้มีมันในไดเรกทอรีบ้าน

มีอะไรให้ช่วยไหม?


ฉันไม่มี. xsession- ข้อผิดพลาด cronjob ลบมันออก ฉันไม่ได้รับสิ่งที่คุณหมายถึงกับ releses อย่างเป็นทางการของ Ubuntu: ฉันมี Ubuntu 16.04.1 LTS
effemmeffe

2
หากต้องการดูว่ามีไฟล์ที่ถูกลบที่ยังคงเข้าถึงอยู่โดยกระบวนการใด ๆ หรือไม่sudo lsof | grep deletedจะให้คำแนะนำ
30770 ridgy

ความคิดเห็นของ @ ridgy เป็นจุดบน หาก.xsession-errorsปัญหาของคุณเป็นความผิดพลาดนั่นจะเป็นการเน้น หากไม่เป็นเช่นนั้นก็ยังมีแนวโน้มที่จะชี้คุณไปในทิศทางที่ถูกต้อง
CVN

4
@effemmeffe ใน UNIX การลบไฟล์ไม่ได้ลบจริง ๆ จนกว่าหมายเลขอ้างอิงสุดท้ายจะถูกปิด (นี่คือสาเหตุที่คุณสามารถลบไฟล์ใน UNIX ได้เสมอซึ่งใน Windows คุณจะได้รับข้อผิดพลาด "access ถูกปฏิเสธ") ดังนั้นไฟล์. xsession-errors ยังคงอยู่ที่นั่นเติมพื้นที่ว่างในดิสก์ของคุณเพราะอะไรก็ตามที่บันทึกข้อผิดพลาดจะทำให้ไฟล์เปิดอยู่ วิธีที่ดีที่สุดในการแก้ไขปัญหานี้อย่างถูกต้องคือการหาสาเหตุของข้อผิดพลาดและแก้ไข
Muzer

1
หากปัญหาเกิดจากการเปิดไฟล์ที่ถูกจัดการในไฟล์ที่ถูกลบการรีบูตระบบควร "คืนพื้นที่ที่หายไปอย่างน่าอัศจรรย์" อาจเป็นขั้นตอนการแก้ไขปัญหาที่มีประโยชน์
Floris

คำตอบ:


19

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

@rinzwind มีจุดมุ่งหมายเพื่อพฤติกรรมนี้อย่างแน่นอนเมื่อเขา (ถูกต้อง) แนะนำให้ลบ cronjob และค้นหาข้อผิดพลาด นี่เป็นวิธีเดียวที่จะแก้ไขปัญหานี้ได้อย่างถูกต้อง

คุณสามารถตัด.xsession_errorsไฟล์ด้วย cronjob ดังนี้:

17 */2 * * *  truncate -cs 0 path/to/.xsession_errors

แต่ก่อนที่จะทำเช่นนี้คุณควรพยายามแก้ไขปัญหาพื้นฐานที่สร้างข้อความแสดงข้อผิดพลาดเหล่านั้น .xsession_errors


@terdon ฉันชอบ / etc / crontab มากกว่าตัวฉัน: = D
Rinzwind

1
@Rinzwind ไม่ใช่เพื่อการแก้ไขไฟล์ในโฮมไดเร็กตอรี่ของผู้ใช้ อย่างน้อยก็เรียกใช้ในฐานะผู้ใช้และไม่เป็นผู้ใช้!
terdon

@terdon @rinzwind คุณทั้งคู่ถูกต้อง: ฉันควรให้ความสนใจ การเรียกใช้สคริปต์นี้ในฐานะผู้ใช้rootจะไม่ประมาทและสามารถสร้างปัญหาอื่น ๆ ได้
Phillip -Zyan K Lee- Stockmann

2
การหมุนมีปัญหาเช่นเดียวกับการลบ: kodi จะไม่รับรู้ว่าไฟล์ถูกหมุนและจะเขียนต่อไปที่นั่นจนกว่าคุณจะแจ้งให้มันเปิดไฟล์นี้อีกครั้ง (ส่วนใหญ่ไม่มีสิ่งนั้นและคุณต้องรีสตาร์ทโคดี)
Phillip -Zyan K Lee- Stockmann

1
@terdon truncate -cจะไม่สร้างไฟล์และจะไม่เปลี่ยนความเป็นเจ้าของไฟล์ที่มีอยู่ เป็นการดีที่จะไม่เรียกใช้ในฐานะรูท แต่การเป็นเจ้าของไฟล์นั้นไม่ใช่เหตุผลว่าทำไม
ฮอบส์

10

ใครกำลังเติมดิสก์ของฉัน

ตั้งแต่คุณทำเช่นนี้ ...

ฉันพบว่านี่เป็นข้อผิดพลาดที่รู้จักกันในอูบุนตูและฉันแก้ไขการสร้าง crontab ที่ทุกสิบนาทีลบ. xsession-errors

เป็นไปไม่ได้ที่จะตอบคำถามนี้

โปรดทำตามสิ่งต่อไปนี้เพื่อให้เราได้รับข้อผิดพลาดที่เราต้องดู:

  • ลบบรรทัด crontab .xsessions_errorsที่คุณเพิ่มเอาว่า
  • Reboot แล้วตรวจสอบจากบรรทัดคำสั่งสิ่งที่เติมขึ้นมาใช้.xsessions_errorstail -f 100 ~/.xsessions_errors
  • เมื่อคุณพบปัญหาใด ๆ ที่เกิดขึ้นซ้ำ ๆ จำนวนมากให้คัดลอกบางส่วนลงในคำถาม
  • เพิ่ม crontab line กลับเพื่อให้คุณสามารถใช้ระบบของคุณ
  • รอการแก้ไขปัญหาและนำไปใช้แล้ว จากนั้นลบบรรทัด crontab อีกครั้ง (การลบ.xsessions_errorsไฟล์ควรหลีกเลี่ยงเสมอ)

7
"เมื่อคุณพบปัญหาใด ๆ ที่ซ้ำจำนวนมากให้คัดลอกบางส่วนลงในคำถามของคุณ" ไม่นั่นเป็นคำถามใหม่ที่แตกต่าง
การแข่งขัน Lightness ใน Orbit

การติดตามผล: ฉันลบ crontab และตอนนี้ไฟล์. xsession-errors มีอิสระที่จะเติบโต แต่มันไม่ใช่ และพื้นที่ดิสก์ของฉันยังคงลดลง ดังนั้นปัญหาไม่ได้อยู่ที่นั่น รีบูตจะหยุดการกินดิสก์ แต่ฉันไม่ต้องการรีบูตเครื่องทุกวัน เบาะแสใด ๆ
effemmeffe

3

เมื่อมีความแตกต่างใหญ่ (พูดมากกว่าสองสามเปอร์เซ็นต์) ระหว่าง (ในฐานะรูท) df -g /some/partition_rootและdu -gx /some/partition_root( -xบอกให้คุณ จำกัด ตัวเองในพาร์ติชันเดียวกันให้ใช้เพื่อตรวจสอบตัวอย่าง '/': อาจยังคงมีไฟล์อยู่ เปิดที่บางกระบวนการยังคงเขียน แต่คุณลบบนดิสก์ (ดังนั้น: ไฟล์ยังคงอยู่ตราบใดที่เปิดโดยกระบวนการและเติมพื้นที่ว่างในดิสก์ (df -g เห็นว่า) แต่เนื่องจากไม่มี ลิงก์ที่ยาวขึ้น (หรือชื่อไฟล์) ไปยัง inodes, du -gx คิดถึงมัน

ในกรณีของคุณเปรียบเทียบผลลัพธ์ของ:

df -g /
du -gx /

หากต้องการค้นหาว่าเป็นไฟล์ใดที่มีลิงก์น้อยกว่า 1 ลิงก์ (เช่นไฟล์ที่ถูกลบ แต่ยังเปิดอยู่):

lsof -nP +L1  /

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


df -g ไม่ใช่คำสั่งที่ถูกต้องบน ubuntu ของฉัน: root @ kodi: / home / fmf # df -g / df: ตัวเลือกที่ไม่ถูกต้อง - 'g'
effemmeffe

@effemmeffe: จากนั้นใช้ตัวเลือกที่เหมาะสม (-k if aix, -h ใน solaris) และใช้ตัวเลือกที่เกี่ยวข้องสำหรับ du ...
Olivier Dulac

ฉันไม่ได้รับจากคำตอบของคุณสิ่งที่ตัวเลือก -g ควรทำดังนั้นฉันไม่สามารถค้นหาตัวเลือกที่เทียบเท่าได้คุณช่วยบอกรายละเอียดหน่อยได้ไหม?
effemmeffe

-g บน linux บน df หรือ du แสดงขนาดเป็น gigabites
Olivier Dulac

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