Pertanyaan Disk penuh, du menceritakan berbeda. Bagaimana cara menyelidiki lebih lanjut?


Saya memiliki disk SCSI di server (perangkat keras Raid 1), 32G, ext3 filesytem. df memberi tahu saya bahwa diska 100% penuh. Jika saya menghapus 1G, ini ditampilkan dengan benar.

Namun, jika saya menjalankan du -h -x / kemudian du memberitahu saya bahwa hanya 12G yang digunakan (saya gunakan -x karena beberapa tunggangan Samba).

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 sebuah fsck yang pergi tanpa kesalahan. Haruskah saya jalankan badblocks? lsof menunjukkan saya tidak ada file yang dihapus terbuka, lost+found kosong dan tidak ada pernyataan peringatan / kesalahan / gagal yang jelas dalam file pesan.

Jangan ragu untuk meminta detail lebih lanjut tentang pengaturannya.


89
2018-05-30 12:29




Ini sangat dekat dengan pertanyaan: linux - du vs df difference (serverfault.com/questions/57098/du-vs-df-difference). Solusinya adalah file di bawah titik mount sebagai jawaban OldTroll. - Chris Ting


Jawaban:


Periksa file yang terletak di bawah titik mount. Seringkali jika Anda me-mount direktori (misalnya 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 sementara dalam mode single user membuang file ke dalam direktori yang tidak bisa saya lihat kecuali di satu usermode (karena sistem direktori lain yang dipasang di atas mereka).


87
2018-05-30 12:35



Anda dapat menemukan file-file tersembunyi ini tanpa perlu meng-unmount direktori. Lihatlah jawaban Marcel G di bawah ini yang menjelaskan caranya. - mhsekhavat
Anda harus menunjukkan perintah CLI untuk melakukan ini dalam jawaban Anda - Jonathan
LAKUKAN PERIKSA bahkan jika menurut Anda itu tidak masuk akal bagi Anda! - Chris


Hanya tersandung di halaman ini ketika mencoba untuk melacak masalah pada server lokal.

Dalam kasus saya itu df -h dan du -sh tidak cocok dengan sekitar 50% dari ukuran hard disk.

Ini disebabkan oleh apache (httpd) menyimpan file log besar di memori yang telah dihapus dari disk.

Ini dilacak dengan berlari lsof | grep "/var" | grep deleted dimana /var adalah partisi yang perlu saya bersihkan.

Hasilnya menunjukkan garis-garis seperti ini:
httpd 32617 nobody 106w REG 9,4 1835222944 688166 /var/log/apache/awstats_log (deleted)

Situasi kemudian diselesaikan dengan memulai kembali apache (service httpd restart), dan membersihkan 2gb ruang disk, dengan membiarkan kunci pada file yang dihapus untuk dibersihkan.


71
2018-03-12 11:10



Bagi saya, kunci di mana tidak dirilis bahkan setelah saya menghentikan program (zombie?). saya harus kill -9 'pid' untuk melepaskan kunci. misalnya: Untuk httpd Anda kill -9 32617. - Micka
Catatan kecil: Anda mungkin harus berlari lsof sebagai sudo atau tidak semua deskriptor file terbuka akan muncul - ChrisWue
Saya bertemu dengan H2, yang menambahkan beberapa gigs ke logfile setiap hari. Daripada memulai ulang H2 (lambat), saya menggunakan sudo truncate -s0 /proc/(h2 PID)/(descriptor number obtained from ls /proc/h2pid/fd). - Desty
Dalam kasus saya, bahkan ketika restart httpd ruang tidak dirilis. Ketika saya berlari /etc/init.d/rsyslog restart itu berhasil: D - Thanh Nguyen Van
Anda dapat melewati greps dan lakukan saja lsof -a +L1 /var, dimana -a berarti DAN semua ketentuan (defaultnya adalah OR), +L1berarti hanya daftar file dengan jumlah tautan kurang dari 1 (yaitu, file yang dihapus dengan deskriptor file terbuka), dan /var membatasi ke file di bawah titik mount itu - kbolino


Saya setuju dengan jawaban OldTroll sebagai penyebab paling mungkin untuk ruang "hilang" Anda.

Di Linux Anda dapat dengan mudah me-remount seluruh partisi root (atau partisi lain dalam hal ini) ke tempat lain di sistem file Anda katakan / mnt misalnya, hanya mengeluarkan

mount -o bind / /mnt

maka Anda bisa melakukan

du -h /mnt

dan lihat apa yang menggunakan ruang Anda.

Ps: maaf karena menambahkan jawaban baru dan bukan komentar tetapi saya membutuhkan beberapa pemformatan agar posting ini dapat dibaca.


40
2018-05-30 13:54



Terima kasih banyak atas tip ini. Izinkan saya untuk mencari dan menghapus file "tersembunyi" besar saya tanpa downtime! - choover
Terima kasih - ini menunjukkan bahwa buruh pelabuhan mengisi harddisk saya dengan diff in /var/lib/docker/aufs/diff/ - naught101


Melihat apa df -i kata. Bisa jadi Anda keluar dari inode, yang mungkin terjadi jika ada sejumlah besar file kecil dalam filesystem itu, yang menggunakan semua inode yang tersedia tanpa menghabiskan semua ruang yang tersedia.


23
2018-05-30 14:10



Ukuran file dan jumlah ruang yang dibutuhkan pada sistem file adalah dua hal yang terpisah. Semakin kecil ukuran file, semakin besar perbedaan di antara mereka. Jika Anda menulis skrip yang merangkum ukuran file dan membandingkannya dengan file du -s dari subtree yang sama, Anda akan mendapatkan ide yang bagus jika itu yang terjadi di sini. - Marcin


Dalam kasus saya ini ada hubungannya dengan file yang dihapus besar. Itu cukup menyakitkan untuk dipecahkan sebelum saya menemukan halaman ini, yang menempatkan saya pada jalur yang benar.

Saya akhirnya memecahkan masalah dengan menggunakan lsof | grep deleted, yang menunjukkan kepada saya program mana yang menyimpan dua file log yang sangat besar (sebesar 5GB dari partisi root 8GB saya yang tersedia).


15
2017-11-14 18:15



Jawaban ini membuat saya bertanya-tanya mengapa Anda menyimpan file-file log pada partisi root, terutama yang kecil ... tetapi untuk masing-masing mereka sendiri, saya kira ... - α CVn
Saya memiliki masalah serupa, saya telah memulai ulang semua aplikasi yang menggunakan file yang dihapus, saya kira ada proses zombie yang masih berpegang pada file yang dihapus besar - user1965449
Ini adalah kasus untuk kami, aplikasi linux pemrosesan log yang dikenal sebagai file yang disimpan filebeat terbuka. - Pykler


File yang dibuka oleh program tidak benar-benar hilang (berhenti menghabiskan ruang disk) ketika Anda menghapusnya, mereka pergi ketika program menutupnya. Program mungkin memiliki file sementara besar yang Anda (dan du) tidak bisa lihat. Jika ini adalah program zombie, Anda mungkin perlu reboot untuk menghapus file-file itu.


5
2018-05-30 12:51



OP mengatakan dia me-reboot sistem dan masalah berlanjut. - OldTroll
Saya punya zombie yang tidak akan melepaskan kunci pada file, saya kill -9 'pid' mereka untuk melepaskan kunci dan mendapatkan ruang disk kembali. - Micka


Ini adalah metode termudah yang saya temukan hingga saat ini untuk menemukan file besar!

Berikut ini contoh jika root mount Anda penuh / (mount / root) Contoh:

cd / (jadi Anda berada di root)

ls | xargs du -hs

Contoh Keluaran:

 9.4M bin
 Boot 63M
 4.0K cgroup
 680K dev
 31 juta dsb
 6,3G rumah
 Lib 313M
 32 m lib64
 16K hilang + ditemukan
 Media 61G
 4,0K mnt
 113M memilih
 du: tidak dapat mengakses `proc / 6102 / task / 6102 / fd / 4 ': Tidak ada file atau direktori semacam itu
 0 proc
 19 m root
 840K lari
 19M sbin
 4.0K selinux
 4.0K srv
 Toko 25G
 Tmp 26 m

maka Anda akan memperhatikan itu toko besar lakukan a cd / store

dan jalankan lagi

ls | xargs du -hs

Contoh keluaran:
 109 juta cadangan
 358M fnb
 4,0G iso
 8.0K ks
 16K hilang + ditemukan
 47 M root
 Skrip 11M
 79 juta tmp
 21G vms

dalam hal ini direktori vms adalah ruang babi.


4
2018-06-26 13:05



Mengapa tidak menggunakan alat yang lebih sederhana seperti baobab? (Lihat marzocca.net/linux/baobab/baobab-getting-started.html) - Yvan
Hm ls + xargs tampak seperti berlebihan, du -sh /* bekerja dengan baik dengan sendirinya - ChrisWue
jika Anda tidak tahu tentang ncdu ... Anda akan berterima kasih kepada saya nanti: dev.yorhel.nl/ncdu - Troy Folger


Coba ini untuk melihat apakah proses mati / hung terkunci saat masih menulis ke disk: lsof | grep "/ mnt"

Kemudian, coba bunuh setiap PID yang macet (terutama cari garis yang diakhiri dengan "(dihapus"))


3
2018-06-26 10:38



Terima kasih! Saya dapat menemukan bahwa proses server SFTP menahan file yang dihapus - lyomi


Jadi saya punya masalah ini di Centos 7 juga dan menemukan solusi setelah mencoba banyak barang seperti bleachbit dan membersihkan / usr dan / var meskipun mereka hanya menunjukkan sekitar 7G masing-masing. Masih menunjukkan 50G 50G yang digunakan di partisi root tetapi hanya menunjukkan 9G penggunaan file. Menjalankan cd ubuntu hidup dan unmount partisi 50G yang mengganggu, membuka terminal dan menjalankan xfs_check dan xfs_repair pada partisi. Saya kemudian me-remount partisi dan direktori saya yang hilang + telah diperluas menjadi 40G. Diurutkan hilang + ditemukan oleh ukuran dan menemukan file log teks 38G untuk uap 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 caranya agar steam log tidak bertambah besar lagi.


1
2018-05-04 18:01



Apakah ini terjadi pada Anda di tempat kerja? serverfault.com/help/on-topic - chicks
Tidak hanya di komputer rumah saya. - Justin Chadwick
xfs_fsr memperbaiki masalah ini untuk kami - Druska