menghapus file tetapi ruang disk masih penuh

26

Berurusan dengan kotak CentOS 5.6 lama, tanpa pengaturan lvm, sistem file root saya / penuh, saya telah menghapus banyak file log lama dan file aplikasi yang tidak saya butuhkan, yang berukuran lebih dari 2 -5GB, namun sistem saya masih melaporkan bahwa disk sudah penuh.

[root@tornms1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             130G  124G     0 100% /
/dev/sdb1             264G  188M  250G   1% /data
/dev/sda1              99M   24M   71M  26% /boot
tmpfs                 2.0G     0  2.0G   0% /dev/shm



[root@tornms1 ~]# mount
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sdb1 on /data type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

Ada ide tentang apa yang harus saya coba lakukan selanjutnya? sayangnya me-reboot kotak bukanlah pilihan saat ini.

pengguna1007727
sumber
1
Maaf karena mengajukan pertanyaan bodoh, tetapi apakah Anda memastikan /.Trash/kosong? Apakah kamu sudah selesai sudo rm -Rf ~/.Trash/*?
Seni Gertner
Ini adalah server, saya tidak menginstal xwindow, oleh karena itu saya tidak memiliki folder .trash di akun root saya.
user1007727
Buruk saya, saya berasumsi /. Trash / ada di semua sistem seperti-unix.
Seni Gertner
Anda juga dapat mencoba perintah sync ( linux.die.net/man/8/sync ) mungkin semua operasi Anda masih di-cache.
weberik

Jawaban:

38

Dua hal mungkin terjadi di sini.

Pertama , sistem file Anda telah mencadangkan beberapa ruang yang hanya rootbisa digunakan untuk menulis, sehingga proses sistem kritis tidak gagal ketika pengguna normal kehabisan ruang disk. Itu sebabnya Anda melihat 124G dari 130G digunakan, tetapi nol tersedia. Mungkin file yang Anda hapus membawa pemanfaatan ke titik ini, tetapi tidak di bawah ambang batas untuk pengguna normal.

Jika ini adalah situasi Anda dan Anda putus asa, Anda mungkin dapat mengubah jumlah ruang yang disediakan root. Untuk menguranginya menjadi 1% (standarnya adalah 5%), perintah Anda adalah

# tune2fs -m 1 /dev/sda3

Kedua , sistem operasi tidak akan merilis ruang disk untuk file yang dihapus yang masih terbuka. Jika Anda telah menghapus (misalnya) salah satu file log Apache, Anda harus memulai ulang Apache untuk membebaskan ruang.

Flup
sumber
1
ya, yang kedua harus menjadi yang pertama!
mulya
Pertanyaan & jawaban ini menambahkan informasi lebih lanjut superuser.com/questions/444269/… .
luka5z
18

Jika Anda menghapus file yang sedang digunakan oleh suatu proses, Anda tidak dapat lagi melihat file ls. Proses masih menulis ke file itu sampai Anda menghentikan proses.

Untuk melihat file-file yang dihapus, jalankan saja lsof|grep delete

Tao Zhou
sumber
1
Ini adalah masalah dalam kasus saya. Terima kasih, informasi yang sangat berguna.
Dag Sondre Hansen
10

2 cara lain untuk mendapatkan disk adalah masalah penuh :

1) tersembunyi di bawah titik mount: linux akan menampilkan disk penuh dengan file "tersembunyi" di bawah titik mount. Jika Anda memiliki data yang ditulis ke drive dan me-mount sistem file lain di atasnya, linux dengan benar mencatat penggunaan disk meskipun Anda tidak dapat melihat file di bawah titik mount. Jika Anda memiliki nfs mount, coba umount mereka dan cari untuk melihat apakah ada sesuatu yang tidak sengaja ditulis dalam direktori tersebut sebelum mount.

2) file rusak: Saya melihat ini kadang-kadang di windows ke linux transfer file melalui SMB. Satu file gagal menutup deskriptor file dan Anda menghasilkan file sampah 4GB.

Ini bisa lebih membosankan untuk diperbaiki, karena Anda perlu menemukan subdirektori tempat file tersebut berada, tetapi mudah untuk memperbaikinya karena file itu sendiri dapat dengan mudah dilepas. Saya menggunakan duperintah dan melakukan daftar subdir root untuk mencari tahu di mana ruang file sedang digunakan.

cd /
du -sh ./* 

Jumlah direktori tingkat atas biasanya terbatas, jadi saya mengatur bendera yang dapat dibaca manusia-h untuk melihat subdirektori mana yang merupakan space hog.

Kemudian Anda masuk ke anak bermasalah dan ulangi proses untuk semua item di dalamnya. Untuk mempermudah menemukan barang-barang besar, kami sedikit mengubah du dan memasangkannya dengan semacam.

cd /<suspiciously large dir>
du -s ./* | sort -n

yang menghasilkan keluaran terkecil hingga terbesar dengan ukuran byte untuk semua file dan direktori

4          ./bin 
462220     ./Documents
578899     ./Downloads
5788998769 ./Grocery List

Setelah Anda menemukan file yang terlalu besar, biasanya Anda bisa menghapusnya.

Dan L
sumber
Tips hebat! Saya menelusuri folder di bawah / menggunakan du dan menemukan beberapa gambar sistem yang sangat besar di bawah SDK android. Dihapus mereka dan semuanya kembali normal :)
Pupper
4

Anda bisa mencari tahu file mana yang terbuka dengan lsof. Ini dapat menghasilkan banyak output, jadi saya membatasi contoh di bawah ini untuk baris yang diakhiri dengan log:

# lsof | grep log$
rsyslogd   2109     syslog    0u     unix 0xffff88022fa230c0      0t0       8894      /dev/log
rsyslogd   2109     syslog    1w      REG              252,6    62393         26 /var/log/syslog
rsyslogd   2109     syslog    2w      REG              252,6   113725        122 /var/log/auth.log
rsyslogd   2109     syslog    3u     unix 0xffff88022fa23740      0t0       8921 /var/spool/postfix/dev/log
rsyslogd   2109     syslog    5w      REG              252,6    65624        106 /var/log/mail.log
/usr/sbin  2129       root    2w      REG              252,6    93602         38 /var/log/munin/munin-node.log
/usr/sbin  2129       root    4w      REG              252,6    93602         38 /var/log/munin/munin-node.log
...
jris198944
sumber
1

Jika beberapa file dihapus tetapi masih digunakan oleh beberapa proses maka ruang itu tidak akan dirilis. Dalam hal ini, baik restart proses yang menggunakan file atau membatalkan file. Itu selalu praktik yang baik untuk membatalkan file seperti itu daripada menghapusnya. Untuk menemukan file yang dihapus tetapi masih digunakan oleh beberapa proses

#lsof +L1

itu akan memberikan proses id dan file descriptor. Untuk membatalkan file yang dihapus oleh deskriptor file

#echo "" > /proc/$pid/fd/$fd 
Sagar Jagnade
sumber
1

Ketikkan perintah

#lsof +L1

Yang akan menampilkan daftar file yang menyimpan memori dengan kutipan yang dihapus.

Perhatikan pid (id Proses) file

Bunuh prosesnya

#kill <pid>

Memori akan dirilis oleh proses

Periksa dengan perintah

#df -h
Javeed Shakeel
sumber
0

Selain apa yang telah dijelaskan, masalahnya mungkin ada titik pemasangan lain dari direktori file yang dihapus pada perangkat disk lain yang terpasang pada server yang sama. Periksa tunggangan saat ini dan entri fstab.

Laith Leo Alobaidy
sumber
0

Masalah aktual yang diamati di alam liar:

Pastikan Anda menghapus file yang sebenarnya dan tidak symlink ke file. Ini dapat menjadi kasus untuk file log terutama.

icc97
sumber