“Disk penuh” adalah keluhan server paling klasik — dan yang paling sering salah didiagnosis. Linux menyediakan dua keluarga alat yang menjawab dua pertanyaan berbeda: df memotret kapasitas tiap filesystem dari luar, sedangkan du menimbang isi direktori dari dalam. Ditambah find untuk memburu file terbesar dan ncdu untuk menjelajahnya secara interaktif, keempatnya membentuk alur perburuan yang lengkap. Pada Chapter ini kita bedah cara membaca keluaran masing-masing, termasuk jebakan paling terkenal: ruang yang masih longgar tetapi file baru tetap ditolak karena inode yang habis.
df: Foto Kapasitas per Filesystem #
Perintah df (disk free) meringkas setiap filesystem yang terpasang dalam satu tabel. Berikut contoh tampilan tipikal di mesin dengan tiga partisi:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 32G 5.2G 87% /
/dev/sda2 472M 58M 390M 13% /boot
/dev/sdb1 100G 96G 0 100% /mnt/dataEnam kolomnya perlu dibaca teliti: kolom pertama adalah perangkat (atau tmpfs untuk filesystem memori), Size kapasitas total, Used dan Avail yang terpakai dan tersisa, Use% rasionya, dan Mounted on mount point yang menjadi alamat filesystem itu di pohon direktori. Tabel di atas bercerita lugas: /mnt/data penuh 100% dan itulah sumber keluhan, sedangkan /boot sehat. Menyertakan path apa pun — misalnya df -h /var — memfilter hanya filesystem yang menampung path tersebut.
Dua opsi kecil yang sering tertukar: -h memakai kelipatan 1024 (1G = 2³⁰ byte, sesuai cara filesystem menghitung), sedangkan -H memakai kelipatan 1000 (1G = 10⁹ byte, sesuai cara pabrik disk melabeli kapasitasnya) — angka -H selalu tampak lebih besar. Opsi -T menambahkan kolom jenis filesystem, berguna saat server memcampur ext4 dan xfs. Dan karena df membaca blok yang dialokasikan, wajar jika totalnya tidak persis sama dengan penjumlahan du — lebihnya dipakai jurnal dan metadata.
Ketika Inode Habis Padahal Ruang Longgar #
Jebakan yang membingungkan: df -h menunjukkan 40% ruang kosong, tetapi touch berkas-baru ditolak dengan No space left on device. Penyebabnya ada di opsi -i — inode, bukan blok. Setiap file, sekecil apa pun, menghabiskan tepat satu inode, dan jumlah inode ditetapkan tetap saat filesystem dibuat. Direktori cache sesi aplikasi bisa menyimpan jutaan file kecil berukuran total cuma ratusan megabyte, namun melahap seluruh kuota inode; df -i memperlihatkannya dengan kolom IUse% yang menunjuk 100% sementara df -h masih hijau. Pola diagnosis dan penanganan lengkapnya dibahas di Chapter Filesystem Troubleshooting
.
du: Menimbang Isi Direktori #
Kalau df memotret dari luar, du (disk usage) menimbang dari dalam — ia berjalan menelusuri pohon direktori dan menjumlahkan blok yang dipakai tiap file. Karena hasil asli bergantung pada mesin tempatnya berjalan, kita berlatih pada fixture berukuran pasti yang meniru folder proyek dokumenter Budi:
mkdir -p proyek/rekaman proyek/dataset proyek/naskah
dd if=/dev/zero of=proyek/rekaman/scene-01.mp4 bs=1024 count=1024 status=none
dd if=/dev/zero of=proyek/rekaman/scene-02.mp4 bs=1024 count=768 status=none
dd if=/dev/zero of=proyek/dataset/iklim.csv bs=1024 count=300 status=none
printf 'naskah bab pertama\n' > proyek/naskah/bab-1.txt
du -sk proyek
du -s proyek/* | sort -rnOutput yang Dihasilkan:
2112 proyek
1796 proyek/rekaman
304 proyek/dataset
8 proyek/naskahHasilnya lugas: rekaman menyumbang 1796 KiB dari total 2112 KiB — hampir 85% proyek ada di satu folder. Mari kita telaah bagaimana angka itu diperoleh:
- Baris 1 (
mkdir -p ...): membangun kerangka tiga subdirektori — rekaman video, dataset, dan naskah. - Baris 2–4 (
dd if=/dev/zero ...): membuat file berukuran pasti —bs=1024 count=1024berarti tepat 1024 KiB — sehingga hasildubisa diverifikasi dengan pikiran. - Baris 5 (
printf ... > ...): satu file teks kecil, ukurannya memakan satu blok saja. - Baris 6 (
du -sk proyek): total seluruh proyek dalam KiB;-kmemaksa satuan konsisten agarsort -nbekerja benar. - Baris 7 (
du -s proyek/* | sort -rn): membandingkan ketiga subdirektori — jawaban instan untuk “folder mana yang paling berat”.
Menemukan File Terbesar dengan find #
Setelah tersangka tingkat direktori ketemu, pencarian turun ke tingkat file. Kriteria ukuran find membaca angka dengan sufiks: +500k berarti “lebih besar dari 500 KiB”:
mkdir -p proyek/rekaman proyek/dataset proyek/naskah
dd if=/dev/zero of=proyek/rekaman/scene-01.mp4 bs=1024 count=1024 status=none
dd if=/dev/zero of=proyek/rekaman/scene-02.mp4 bs=1024 count=768 status=none
dd if=/dev/zero of=proyek/dataset/iklim.csv bs=1024 count=300 status=none
printf 'naskah bab pertama\n' > proyek/naskah/bab-1.txt
find proyek -size +500k
find proyek -type f -printf '%s %p\n' | sort -rn | head -3Output yang Dihasilkan:
proyek/rekaman/scene-01.mp4
proyek/rekaman/scene-02.mp4
1048576 proyek/rekaman/scene-01.mp4
786432 proyek/rekaman/scene-02.mp4
307200 proyek/dataset/iklim.csvPerintah pertama menjawab pertanyaan ya/tidak per file — cocok untuk alarm skrip. Perintah kedua adalah peringkat penuh: -printf '%s %p\n' mencetak ukuran byte lalu path-nya, sort -rn mengurutkan menurun, dan head -3 memotong tiga teratas. Pada mesin sungguhan, tambahkan -xdev agar find tidak menyeberang batas filesystem.
Memilah Laporan df dengan awk #
Dalam skrip pemantauan, laporan df perlu dipilah otomatis: filesystem mana yang melewati ambang batas. Polanya bisa kita latih pada snapshot df -h yang tersimpan sebagai fixture:
mkdir -p latihan
cd latihan
cat > df-tiruan.txt << 'EOF'
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 32G 5.2G 87% /
/dev/sda2 472M 58M 390M 13% /boot
/dev/sdb1 100G 96G 0 100% /mnt/data
tmpfs 3.9G 0 3.9G 0% /dev/shm
EOF
awk 'NR > 1 { s = $5; sub(/%/, "", s); status = (s+0 >= 90 ? "KRITIS" : (s+0 >= 80 ? "WASPADA" : "OK")); printf "%-10s %s %s\n", $6, $5, status }' df-tiruan.txtOutput yang Dihasilkan:
/ 87% WASPADA
/boot 13% OK
/mnt/data 100% KRITIS
/dev/shm 0% OKTiga keputusan penting di satu baris awk: NR > 1 melewati baris judul; sub(/%/, "", s) mengupas tanda persen dari kolom Use% agar bisa dibandingkan sebagai angka; dan tangga operator ?: memberi label tiga tingkat. Di mesin nyata, ganti df-tiruan.txt dengan keluaran df -h langsung — pemakaian nyatanya dibahas di Chapter Disk Monitoring
.
ncdu: Menjelajah Secara Interaktif #
du dan find bagus untuk skrip, tetapi eksplorasi manual lebih cepat lewat ncdu (NCurses Disk Usage) — antarmuka teks yang menyusun isi direktori sebagai daftar terurut yang bisa dinavigasi. Beginilah tampilannya setelah dijalankan dengan ncdu ~:
ncdu 1.19 ~ Use the arrow keys to navigate, press ? for help
--- /home/budi/proyek ---------------------------------------------------------
1.8 MiB [##########] /rekaman
304.0 KiB [## ] /dataset
8.0 KiB [ ] /naskahTekan panah untuk berpindah, Enter untuk masuk ke direktori, d untuk menghapus yang terpilih (dengan konfirmasi), dan n untuk berganti pengurutan nama/ukuran. Karena ncdu tidak terpasang secara default, pasang lewat sudo apt install ncdu. Kelebihannya yang tak tergantikan: menimbang direktori besar bisa dilakukan secara interaktif berulang kali tanpa mengetik ulang perintah.
Setelah file dan folder terbesar teridentifikasi, langkah berikutnya alami: dipindahkan, dihapus, atau dipampatkan. Pemampatan yang benar — membedakan arsip dari kompresi — adalah topik Chapter File Compression dan Archiving .
Referensi lanjut: df(1) , du(1) , dan find(1) untuk semua opsi penyaringan.