Bagaimana cara mengetahui apa yang menggunakan semua ruang di partisi / saya?

9

Saya pada contoh besar di server EC2 Amazon. Saya menjalankan perintah df dan mendapatkan:

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

Saya kemudian menjalankan perintah du dan mendapatkan:

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

Jika Anda perhatikan, ketika Anda menambahkan semua ukuran pada output perintah du direktori non-mount, Anda tidak akan mendekati 9.1G seperti yang terlihat pada perintah df.

Apakah ini berarti saya memiliki disk yang buruk? Jika demikian, bagaimana saya bisa memperbaikinya?

heats
sumber

Jawaban:

20

Sangat mungkin bahwa Anda memiliki file yang dihapus sangat besar (atau banyak yang kecil) bahwa proses masih memiliki pegangan file terbuka. Cara untuk menemukannya adalah dengan menjalankan

# lsof | grep "deleted"

Jika Anda melihat banyak baris yang diakhiri dengan "(dihapus)" maka Anda dapat menemukan ID proses yang membuatnya terbuka dan mulai ulang. Setelah itu terjadi, ruang disk Anda akan kembali.

Jika ini tidak memperbaikinya, maka saya akan merekomendasikan fsck.

David Pashley
sumber
1
Luar biasa! Itu dia. Saya punya log postgresql yang masih sedang login.
sheats
Jika Anda ingin mengosongkan sebagian ruang tanpa memulai ulang daemon, alih-alih menghapus file, gunakan "echo> file". Ini akan memotong file, tetapi karena pegangannya masih terbuka, itu akan menjadi file yang jarang. Ini berarti ukurannya akan tetap sama, tetapi akan memakan ruang disk jauh lebih sedikit.
David Pashley
lsof +L1Kadang-kadang dapat bekerja lebih baik daripada itu ...
derobert
5

Ada banyak alasan du tidak sama df. Lihat jawaban untuk pertanyaan ini .

Beberapa mount overlay, banyak file kecil dan ukuran blok yang lebih besar, dan file yang dihapus masih digunakan. Mount overlay adalah ketika Anda memasang sistem file pada titik mount yang memiliki file di dalamnya, jadi du tidak melihatnya.

Perbedaan utama antara keduanya adalah bahwa df baru saja memeriksa superblock dan mempercayainya, sedangkan du memindai semua file yang dapat dilihat, dan menambahkannya. Lihat tautan IBM ini untuk informasi tentang superblok.

Kyle Brandt
sumber
4

Selalu gunakan opsi -x dengan du ketika Anda mengejar masalah seperti ini. Itu membuat du dari cross filesystem.

Zimmy-DUB-Zongy-Zong-DUBBY
sumber
Ini tidak akan membuat perbedaan, karena OP secara eksplisit meminta / *, jadi meminta partisi lain. Ini akan membantu jika sesuatu dipasang di bawah, katakanlah, "/ mnt / backup"
David Pashley