Penggunaan Disk

Menganalisis pemakaian ruang dengan du dan df untuk menemukan penyebab disk penuh.

Daftar isi

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.

bash
# 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%/'
text Keluaran
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.

bash
# siapkan direktori kerja yang bersih
rm -rf /tmp/kerja-penggunaan-disk
mkdir -p /tmp/kerja-penggunaan-disk
cd /tmp/kerja-penggunaan-disk
bash
# 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 .
text Keluaran
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.

bash
# rincian setiap berkas dan direktori, diurutkan dari yang terbesar
du -ah . | sort -rh
text Keluaran
5.6M	.
3.6M	./log
3.0M	./log/kernel.log
2.1M	./arsip
2.0M	./arsip/cadangan.tar
512K	./log/aplikasi.log

Opsi -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.

bash
# 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 10

Pada 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 -s merangkumnya sementara -a mendaftar berkas satu per satu.
  • Pola du -xh -d1 | sort -rh | head yang 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#