Ăn gì không gian đĩa của tôi?


13

Tôi đang chạy Linux Mint 14 Nadia. Phân vùng Linux có 10G. Khi hệ thống khởi động, dubáo cáo sử dụng 80%. Sau đó, việc sử dụng từ từ phát triển cho đến khi nó đạt 100% và hệ thống trở nên không sử dụng được. (Nó có thể xảy ra theo thứ tự ngày hoặc tuần). Sau khi khởi động lại, việc sử dụng đặt lại đến 80%.

Điều kỳ lạ nhất của tất cả là ducho thấy không có thay đổi.

Đây là đầu ra của các lệnh đó (Windows và các phân vùng ổ đĩa ngoài được tách biệt):

# --- 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

(Lưu ý: Tôi sử dụng chế độ ngủ đông. Sau khi ngủ đông, việc sử dụng vẫn giữ nguyên và sau khi khởi động lại, nó đặt lại đến 80%.)

Làm thế nào để tôi theo dõi những gì ăn không gian?

Tôi đã đọc câu hỏi này . Tôi vẫn ở trong bóng tối. Làm thế nào để tôi tìm ra chương trình nào chịu trách nhiệm cho hành vi này?

Sau khi chỉnh sửa : tìm thấy nó. Không gian được xác nhận bởi nhật ký kernel, được nhìn thấy bởi dmesg. Nó lấp đầy vì máy của tôi tạo ra lỗi ở tốc độ 5 giây. (Nó liên quan đến lỗi này .) Hãy để những độc giả tương lai gặp vấn đề tương tự - lấp đầy không gian đĩa mà không thấy được du- đừng quên thử dmesgtìm kiếm nguyên nhân.


1
Tôi thích ncduhơn đơn giản duđể tìm các tập tin lớn | thư mục. Nó quét toàn bộ cây thư mục trước khi cho phép bạn làm bất cứ điều gì; bạn có thể muốn vượt qua nó một con đường cụ thể (ví dụ ncdu /varhoặc thậm chí chỉ ncdu ~)
Blacklight Shining

Một số câu trả lời đàng hoàng đã có trên trang web này.
Sparhawk

Câu trả lời:


15

Thực hiện nhiều lần

sudo du -x   -d1 -h /

(xuống cây thư mục) sẽ cho bạn biết không gian được tiêu thụ. Điều đó có thể giải thích mà không cần điều tra thêm về ứng dụng nào gây ra điều đó.

tập tin vô hình

Nếu dukhông hiển thị các tệp này thì một trong các khả năng là các tệp bị xóa. Một tập tin (hay đúng hơn: tên của nó tức là mục nhập của nó trong một thư mục) có thể bị xóa trong khi tập tin vẫn đang được sử dụng. Miễn là có một bộ mô tả tệp hợp lệ trỏ vào tệp này, nó sẽ bao phủ khoảng trống trên ổ đĩa (nếu đó không phải là một tệp trống ...).

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

Bạn có thể tìm thấy các tệp này với 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

Nó có thể là một tệp lớn hoặc một tệp các tệp nhỏ hơn gây ra sự cố của bạn. Hiện tại có khoảng 30 tệp như vậy trên hệ thống của tôi (chỉ thuộc năm quy trình). ls -lhiển thị kích thước của các tệp này nhưng dường như không thể lấy giá trị này từ đó find.

Sau khi giết quá trình, không gian sẽ có sẵn cho hệ thống tệp ( df) một lần nữa.


Điều này không giải quyết câu hỏi của tôi. dubáo cáo không có thay đổi trong không gian tiêu thụ: 7.3G khi bắt đầu và 7.3G sau khi thời gian trôi qua. dfbáo cáo 7.3G miễn phí khi bắt đầu và lên đến 10G khi thời gian trôi qua. Tôi không thể tìm thấy vấn đề với du.
Arry

@Arry Thật vậy, tôi đọc quá nhanh.
Hauke ​​Laging

8

Sử dụng một cái gì đó như

lsof -s | grep deleted | sort -k 8

để xem các quá trình đang giữ các tập tin bị xóa mở. Các trường quan trọng là thứ hai (PID) và thứ tám (thứ ba từ cuối cùng; kích thước tệp).

(Hãy chú ý đến các dòng trùng lặp, không đếm chúng hai lần. Kiểm tra PID và đường dẫn tệp (trường cuối cùng) hoặc số inode (thứ hai đến trường cuối cùng).)

Sau đó, nếu bạn tìm thấy một quy trình có khả năng là thủ phạm, chúng ta có thể xem cách khắc phục.


Đề xuất tốt, nhưng trên máy của tôi, lệnh này chỉ báo cáo 2 tệp bị xóa mở với kích thước 2k, khác xa so với 2.7G được tiêu thụ theo thời gian bởi một quá trình đi lạc.
Arry

Đây là một gợi ý tuyệt vời và nó thực sự đã giúp tôi giải quyết một vấn đề tương tự như câu hỏi của phụ huynh. Tôi có một sự khác biệt lớn giữa các lệnh df và du. Trong trường hợp cụ thể của tôi, tôi có các bản ghi xoay và một dịch vụ chuyển tiếp các bản ghi (logstash trong ví dụ này). Dịch vụ logstash giữ cho các bản ghi được xoay mở, ngay cả khi bị xóa. Điều này đã gây ra sự khác biệt giữa du và df. Khi dịch vụ logstash được khởi động lại, không gian đĩa hiển thị chính xác.
aemus

Tôi đã có một quá trình viết một tập tin chỉ phụ lục phát triển vô hạn và cuối cùng đã lấp đầy đĩa của tôi. Sau đó, tôi quyết định rm tập tin đó nhưng quá trình không đóng mô tả tập tin của nó, vì vậy nó vẫn đang được sử dụng. Khởi động lại quá trình và giới hạn kích thước AOF đã giải quyết vấn đề của tôi.
aviggiano 24/07/2015

Đáng lưu ý rằng điều này đòi hỏi quyền root. Ngoài ra, tôi đã sử dụng sudo lsof -s | grep deleted | sort -hk7để có được một loại số. Không có -h, sắp xếp những thứ từ vựng hài hước với những con số.
Derek

Đây là công cụ tuyệt vời. Được bình chọn
Techie

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

Sử dụng điều này để tìm cách đệ quy những gì đang làm đầy hơn 10MB + từ /(root), và hiển thị nó với rất nhiều chi tiết với ls -ltrong xargs. Nếu bạn viết 1000000 (2 số không thêm), bạn có thể nhận được 1GB + chẳng hạn.

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

Bạn cũng có thể sử dụng du, và chỉ cần đào nó bằng tay.


1

Bất cứ khi nào điều này xảy ra, tôi luôn bắt đầu tập trung vào một số thư mục con nhất định. Cấu trúc FHS mà hầu hết các bản phân phối Linux tuân thủ được đặt ra với ý nghĩ này.

Đầu tiên nhìn vào /var, tiếp theo /home.

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

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

Bạn cũng có thể thu hẹp trọng tâm của mình vào các thư mục con trong một trong những vị trí đó. Khi bạn đã mệt mỏi tìm kiếm ở đó, tôi thường chuyển đến /rootvà cuối cùng là các thư mục con còn lại tại /.

Nếu đó là bản phân phối dựa trên Red Hat, bộ đệm yumsử dụng để thực hiện cập nhật có thể sẽ tiêu tốn một lượng lớn dung lượng. Bạn có thể sử dụng lệnh này để xóa nó:

$ yum clean packages

Các distro khác sử dụng aptcó thể làm một cái gì đó tương tự , apt-get clean.

Tôi cũng chạy lệnh này ở đầu /thư mục của bạn , vị trí này đôi khi có thể trở thành nguồn cho các tệp nhật ký đi lạc.

$ ls -la /

Đặc biệt chú ý đến các tập tin dấu chấm! Những điều được đặt tên .blah, ví dụ.


1

timeshift đang ăn đĩa của tôi

sudo timeshift -delete--all

Thu hồi 50Gb.


0

Tôi đã có một tình huống gần như tương tự.

Trong trường hợp của tôi, lý do là VMware. Một trong những phần mềm VM khác trên cùng một máy, nó đã tiêu tốn dung lượng đĩa. Đó là lý do tại sao dung lượng đĩa của tôi là 100%.

Sau khi xóa các tệp lớn khỏi VMware của neighbour, nó hoạt động chính xác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.