Làm cách nào để tìm hiểu những gì đang sử dụng hết dung lượng trên / phân vùng của tôi?


9

Tôi là một ví dụ lớn trên các máy chủ EC2 của Amazon. Tôi chạy lệnh df và nhận:

root@db:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.1G  284M  98% /
tmpfs                 3.8G     0  3.8G   0% /lib/init/rw
varrun                3.8G  116K  3.8G   1% /var/run
varlock               3.8G     0  3.8G   0% /var/lock
udev                  3.8G   80K  3.8G   1% /dev
tmpfs                 3.8G     0  3.8G   0% /dev/shm
/dev/sdb              414G  957M  392G   1% /mnt
/dev/sdf               50G   12G   35G  26% /byp
/dev/sdk               99G   31G   63G  33% /backups

Sau đó tôi chạy lệnh du và nhận:

root@db:/# du -s -h /*
31G     /backups
5.5M    /bin
136K    /boot
12G     /byp
80K     /dev
5.8M    /etc
12K     /home
70M     /lib
11M     /lib32
0       /lib64
16K     /lost+found
759M    /mnt
4.0K    /opt
du: cannot access `/proc/6917/task/6917/fd/4': No such file or directory
du: cannot access `/proc/6917/fd/4': No such file or directory
0       /proc
31M     /root
7.7M    /sbin
4.0K    /selinux
4.0K    /srv
0       /sys
11M     /tmp
1.1G    /usr
114M    /var

Nếu bạn nhận thấy, khi bạn thêm tất cả các kích thước trên đầu ra lệnh du của các thư mục không được gắn kết, bạn sẽ không nhận được bất cứ nơi nào gần với 9.1G như được thấy trong lệnh df.

Điều này có nghĩa là tôi có một đĩa xấu? Nếu vậy, làm thế nào tôi có thể sửa chữa nó?

Câu trả lời:


20

Hoàn toàn có thể bạn có một tệp bị xóa rất lớn (hoặc rất nhiều tệp nhỏ) mà một quy trình vẫn có xử lý tệp mở. Cách để tìm thấy chúng là chạy

# lsof | grep "deleted"

Nếu bạn thấy nhiều dòng kết thúc bằng "(đã xóa)" thì bạn có thể tìm Id quá trình mở chúng và khởi động lại nó. Khi điều đó xảy ra, không gian đĩa của bạn sẽ trở lại.

Nếu điều này không khắc phục được, thì tôi muốn giới thiệu một fsck.


1
Tuyệt vời! Điều đó là vậy đó. Tôi đã có một bản ghi postgresql vẫn đang được đăng nhập.
rung động

Nếu bạn muốn giải phóng một số dung lượng mà không cần khởi động lại một daemon, thay vì xóa tệp, thay vào đó hãy sử dụng "echo> file". Điều này sẽ cắt bớt tệp, nhưng vì tay cầm vẫn mở, nó sẽ trở thành một tệp thưa thớt. Điều này có nghĩa là nó vẫn sẽ có cùng kích thước, nhưng sẽ chiếm ít không gian đĩa hơn.
David Pashley

lsof +L1đôi khi có thể hoạt động tốt hơn grep đó ...
derobert

5

Có một loạt lý do du không bằng df. Xem câu trả lời cho câu hỏi này .

Một số là các lớp phủ, nhiều tệp nhỏ và kích thước khối lớn hơn và các tệp đã bị xóa vẫn đang được sử dụng. Gắn kết lớp phủ là khi bạn gắn hệ thống tệp trên điểm gắn kết có tệp trong đó, vì vậy du không nhìn thấy chúng.

Sự khác biệt chính giữa hai là df chỉ kiểm tra siêu khối và tin tưởng nó, khi du quét tất cả các tệp mà nó có thể xem và thêm chúng vào. Xem liên kết IBM này để biết thông tin về siêu khối.


4

Luôn sử dụng tùy chọn -x với du khi bạn đang theo đuổi các vấn đề như thế này. Nó giữ cho du khỏi hệ thống tập tin.


Điều này sẽ không tạo ra bất kỳ sự khác biệt nào, vì OP đã yêu cầu / * rõ ràng, vì vậy đã yêu cầu các phân vùng khác. Nó sẽ có ích nếu một cái gì đó được gắn vào, nói, "/ mnt / sao lưu"
David Pashley
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.