ดิสก์เติมช้า แต่ไม่มีการเปลี่ยนแปลงขนาดไฟล์ที่มองเห็นได้


16

DF

 Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1       30830588 22454332   6787120  77% /
none                   4        0         4   0% /sys/fs/cgroup
udev             1014124        4   1014120   1% /dev
tmpfs             204996      336    204660   1% /run
none                5120        0      5120   0% /run/lock
none             1024976        0   1024976   0% /run/shm
none              102400        0    102400   0% /run/user

77% นั้นเป็นเพียง 60% เมื่อวานและมันจะเติมเต็ม 100% ในไม่กี่วัน

ฉันได้รับการตรวจสอบ filessizes ในขณะนี้:

sudo du -sch /*


9.6M    /bin
65M     /boot
224K    /build
4.0K    /dev
6.5M    /etc
111M    /home
0       /initrd.img
0       /initrd.img.old
483M    /lib
4.0K    /lib64
16K     /lost+found
8.0K    /media
4.0K    /mnt
4.0K    /opt
du: cannot access ‘/proc/21705/task/21705/fd/4’: No such file or directory
du: cannot access ‘/proc/21705/task/21705/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/21705/fd/4’: No such file or directory
du: cannot access ‘/proc/21705/fdinfo/4’: No such file or directory
0       /proc
21M     /root
336K    /run
12M     /sbin
8.0K    /srv
4.1G    /swapfile
0       /sys
4.0K    /tmp
1.1G    /usr
7.4G    /var
0       /vmlinuz
0       /vmlinuz.old
14G     total

มันทำให้ฉันมีจำนวนเท่ากันทุกวัน ผลรวม 14G นั้นน้อยกว่าครึ่งหนึ่งของขนาดดิสก์ ส่วนที่เหลือจะไปไหน

ความรู้เกี่ยวกับ Linux ของฉันไม่ได้ลึกมาก

เป็นไปได้หรือไม่ที่ไฟล์จะไม่ปรากฏที่นี่ เป็นไปได้หรือไม่ที่จะมีการจัดสรรพื้นที่ด้วยวิธีอื่น?


1
7.4 G สำหรับคุณ/varทำให้ฉันมีขนาดใหญ่ผิดปกติ ฉันสงสัยว่าไฟล์บันทึกกำลังเต็มอย่างรวดเร็ว
Jos

4
ไฟล์ใด ๆ ที่ถูกลบ? อะไรlsof -b 2>/dev//null | grep deleted(ผลลัพธ์อาจมีขนาดค่อนข้างใหญ่ แต่เป็นการลบรายการที่ค่อนข้างซ้ำ ๆ )
muru

@muru มีไฟล์แสดงขึ้นมาเป็นจำนวนมาก มันหมายความว่าอะไร? พวกเขาอยู่ที่ไหน? ฉันจะทำความสะอาดได้อย่างไร
nizzle

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

1
โปรดทราบว่าคุณอาจต้องการคำถามที่สองเกี่ยวกับสิ่งที่ผิดพลาดกับ logrotate.conf ของคุณเนื่องจาก apache ควรได้รับการกำหนดค่าให้ปิดไฟล์เมื่อมีการบันทึกเกิดขึ้น ฯลฯ ฉันพูดแบบนี้เพราะการรีบูตช่วยแก้ไขปัญหาได้ในขณะนี้ ปัญหาควรเกิดขึ้นอีกเป็นระยะ ๆ และการเริ่มต้นใหม่ทุกสัปดาห์เป็นเรื่องที่น่าเศร้า [ฉันขอแนะนำว่ามันเกิดขึ้นอีกหรือไม่โดยดูว่าบริการ httpd เริ่มต้นใหม่ (หรือโหลดซ้ำ) อีกครั้งช่วยบรรเทาปัญหาได้ชั่วคราว
Foon

คำตอบ:


28

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

วิธีดูไฟล์ที่ถูกลบยังคงใช้งานอยู่:

lsof -b 2>/dev/null | grep deleted

คุณอาจมีไฟล์ที่ถูกลบจำนวนมากซึ่งในตัวมันเองไม่ใช่ปัญหา ไฟล์ที่ถูกลบเพียงไฟล์เดียวที่มีขนาดใหญ่นั้นเป็นปัญหา

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

หากคุณเคยเห็นสิ่งที่ชอบ:

zsh   1724   muru   txt   REG   8,17   771448   1591515  /usr/bin/zsh (deleted)

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

ไฟล์ใน/dev/shmเป็นวัตถุหน่วยความจำที่ใช้ร่วมกันและไม่ใช้พื้นที่มากบนดิสก์ (ฉันคิดว่าเป็นไอโหนดมากที่สุด) พวกเขายังสามารถละเว้นได้อย่างปลอดภัย ไฟล์ที่vteXXXXXXมีชื่อเป็นไฟล์บันทึกจากเครื่องมือจำลองเทอร์มินัลที่ใช้ VTE (เช่นเทอร์มินัล GNOME, Terminator เป็นต้น) สิ่งเหล่านี้อาจมีขนาดใหญ่ถ้าคุณมีหน้าต่างเทอร์มินัลที่เปิดพร้อมกับล็อต (และฉันหมายถึงล็อต ) ของสิ่งที่กำลังแสดงผล


1
บนระบบของ OP ทั้งหมด / dev เป็นจุดเมานท์ udev ดังนั้นจึงไม่มีสิ่งใดในนั้นที่ใช้พื้นที่บนระบบไฟล์หลัก ยิ่งไปกว่านั้น / dev / shm จะถูกนำไปใช้เป็น tmpfs อยู่แล้วซึ่งเป็นเพียงจุดเชื่อมต่อดังนั้นไฟล์แต่ละไฟล์ที่อยู่ภายใต้จะไม่ใช้พื้นที่รายการไดเรกทอรี
เควิน

3

วิธีเพิ่มคำตอบที่ยอดเยี่ยมโดย muru:

  • df แสดงขนาดบนดิสก์
  • และ du แสดงขนาดทั้งหมดของเนื้อหาไฟล์

บางทีสิ่งที่คุณไม่เห็นด้วย du คือการปรากฏตัวของไฟล์ขนาดเล็กจำนวนมาก ... (ดูที่คอลัมน์สุดท้ายของdf -iและดูว่าจำนวนของ inodes (เช่นไฟล์) เพิ่มการทำงานล่วงเวลามากเกินไป)

หากคุณมีไฟล์ 1'000'000 (1 ล้าน) 1 ไบต์ขนาดเล็กduจะนับว่าเป็น 1'000'000 ไบต์โดยรวมสมมติว่า 1Mb (... purists โปรดอย่าประจบประแจง)

แต่ในดิสก์แต่ละไฟล์ประกอบด้วย 2 สิ่ง:

  • 1 inode (ชี้ไปที่ข้อมูลของไฟล์), และ inode นั้นสามารถทำได้ด้วยตัวเองคือ 16kb (!),
  • และข้อมูลของแต่ละไฟล์ (= เนื้อหาของไฟล์) ถูกวางลงบนบล็อกดิสก์และบล็อกเหล่านั้นไม่สามารถมีข้อมูลหลายไฟล์ (ปกติคือ ... ) ดังนั้นข้อมูล 1 ไบต์ของคุณจะใช้เวลาอย่างน้อย 1 บล็อก

ดังนั้นไฟล์หนึ่งล้านไฟล์ไฟล์ 1 ไบต์จะใช้1'000'000'000 * size_of_a_blockพื้นที่ทั้งหมดของข้อมูลรวม1'000'000'000 * size_of_an_inodeถึงขนาดของ inode ... ซึ่งสามารถใช้งานดิสก์หลาย Gb สำหรับการใช้ไฟล์ 1 ล้าน "1 ไบต์"

หากคุณมีบล็อก 1024- ไบต์และขนาดของ inode อีก 256 ไบต์ไฟล์ 1'000'000 ของคุณจะถูกรายงานเป็น 1Mb โดยประมาณduแต่จะนับเป็น 1.25Gb โดยประมาณบนดิสก์ (ตามที่เห็นdf)! (หรือแม้กระทั่ง 2Gb ถ้าแต่ละไอโหนดต้องอยู่ใน 1 บล็อกดิสก์เฉพาะ ... ฉันไม่รู้ว่าเป็นอย่างนั้นหรือไม่)


1
เว้นแต่คุณจะใช้ตัวเลือก ( -bหรือ--apparent-size) อย่างชัดเจนduเพื่อบอกให้แสดงขนาดที่ชัดเจนของไฟล์duจริง ๆ แล้วจะแสดงขนาดบนดิสก์ของไฟล์เสมอ (จำนวนบล็อกทั้งหมดที่ใช้ครั้งขนาดบล็อก) ในความเป็นจริงนี้สามารถเป็นได้ทั้งขนาดใหญ่ (กรณีปกติ) หรือเล็กกว่า (ในกรณีของไฟล์ที่กระจัดกระจาย) กว่าขนาดที่ชัดเจนของไฟล์
Jonathan Callen

0

หาก/dev/vda1มีการเติมขึ้นมันอาจจะเกิดจากเจนกินส์หรือเทียบท่า (หรือ ฯลฯ ) และคุณอาจจะต้องใช้lsofคำสั่งเพื่อบันทึกการทำความสะอาดและกำหนดขนาดของมัน

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