Ketika file besar dihapus di server, file mungkin masih dirujuk oleh proses, sehingga sistem file tidak memiliki lebih banyak ruang kosong.
Saya mencoba menggunakan lsof , tetapi sepertinya tidak mencantumkan file yang dihapus. fuser -c
memang bekerja lebih baik, tetapi daftar proses terlalu lama untuk memeriksanya untuk setiap proses, terutama karena setiap proses adalah proses Oracle.
bash-3.2# fuser -c /var
/var: 105o 29999o 20444c 3528c 27258o 7715o 3864o 3862o 2494o 18205o 17450co 17445co 14912co 14824co 14818co 14816o 14814o 8532c 8530c 7633com 7118o 6958o 6790c 6784co 6734o 6693o 6689o 6684o 6675o 6635o 6594c 6548o 6547o 6546o 6545o 6544o 6543o 6542o 6541o 6540o 6537o 6535o 6456o 6128co 6113o 335o 245co 229o 161o 8o
bash-3.2# du -hs /proc
139T /proc
Kadang-kadang terjadi bahwa file terhapus oleh aplikasi atau pengguna, misalnya file log dan file ini masih dirujuk oleh proses yang tidak dapat dimulai ulang.
Apakah ada metode barang untuk mendapatkan kembali ruang disk pada file yang dihapus tanpa memulai kembali proses yang memiliki referensi ke file yang dihapus ini?
cp /dev/null file
cp /dev/null
adalah perintah nol karenacp
tidak ada yang perlu disalin, pengalihan sederhana sangat setara:>file
atau bahkan>file
Jawaban:
Temukan semua deskriptor file yang dibuka.
Grep dihapus.
StdError ke / dev / null
Keluaran:
Atau Anda bisa menggunakan awk
find / proc / * / fd -ls 2> / dev / null | awk '/ dihapus / {print $ 11}';
output awk (diuji di bash Ubuntu 12.04):
Temukan dan pangkas semua file yang dihapus (diuji di bash Ubuntu 12.04):
(JANGAN MELAKUKAN INI JIKA ANDA TIDAK TAHU APA YANG ANDA LAKUKAN)
-p prompt sebelum menjalankan truncate
Cara yang lebih baik adalah pemotongan manual
Pemotongan manual:
atau:
atau:
Nikmati ;)
sumber
Berikut adalah contoh sederhana dengan
less
:Anggaplah kita memiliki file
my10MBfile
,:Sekarang saya membuka file itu dengan
less
(ya, itu adalah file biner ... sudahlah)Lalu saya menghapus file itu
Masih ada di sana, tetapi dihapus. Lihatlah kolom ke-4 keluaran lsof: File Descriptor number 4 open for Reading (4r)
Ayo jalankan GDB!
Itu dia!
10 MB kami diterima kembali :)
Prosesnya masih berjalan.
sumber
Perintah ini akan menampilkan semua file yang dihapus masih terbuka di sistem Solaris:
Anda dapat memotong yang Anda yakin ingin dengan perintah ini:
dengan p menjadi id proses dan x deskriptor file dikembalikan oleh perintah pertama.
Jangan khawatir jika dengan beberapa program ukuran yang dilaporkan
ls
dikembalikan ke ukuran sebelum pemotongan setelah beberapa saat, ukuran sebenarnya yang digunakan pada disk akan jauh lebih kecil karena file sekarang jarang.sumber
Anda dapat mencoba untuk pergi ke
/proc/<pid>/fd
direktori dan deskriptor file truncate yang sesuai. Katakanlah fd = 3 poin ke file pid yang dihapus == 123:sumber
Tidak ada solusi yang berhasil untuk saya. Hanya setelah menggunakan Bleachbit sebagai root saya bisa dengan benar membebaskan ruang yang terkait dengan file yang dihapus.
sumber