df mengatakan disk penuh, tetapi tidak

58

Pada server virtual yang menjalankan Ubuntu 10.04, df melaporkan yang berikut:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

Ini membingungkan saya karena dua alasan: 1.) df mengatakan bahwa / dev / sda1, yang dipasang di /, memiliki kapasitas 7,4 gigabyte, yang hanya menggunakan 7,0 gigabyte, namun dilaporkan / penuh 100 persen; dan 2.) Saya dapat membuat file di / jadi itu jelas memiliki ruang tersisa.

Mungkin relevan adalah bahwa direktori / www adalah tautan simbolis ke / home / www, yang berada di partisi yang berbeda (/ dev / sda3, dipasang di / home).

Adakah yang bisa memberikan saran tentang apa yang sedang terjadi di sini? Server tampaknya berfungsi tanpa masalah, tetapi saya ingin memastikan bahwa tidak ada masalah dengan tabel partisi, sistem file atau hal lain yang mungkin mengakibatkan ledakan (atau ledakan) nanti.

Chris
sumber
Terima kasih untuk semua jawaban yang bermanfaat. Saya tidak dapat membuat file sebagai pengguna normal sehingga tampaknya buffer 5 persen yang mencegah bencana. Sekarang saya hanya perlu mencari tahu mengapa disk penuh (saya agak khawatir sesuatu yang berbahaya bisa terjadi karena tidak ada file log yang mengambil banyak ruang dan tidak ada banyak perangkat lunak yang diinstal, hanya server LAMP sederhana) ...
Chris
3
Tempat pertama yang saya lihat adalah / tmp. Kemungkinan lain adalah Anda memiliki file yang dihapus yang sedang dijalankan oleh suatu program. Saya pikir Anda dapat menjalankan 'lsof | grep menghapus 'sebagai root untuk menemukannya.
Scott

Jawaban:

103

Mungkin saja suatu proses telah membuka file besar yang telah dihapus. Anda harus mematikan proses itu untuk membebaskan ruang. Anda mungkin dapat mengidentifikasi proses dengan menggunakan lsof. Di Linux yang dihapus namun file yang terbuka diketahui lsof dan ditandai sebagai (dihapus) dalam output lsof.

Anda dapat memeriksanya dengan sudo lsof +L1

mkomitee
sumber
8
Ini memecahkan misteri bagiku. Saya menghapus file log besar dari uwsgi tanpa me-restart layanan. Ketika ditanya df -ah, saya mendapatkan disk penuh, tetapi du -sh /mengatakan bahwa saya harus memiliki ruang kosong. Setelah memulai ulang uwsgi, saya mendapat banyak ruang kosong!
Fabio Montefuscolo
Saya memiliki log senilai 40G terjebak dalam limbo dan lsof + L1 memberi saya visi x-ray untuk melihat apa yang terjadi ;-) Yang harus saya lakukan adalah me-restart layanan.
PJ Brunet
46

5% (secara default) dari sistem file dicadangkan untuk kasus-kasus di mana sistem file terisi untuk mencegah masalah serius. Sistem file Anda penuh. Tidak ada bencana yang terjadi karena buffer 5% - root diizinkan untuk menggunakan buffer keamanan itu dan, dalam pengaturan Anda, pengguna non-root tidak punya alasan untuk menulis ke sistem file itu.

Jika Anda memiliki daemon yang dijalankan sebagai pengguna non-root tetapi perlu mengelola file di sistem file itu, semuanya akan rusak. Salah satu daemon yang umum adalah named. Yang lain adalah ntpd.

David Schwartz
sumber
1
Untuk pertanyaan MENGAPA disk Anda penuh, 7G sebenarnya tidak terlalu banyak ruang. Tampaknya Anda juga membuang semuanya di bawah satu partisi / sistem file ( /). Ini umumnya dianggap sebagai Hal yang Buruk (karena jika sesuatu menjadi kacau /mengisi, dan dunia berakhir) tetapi distribusi Linux masih bertahan dalam melakukannya karena itu "lebih sederhana". Saya akan mulai dengan mencari /var(esp. /var/log) Untuk file log besar. du -hs /(sebagai root) akan membantu Anda menemukan direktori terbesar dan mungkin mengarahkan Anda pada apa yang perlu dibersihkan.
voretaq7
35

Anda mungkin kehabisan inode. Periksa penggunaan inode dengan perintah ini:

df -i
Clifford Ilkay
sumber
17

Sebagian besar filesystem Linux menyediakan ruang 5% untuk hanya menggunakan pengguna root.

Anda dapat melihat ini dengan misalnya

dumpe2fs /dev/sda1 | grep -i reserved

Anda dapat mengubah jumlah yang dipesan menggunakan:

tune2fs -m 0 /dev/sda1

Dalam kebanyakan kasus, server akan tampak berfungsi dengan baik - dengan asumsi semua proses dijalankan sebagai 'root'.

David Goodwin
sumber
8

Saya punya masalah ini dan bingung oleh kenyataan menghapus berbagai file besar tidak memperbaiki situasi (tidak tahu tentang buffer 5%) tetap mengikuti beberapa petunjuk di sini

Dari root berjalan ke direktori terbesar yang diungkapkan oleh melakukan berulang:

du -sh */ 

sampai saya datang direktori untuk file log server web yang memiliki beberapa log yang benar-benar besar

yang saya terpotong dengan

:>lighttpd.error.log

tiba-tiba dh -h turun hingga 48% digunakan!

zzapper
sumber
14
Seharusnya benar-benar diakhiri dengan "... lalu saya mengatur rotasi log."
hayalci
hayalci: menemukan bahwa logrotation menunjuk ke direktori yang salah.
zzapper
8

Selain penyebab yang sudah disarankan, dalam beberapa kasus bisa juga berikut:

  • disk yang berbeda dipasang "di atas" folder yang ada yang penuh dengan data
  • du akan menghitung ukuran yang dihabiskan dari mount disk dan df akan menunjukkan benar-benar dihabiskan
  • solusi: (bila memungkinkan) unmount semua disk non-root dan periksa kembali ukurannya du -md 1. Perbaiki situasi dengan memindahkan folder tersembunyi ke tempat lain atau pasang di tempat yang berbeda.
Robert Lujo
sumber
bagaimana Anda menemukan titik mount selain df?
Hogan
@Hogan: mungkin memanggil "mount" atau "cat / etc / fstab" akan membantu?
Robert Lujo
5

df -hmembulatkan nilai-nilai. Bahkan persentasenya bulat. Abaikan -hdan Anda melihat perbedaan berbutir halus.

Oh Dan ext3 serta turunannya memiliki persentase (default 5%) untuk sistem file untuk konstelasi bermasalah ini. Jika root filesystem Anda benar-benar penuh (0 byte tersisa) Anda tidak dapat mem-boot sistem. Jadi porsi yang dipesan mencegah ini.

mailq
sumber
Bisa jadi dia kehabisan inode gratis. Jalankan 'df -i' untuk mendapatkan penggunaan inode.
Andrew Case
Dia tidak memberikan informasi bahwa disk adalah penuh. Dia hanya berpikir bahwa disk sudah penuh. 100% ruang yang digunakan tanpa kesalahan hanya "hampir penuh".
mailq
1

Saya melakukan pembaruan besar dari beberapa perpustakaan dan ada banyak perpustakaan yang tidak perlu dan file temporal jadi saya mengosongkan ruang di folder "/" menggunakan:

apt-get install -f
sudo apt-get clean

Dan kosongkan sampahmu

aburbanol
sumber
Ini adalah saran umum yang masuk akal untuk mengurangi penggunaan disk, tetapi tidak menjawab pertanyaan tentang mengapa df mengatakan disk penuh ketika tidak.
Andrew Schulman
0

periksa / hilang + ditemukan, saya punya sistem (centos 7) dan beberapa file di / hilang + ditemukan memakan semua ruang

Jude Zhu
sumber
0

Jika partisi Anda btrfs, mungkin ada ruang subvolume yang mengambil ruang. Filesystem btrfs dapat memiliki banyak subvolume, hanya satu yang di-mount. Anda dapat menggunakan btrfs subvolume list <dir>untuk mendaftar semua subvolume dan btrfs subvolume delete <dir>/<subvolume>menghapus satu. Pastikan Anda tidak menghapus yang sudah terpasang secara default.

pengguna377486
sumber