Baru-baru ini di kotak server Linux saya, salah satu partisi disk penuh dan harus menghapus 100-an MB file besar untuk mengosongkan ruang. Setelah mengosongkan ruang, partisi masih menunjukkan penuh dan tidak ada ruang kosong untuk menyimpan file saya. Kemudian saya terkejut melihat perbedaan di bawah ini:
Perintah penggunaan disk (du) menunjukkan ruang yang digunakan hanya 11G!
-bash-3.2# du -chs /myhome/ 11G /myhome/ 11G total -bash-3.2#
Perintah di atas tidak menyertakan file dan direktori titik tersembunyi. Gunakan perintah di bawah ini untuk menemukan penggunaan disk oleh file dan direktori titik tersembunyi juga.
-bash-3.2#du -sch .[!.]* /myhome/*
Jika Anda masih ingin membuat daftar file yang tepat dan jalur absolutnya, gunakan perintah di bawah ini:
-bash-3.2# du -h -x /myhome/*
Tetapi perintah df ditampilkan sebagai partisi disk /myhome/ sebagai penuh!!!
-bash-3.2$ df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p8 20G 14G 4.7G 75% / /dev/cciss/c0d0p9 9.7G 1.3G 8.0G 14% /tmp /dev/cciss/c0d0p3 30G 4.3G 24G 16% /usr /dev/cciss/c0d0p10 44G 41G 0G 100% /myhome /dev/cciss/c0d0p6 30G 27G 670M 98% /var /dev/cciss/c0d0p5 30G 20G 8.0G 72% /opt /dev/cciss/c0d0p2 78G 21G 54G 28% /export /dev/cciss/c0d0p1 4.9G 173M 4.5G 4% /boot tmpfs 7.9G 0 7 .9G 0% /dev/shm tmpfs 491M 61M 431M 13% /var/lib/ganglia/rrds
Sekarang tantangannya adalah mencari tahu di mana ruang yang tersisa? Apakah itu tersembunyi di suatu tempat?
Gunakan perintah LSOF untuk menemukan file yang dibuka
Anda mungkin telah menghapus beberapa file, tetapi prosesnya akan tetap terbuka. Sampai Anda menutup file-file itu, ruang tidak akan dikosongkan. Di bawah perintah “lsof” akan memberi tahu Anda file terhapus mana yang masih dibiarkan terbuka!
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted)
Sekarang Anda akan memiliki beberapa petunjuk bukan? Ya, file /myhome/var/container.log yang telah dihapus masih terbuka dengan id proses :10249. Sekarang masuk ke direktori id proses yang sesuai di /proc seperti yang ditunjukkan di bawah ini:
-bash-3.2# cd /proc/10249/fd/
Buat daftar file untuk melihat pengelola file yang menautkan ke file yang dihapus.
-bash-3.2# ls -lrt | grep /myhome/ lrwx------ 1 ramya ramya 64 Feb 13 14:04 2 -> /myhome/var/container.log (deleted) lrwx------ 1 ramya ramya 64 Feb 13 14:04 1 -> /myhome/var/container.log (deleted)
Sekarang hapus file handler yang sesuai untuk mengosongkan ruang menggunakan perintah di bawah ini:
-bash-3.2# cat /dev/null > /proc/10249/fd/1 -bash-3.2# cat /dev/null > /proc/10249/fd/2
Perhatikan bahwa inode akan tetap terbuka, tetapi sekarang panjangnya 0.
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 0 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 0 4645619 /myhome/var/container.log (deleted)
Sekarang periksa partisi disk untuk membuat Anda tersenyum.
-bash-3.2# df -h |grep /myhome /dev/cciss/c0d0p10 44G 12G 30G 28% /myhome