Saya memiliki disk SCSI di server (hardware Raid 1), 32G, ext3 filesytem. df
memberitahu saya bahwa disk tersebut 100% penuh. Jika saya menghapus 1G ini ditampilkan dengan benar.
Namun, jika saya menjalankan du -h -x /
maka du
beri tahu saya bahwa hanya 12G yang digunakan (saya gunakan -x
karena beberapa samba mount).
Jadi pertanyaan saya bukan tentang perbedaan halus antara perintah du dan df tetapi tentang bagaimana saya bisa mengetahui apa yang menyebabkan perbedaan besar ini?
Saya reboot mesin untuk fsck yang pergi tanpa kesalahan. Haruskah saya berlari badblocks
? lsof
menunjukkan kepada saya tidak ada file yang dihapus terbuka, lost+found
kosong dan tidak ada pernyataan peringatan / kesalahan / kegagalan yang jelas dalam file pesan.
Jangan ragu untuk meminta perincian lebih lanjut tentang pengaturan.
sumber
Jawaban:
Periksa file pada yang terletak di bawah titik pemasangan. Seringkali jika Anda memasang direktori (katakanlah sambafs) ke sistem file yang sudah memiliki file atau direktori di bawahnya, Anda kehilangan kemampuan untuk melihat file-file itu, tetapi mereka masih menghabiskan ruang pada disk yang mendasarinya. Saya sudah memiliki salinan file saat dalam mode pengguna tunggal membuang file ke direktori yang tidak bisa saya lihat kecuali dalam usermode tunggal (karena sistem direktori lain sedang dipasang di atas mereka).
sumber
Baru saja menemukan halaman ini ketika mencoba melacak masalah di server lokal.
Dalam kasus saya
df -h
dandu -sh
tidak cocok dengan sekitar 50% dari ukuran hard disk.Ini disebabkan oleh apache (httpd) menyimpan file-file log besar dalam memori yang telah dihapus dari disk.
Ini dilacak dengan menjalankan di
lsof | grep "/var" | grep deleted
mana/var
partisi saya perlu dibersihkan.Outputnya menunjukkan baris seperti ini:
httpd 32617 nobody 106w REG 9,4 1835222944 688166 /var/log/apache/awstats_log (deleted)
Situasi kemudian diselesaikan dengan me-restart apache (
service httpd restart
), dan membersihkan ruang disk 2gb, dengan membiarkan kunci pada file yang dihapus dihapus.sumber
kill -9 'pid'
melepaskan kunci. misalnya: Untuk httpd Anda seharusnyakill -9 32617
.lsof
karenasudo
atau tidak semua deskriptor file terbuka akan munculsudo truncate -s0 /proc/(h2 PID)/(descriptor number obtained from ls /proc/h2pid/fd)
.httpd
ruang restart tidak dirilis. Ketika saya berlari/etc/init.d/rsyslog restart
ternyata berhasil: Dlsof -a +L1 /var
, di mana-a
berarti DAN semua kondisi (default adalah ATAU),+L1
berarti daftar hanya file dengan jumlah tautan kurang dari 1 (yaitu, file yang dihapus dengan deskriptor file terbuka), dan/var
membatasi ke file di bawah titik mount ituSaya setuju dengan jawaban OldTroll sebagai kemungkinan penyebab ruang "hilang" Anda.
Di Linux Anda dapat dengan mudah me-remount seluruh partisi root (atau partisi lain untuk hal ini) ke tempat lain di sistem file Anda katakan / mnt misalnya, cukup mengeluarkan
maka kamu bisa melakukan a
dan lihat apa yang menghabiskan ruang Anda.
Ps: maaf karena menambahkan jawaban baru dan bukan komentar tetapi saya perlu beberapa format agar posting ini dapat dibaca.
sumber
/var/lib/docker/aufs/diff/
Lihat apa yang
df -i
dikatakan. Bisa jadi Anda kehabisan inode, yang mungkin terjadi jika ada sejumlah besar file kecil dalam sistem file itu, yang menggunakan semua inode yang tersedia tanpa menghabiskan semua ruang yang tersedia.sumber
du -s
dengan subtree yang sama, Anda akan mendapatkan ide yang bagus jika itu yang terjadi di sini.Dalam kasus saya ini ada hubungannya dengan file-file besar yang dihapus. Cukup menyakitkan untuk dipecahkan sebelum saya menemukan halaman ini, yang membuat saya berada di jalur yang benar.
Saya akhirnya memecahkan masalah dengan menggunakan
lsof | grep deleted
, yang menunjukkan saya program mana yang memegang dua file log yang sangat besar (total 5GB dari partisi root 8GB saya yang tersedia).sumber
File yang dibuka oleh suatu program tidak benar-benar pergi (berhenti memakan ruang disk) ketika Anda menghapusnya, mereka akan pergi ketika program menutupnya. Suatu program mungkin memiliki file sementara besar yang tidak dapat Anda (dan du) lihat. Jika ini adalah program zombie, Anda mungkin perlu me-reboot untuk menghapus file-file itu.
sumber
kill -9 'pid'
mereka untuk melepaskan kunci dan mendapatkan ruang disk kembali.Coba ini untuk melihat apakah proses mati / macet terkunci ketika masih menulis ke disk: lsof | grep "/ mnt"
Kemudian coba matikan semua PID yang macet (terutama cari baris yang diakhiri dengan "(dihapus"))
sumber
Ini adalah metode termudah yang saya temukan hingga saat ini untuk menemukan file besar!
Ini adalah contoh jika mount root Anda penuh / (mount / root) Contoh:
cd / (jadi Anda sudah di root)
ls | xargs du -hs
Contoh Output:
maka Anda akan melihat bahwa toko besar melakukan cd / store
dan jalankan lagi
ls | xargs du -hs
dalam hal ini direktori vms adalah space hog.
sumber
baobab
? (lihat marzocca.net/linux/baobab/baobab-getting-started.html )ls
+xargs
sepertinya berlebihan,du -sh /*
bekerja dengan baik sendiriBagi saya, saya perlu menjalankan
sudo du
karena ada sejumlah besar file buruh pelabuhan di bawah/var/lib/docker
bahwa pengguna non-sudo tidak memiliki izin untuk membaca.sumber
Satu lagi kemungkinan untuk dipertimbangkan - Anda hampir dijamin untuk melihat perbedaan besar jika Anda menggunakan buruh pelabuhan, dan Anda menjalankan df / du di dalam sebuah wadah yang menggunakan volume mount. Dalam kasus direktori yang dipasang ke volume pada host buruh pelabuhan, df akan melaporkan total dOST HOST. Ini jelas jika Anda memikirkannya, tetapi ketika Anda mendapatkan laporan "wadah pelarian yang mengisi disk!", Pastikan Anda memverifikasi konsumsi ruang file kontainer dengan sesuatu seperti
du -hs <dir>
.sumber
Jadi saya punya masalah ini di Centos 7 juga dan menemukan solusi setelah mencoba banyak hal seperti bleachbit dan pembersihan / usr dan / var meskipun mereka hanya menunjukkan sekitar 7G masing-masing. Masih menampilkan 50G dari 50G yang digunakan di partisi root tetapi hanya menunjukkan 9G penggunaan file. Jalankan cd ubuntu langsung dan lepaskan partisi 50G yang menyinggung, buka terminal dan jalankan xfs_check dan xfs_repair pada partisi tersebut. Saya kemudian me-remount partisi dan direktori yang hilang + saya temukan telah berkembang menjadi 40G. Mengurutkan + yang hilang ditemukan berdasarkan ukuran dan menemukan file log teks 38G untuk steam yang akhirnya hanya mengulangi kesalahan mp3. Menghapus file besar dan sekarang memiliki ruang dan penggunaan disk saya setuju dengan ukuran partisi root saya. Saya masih ingin tahu bagaimana cara mendapatkan steam log agar tidak bertambah besar lagi.
sumber
xfs_fsr
memperbaiki masalah ini untuk kitajika disk yang dipasang adalah folder bersama pada mesin windows, maka nampaknya df akan menunjukkan ukuran dan penggunaan disk dari seluruh disk windows, tetapi du hanya akan menampilkan bagian dari disk yang Anda akses juga. (dan sudah terpasang). jadi dalam hal ini masalahnya harus diperbaiki pada mesin windows.
sumber
Hal serupa terjadi pada kami dalam produksi, penggunaan disk menjadi 98%. Lakukan penyelidikan berikut:
a)
df -i
untuk memeriksa penggunaan inode, penggunaan inode adalah 6% sehingga tidak banyak file yang lebih kecilb) Memasang
root
dan memeriksa file tersembunyi. Tidak dapat mengajukan file tambahan apa pun .du
hasilnya sama seperti sebelum mount.c) Akhirnya,
nginx
log yang diperiksa . Itu dikonfigurasikan untuk menulis ke disk tetapi pengembang menghapus file log secara langsung menyebabkannginx
semua log tetap dalam memori. Karena file/var/log/nginx/access.log
dihapus dari disk menggunakanrm
itu tidak terlihat menggunakandu
tetapi file itu diakses olehnginx
dan karenanya itu masih terbukasumber
Saya memiliki masalah yang sama yang disebutkan dalam topik ini, tetapi dalam satu VPS. Jadi saya telah menguji semua yang dijelaskan dalam topik ini tetapi tidak berhasil. Solusinya adalah kontak untuk dukungan dengan penyedia VPS kami yang melakukan perhitungan kuota dan mengoreksi perbedaan ruang
df -h
dandu-sh /
.sumber
Saya mengalami masalah ini pada kotak FreeBSD hari ini. Masalahnya adalah bahwa itu adalah artefak
vi
(tidakvim
, tidak yakin apakahvim
akan membuat masalah ini). File itu memakan ruang tetapi tidak sepenuhnya ditulis ke disk.Anda dapat memeriksanya dengan:
Ini terlihat pada semua file yang terbuka dan mengurutkan (melalui angka
-n
) oleh kolom ke-8 (kunci,-k8
), menunjukkan sepuluh item terakhir.Dalam kasus saya, entri final (terbesar) terlihat seperti ini:
Ini berarti proses (PID) 12345 mengkonsumsi 1,46G (kolom kedelapan dibagi 1024³) disk meskipun kurangnya
du
memperhatikan itu.vi
mengerikan dalam melihat file yang sangat besar; bahkan 100MB besar untuk itu. 1.5G (atau seberapa besar sebenarnya file itu) konyol.Solusinya adalah
sudo kill -HUP 12345
(jika itu tidak berhasil, saya akansudo kill 12345
dan jika itu juga gagal, yang ditakutikill -9
akan ikut bermain).Hindari editor teks pada file besar. Contoh solusi untuk skimming cepat:
Dengan asumsi panjang garis yang masuk akal:
{ head -n1000 big.log; tail -n1000 big.log } |vim -R -
wc -l big.log |awk -v n=2000 'NR==FNR{L=$1;next}FNR%int(L/n)==1' - big.log |vim -R -
Dengan asumsi garis yang terlalu besar:
{ head -c8000 big.log; tail -c8000 big.log } |vim -R -
Ini digunakan
vim -R
sebagai gantiview
karenavim
hampir selalu lebih baik ... ketika itu diinstal. Jangan ragu untuk memasangnya keview
atauvi -R
sebagai gantinya.Jika Anda membuka file besar untuk benar-benar mengeditnya, pertimbangkan
sed
atauawk
atau pendekatan program lainnya.sumber
periksa apakah server Anda sudah menginstal agen ossec. Atau beberapa proses menggunakan file log yang dihapus. Di masa lalu saya adalah agen ossec.
sumber
periksa / hilang + ditemukan, saya punya sistem (centos 7) dan beberapa file di / hilang + ditemukan memakan semua ruang.
sumber