Home >> Articles
Mengapa hasil df dan du berbeda?
Kalau Anda bekerja pada Linux Server, kemungkinan anda pernah berhadapan dengan situasi seperti ini. Anda ingin mengalokasikan free disk dengan menghapus file-file yang tidak diperlukan lagi, tetapi hasil dari perintah df -k tidak menunjukkan perubahan yang signifikan.
Kemudian Anda mencoba perintah du -k dan melihat jumlah disk space yang dialokasikan untuk direktori yang Anda perlukan tidak terlalu besar dan Anda dapat melakukan apa pun yang Anda ingin lakukan.
Misalkan
$ df -h /tmp/ Filesystem Size Used Avail Capacity Mounted on /dev/hda3 500M 22M 478M 4% /tmp $ $ $ du -h /tmp 40M /tmp
Jadi mengapa, hasil df dan du ini berbeda?
Jawabannya adalah karena perbedaan file deskriptor yang sedang digunakan.
df menggunakan file deskriptor yang sedang digunakan (open file descriptor) untuk menghitung free disk space, sedangkan du menghitung alokasi disk pada file yang ada.
Pada saat suatu proses membuka/menggunakan file, file deskriptor terhadap file tersebut akan dialokasikan. Hal tersebut dapat dilihat menggunakan perintah lsof.
Kemudian, apabila file tersebut dihapus pada saat proses masih menggunakan file tersebut, file deskriptor pada file tersebut akan tetap terbuka, dan menjadi target dalam penghitungan free disk space oleh perintah df. Sedangkan, perintah du tidak menghitung file tersebut, karena file tersebut dianggap sudah tidak ada lagi.
Inilah yang mengakibatkan perbedaan hasil perintah df dan du.
Kemudian bagaimana cara menyamakan hasil tersebut?
Mudah saja, kita tinggal menutup file deskriptor yang menggunakan file-file yang sudah dihapus tersebut.
Cari proses ID yang menggunakan file tersebut, lalu gunakan kill -HUP untuk mengulang proses
tersebut menggunakan file lain, yang belum dihapus.
$ lsof | grep "deleted" | head -1 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME gnome-key 2911 root txt REG 3,2 92328 519005 /usr/bin/gnome-keyring-daemon.#prelink#.4aAELN (deleted) $ kill -HUP 2911
Pastikan Anda mencoba di testing environment sebelum mencobanya di production environment ya.
Selamat mencoba