Topik ini membahas dua perintah untuk memahami pemakaian ruang disk, yaitu df yang melaporkan sisa ruang per sistem berkas dan du yang menghitung pemakaian per direktori. Keduanya dipakai berurutan ketika disk penuh: df menunjukkan sistem berkas mana yang jenuh, lalu du menelusuri direktori mana yang paling rakus. Setelah membacanya, pencarian penyebab disk penuh menjadi prosedur yang terarah alih-alih penghapusan dengan menebak-nebak.
df: sisa ruang per sistem berkas#
Perintah df menampilkan setiap sistem berkas yang terpasang beserta kapasitas, ruang terpakai, dan ruang tersedianya. Opsi -h (human-readable) menampilkan angka dalam satuan G dan M agar mudah dibaca. Argumen jalur, misalnya /, membuat df hanya menampilkan sistem berkas yang menampung jalur tersebut.
# sisa ruang pada sistem berkas yang menampung direktori akar
# nama sistem berkas dan angkanya disamarkan karena bergantung kondisi mesin
df -h / | sed -E 's/c-[a-z0-9-]+/c-mesin-sandbox/; s/[0-9.]+[GMK]/N/g; s/[0-9]+%/N%/'Filesystem Size Used Avail Use% Mounted on
c-mesin-sandbox N N N N% /Kolom Filesystem menunjuk nama sistem berkasnya, sedangkan kolom Mounted on menyatakan di cabang pohon mana ia dipasang. Pada lingkungan latihan ini sistem berkasnya bertipe overlay, yaitu mekanisme yang dipakai container, sehingga namanya panjang dan berbeda dari /dev/sda1 yang lazim pada server biasa. Nama panjang itu beserta angka ukurannya disamarkan pada keluaran di atas karena nilainya berbeda pada setiap mesin dan berubah seiring pemakaian. Nilai Use% adalah indikator utamanya: angka yang mendekati 100 persen berarti ruang hampir habis. Satuan G pada kolom Size berarti gibibyte, yaitu 1024 megabyte, bukan 1000 megabyte gaya pemasaran.
Tanpa argumen, df menampilkan seluruh sistem berkas yang terpasang, termasuk yang berbasis memori seperti tmpfs, sehingga keluarannya biasanya lebih dari satu baris. Untuk pemindaian cepat, df -h tanpa argumen sudah cukup untuk menemukan baris dengan Use% tertinggi. Baris tmpfs dapat diabaikan ketika mencari penyebab disk data penuh, karena isinya hanya tersimpan di memori.
du: pemakaian ruang per direktori#
Perintah du menghitung total ruang yang dipakai berkas dan direktori di bawah argumennya. Opsi -s merangkum hasilnya menjadi satu angka per argumen, sedangkan -a mendaftar berkas satu per satu. Kombinasi -h tetap berfungsi untuk satuan yang mudah dibaca.
# siapkan direktori kerja yang bersih
rm -rf /tmp/kerja-penggunaan-disk
mkdir -p /tmp/kerja-penggunaan-disk
cd /tmp/kerja-penggunaan-disk# buat dua subdirektori contoh
mkdir -p log arsip
# isi dengan berkas berukuran besar berisi nol
head -c 3M /dev/zero > log/kernel.log
head -c 512K /dev/zero > log/aplikasi.log
head -c 2M /dev/zero > arsip/cadangan.tar
# ukuran total direktori kerja dalam bentuk mudah dibaca
du -sh .5.6M .Angka total tersebut berasal dari tiga berkas contoh berukuran 3M, 512K, dan 2M, ditambah beberapa kilobyte untuk pencatatan direktorinya. Ukuran yang dilaporkan du dibulatkan ke atas per blok sistem berkas, sehingga berkas berukuran satu byte pun tercatat sebesar satu blok. Perbedaan kecil antara penjumlahan ukuran berkas dan angka du adalah hal yang normal karena pembulatan itu. Satu berkas dengan dua hard link juga hanya dihitung satu kali, karena du bekerja pada inode, bukan pada nama.
Langkah berikutnya adalah mengurutkan rinciannya dari yang terbesar.
# rincian setiap berkas dan direktori, diurutkan dari yang terbesar
du -ah . | sort -rh5.6M .
3.6M ./log
3.0M ./log/kernel.log
2.1M ./arsip
2.0M ./arsip/cadangan.tar
512K ./log/aplikasi.logOpsi -rh pada sort memahami satuan K dan M, sehingga pemakaian terbesar langsung muncul pada baris pertama, disusul berkas dan direktori pelakunya. Tanpa pengurutan, keluaran du mengikuti urutan penelusuran pohon dan pemicu terbesarnya harus dicari secara manual. Pola du -ah | sort -rh | head inilah yang dipakai berulang kali pada penelusuran nyata.
Prosedur menelusuri disk penuh#
Ketika Use% pada df mendekati 100 persen, pencarian dilakukan berlapis: mulai dari akar, turun ke direktori dengan angka terbesar, lalu berhenti ketika penyebabnya ditemukan. Opsi -x menjaga du agar tidak menyeberang ke sistem berkas lain yang terpasang di dalam pohon, sehingga jumlahnya tetap mewakili satu perangkat saja. Pada server nyata, penelusuran dari akar memerlukan hak root karena sebagian direktori tidak terbaca oleh pengguna biasa.
# tidak-dijalankan
# pola di server nyata: memerlukan hak root untuk membaca /var dan /home milik pengguna lain
sudo du -xh -d1 / 2>/dev/null | sort -rh | head -n 10Pada keluaran nyata, biasanya /var atau /home muncul sebagai kandidat terbesar. Penelusuran dilanjutkan satu tingkat lagi dengan pola yang sama, misalnya sudo du -xh -d1 /var | sort -rh, sampai berkas pelakunya ditemukan. Untuk log, pembersihan yang aman dilakukan melalui alat rotasi log seperti logrotate, bukan dengan menghapus berkas log yang masih ditulis oleh layanannya.
Fenomena pada peringatan di atas sering membingungkan: du melaporkan ruang longgar, tetapi df tetap menyatakan penuh. Kedua perintah tidak bertentangan, karena du menghitung berkas yang terlihat di pohon direktori, sedangkan df melaporkan blok yang masih dipegang sistem berkas. Menemukan proses yang memegang berkas terhapus memerlukan alat tambahan seperti lsof, dan cara tercepat biasanya memulai ulang layanannya.
Kesalahan umum#
Kesalahan pertama adalah membaca angka df dan du sebagai dua angka yang harus sama. Selain berkas terhapus yang masih dipegang proses, angka du juga berubah ketika pohonnya memuat sistem berkas lain yang terpasang di dalamnya, misalnya partisi /home yang dipasang di bawah /. Opsi -x pada du dan pembandingan yang dilakukan pada titik pasang yang sama menghindarkan dari kebingungan ini.
Kesalahan kedua adalah menjalankan du tanpa hak baca yang memadai. Direktori yang tidak dapat dibaca dilewati dalam diam, sehingga totalnya tampak kecil padahal pemakaiannya besar. Jalankan du dengan hak yang sesuai, misalnya melalui sudo pada server, agar angkanya mewakili kenyataan.
Kesalahan ketiga adalah mencampur adukan opsi -h dan -H. Opsi -h memakai pangkat 1024, sedangkan -H memakai pangkat 1000 gaya pemasaran penyimpanan, sehingga angka keduanya berbeda beberapa persen untuk berkas yang sama. Pilih satu opsi dan gunakan secara konsisten, terutama ketika angkanya dibandingkan antar laporan.
Ringkasan#
- df melaporkan kapasitas dan sisa ruang per sistem berkas, dengan
Use%sebagai indikator kejenuhannya. - du menghitung pemakaian per direktori, dan
-smerangkumnya sementara-amendaftar berkas satu per satu. - Pola
du -xh -d1 | sort -rh | headyang diulang dari tingkat ke tingkat adalah prosedur standar menelusuri disk penuh. - Selisih angka df dan du bukan error, melainkan akibat berkas terhapus yang masih dipegang proses atau sistem berkas lain di dalam pohon.
Referensi#
- df(1) — Debian manpages — Opsi tampilan df beserta penjelasan kolom-kolomnya.
- du(1) — Debian manpages
— Opsi
-s,-a, dan-xpada du beserta aturan pembulatan bloknya.