Làm cách nào tôi có thể kiểm tra phần nào trong hệ thống linux của tôi sử dụng nhiều dung lượng đĩa nhất?


0

Tôi đang có một máy chủ Ubuntu đang hết dung lượng đĩa (36 GB trong tổng số 37 GB). Tôi đã sử dụng một số phương pháp để kiểm tra việc sử dụng đĩa, nhưng có vẻ như kết quả khá mơ hồ đối với tôi.

Tôi đã sử dụng các lệnh sau để kiểm tra và đầu ra là như sau:

$ du -sh /*

6.2M    /bin
4.0K    /boot
20K     /dev
47M     /etc
2.1G    /home
72K     /include
27M     /lib
0       /lib64
4.0K    /media
4.0K    /mnt
546M    /opt
0       /proc
287M    /root
5.2M    /sbin
4.0K    /selinux
4.0K    /srv
0       /sys
59M     /tmp
2.7G    /usr
1.7G    /var

Không ai trong số này dường như là bất cứ thứ gì gần 36GB, vì vậy tôi kiểm tra như thế này:

$ df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              38G   35G  835M  98% /
udev                   10M   20K   10M   1% /dev
none                  500M   16K  500M   1% /dev/shm
none                  500M   68K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock

Tuy nhiên tôi không thể xác định thư mục nào đã sử dụng hầu hết dung lượng đĩa. Ai đó có thể cho tôi manh mối về cách kiểm tra không? Cảm ơn.


Chỉ để đảm bảo, vì không có bất kỳ thông báo lỗi nào ở duđầu ra: Bạn chạy lệnh đó như root, phải không?!
mpy

@mpy: vâng, tôi đang sử dụng root.
Thượng Vương

Câu trả lời:


2

Tôi không nghĩ rằng một "công cụ trực quan hóa không gian đĩa" có thể giúp bạn trong trường hợp này: không gian bị chiếm dụng và hiển thị cho các công cụ như vậy là giống nhau du, chỉ những công cụ đó làm chi tiết hơn. Nhưng công cụ vẫn chỉ báo cáo 8-10 GB mà bạn đã biết đã được sử dụng, không báo cáo hai mươi gigabyte đó đang "mất tích" ở đâu.

Một lời giải thích khả dĩ cho một không gian "biến mất" với tỷ lệ như vậy là nó nằm trong một (hoặc nhiều) tệp bị xóa .

Nếu bạn mở một tệp trong Unix và trong khi vẫn mở, bạn xóa (hủy liên kết), nó sẽ vẫn "tồn tại" nhưng sẽ chỉ hiển thị cho quá trình giữ bộ mô tả tệp của nó và ngay lập tức biến mất ngay sau khi quá trình kết thúc, giải phóng người mô tả

Đây là một cách tuyệt vời để quản lý các tập tin tạm thời.

Thật không may, nếu rò rỉ tệp tạm thời và dữ liệu liên tục được thêm vào nó, mà không bao giờ đóng và tạo lại tệp, thì rất nhiều không gian đĩa có thể "biến mất".

Là root, hãy thử:

ls -la /proc/*/fd/* | grep deleted

Tên tệp và ID quy trình, sẽ cho bạn biết quy trình nào đang duy trì không gian "không liên kết".

Nếu bạn có thể làm điều đó, tất nhiên, khởi động lại sẽ có tác dụng tương tự nhanh hơn. Và một số quy trình được gắn kết trong hệ thống đến mức thực sự khởi động lại chúng tốt hơn là chấm dứt chúng và quản lý tất cả các quy trình và dịch vụ phụ thuộc khác .

Ví dụ trên máy của tôi, tôi có khoảng 25 tệp như vậy và tệp này

lrwx------ 1 root  root  64 May  9 07:45 /proc/732/fd/8 -> /tmp/vmware-root/vmware-usbarb-732.log (deleted)

Tôi biết rằng đôi khi phát triển trong phạm vi nhiều megabyte. Đang chạy

vmware-usbarbitrator --kill

vmware-usbarbitrator

có thể giải phóng mọi nơi từ 0 đến 100 triệu dung lượng, tùy thuộc vào thời gian nó chạy và mức độ tôi đã sử dụng vmplayer.

Tự động kiểm tra

Một cách để kiểm tra các tệp nào đang chiếm chỗ trống sẽ là kiểm tra kích thước của chúng: hầu hết các tệp không được liên kết chỉ là một vài byte.

Phương pháp này sử dụng wc, rất kém hiệu quả; có lẽ, việc mở tệp, tìm kiếm SEEK_ENDvà trả về giá trị ftell()sẽ nhanh hơn rất nhiều (đặc biệt là trên các tệp lớn). Nhưng người ta sẽ cần phải biên dịch một tiện ích nhỏ để làm điều đó.

for i in $( ls -la /proc/*/fd/* 2>/dev/null \
            | grep deleted \
            | sed -e 's/.*\(\/proc\S*\) -.*/\1/g' ); do
    wc -c $i | tr "\n" "="; readlink $i
done | grep -v "^0 " | sort -rn

Điều này sử dụng một cách (hy vọng) di động để liệt kê các fd ảo của tất cả các tệp đã bị xóa và đọc chúng với wc. Sau đó, cho mỗi tệp, đọc liên kết tượng trưng. Các tập tin có độ dài bằng không được bỏ qua để tránh lộn xộn.

Trên hệ thống mới khởi động của tôi, điều này mang lại cho tôi

217032 /proc/812/fd/9=/var/run/nscd/dbMn7Auu (deleted)
217032 /proc/812/fd/8=/var/run/nscd/dbMn7Auu (deleted)
3278 /proc/2357/fd/3=/tmp/vmware-root/vmware-apploader-2327.log (deleted)
2257 /proc/2422/fd/7=/tmp/vmware-root/vmware-authdlauncher-2418.log (deleted)

vì vậy tôi biết rằng nó nscdđang sử dụng 400 Kb "không gian vô hình" (điều này không thay đổi nếu tôi khởi động lại nscd, vì vậy đây có thể là một khu vực làm việc không phát triển ... nhiều. Không có gì ngăn tôi theo dõi quá trình, Tuy nhiên).

Bạn cũng có thể dễ dàng lưu mã ở trên trong một tiện ích nhỏ và chạy mã này cron, loại bỏ tất cả các giá trị trong (giả sử) 500 megs, nhưng cuối cùng gửi email cho quản trị viên sẽ xuất hiện một cái gì đó.


Một thay thế cho phương pháp ls / Proc sẽ là lsof | grep đã bị xóa .
tink

0

Bạn có thể thử một số công cụ phản hồi đồ họa tất cả các tệp và thư mục khác nhau trên hệ thống của bạn và định cỡ chúng theo cách sử dụng đĩa của chúng. Một công cụ như vậy là 'xdiskusage'. Xem liên kết này để biết thêm.



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.