Mount sistem berkas Linux dan diagnosis ruang dengan df serta du

Mount menghubungkan sistem berkas ke sebuah direktori agar isinya dapat diakses melalui pohon direktori Linux. Pastikan target dan titik mount terlebih dahulu, lalu periksa sumber, jalur, serta opsi yang benar-benar berlaku dengan findmnt. Saat ruang habis, periksa pemakaian byte dan inode, bukan kapasitas byte saja.

Sebelum memilih target pemformatan, pahami perbedaan disk, partisi, dan sistem berkas. Latihan di bawah hanya menggunakan berkas image sementara yang baru dibuat.

Rujukan latihan konfigurasi adalah mesin virtual (VM) dengan instalasi biasa Ubuntu 26.04 LTS, yaitu rilis dengan dukungan jangka panjang, atau Rocky Linux seri 9. Kontainer, Windows Subsystem for Linux (WSL), dan rilis lain dapat berbeda dalam konfigurasi layanan maupun paket. Siapkan pemulihan melalui konsol dan catat versi lingkungan dengan mengikuti panduan persiapan mesin virtual berbahasa Inggris.

Memahami isi direktori yang tersembunyi oleh mount

Memasang sistem berkas pada direktori yang tidak kosong menyembunyikan isi semula selama mount tersebut aktif; tindakan ini tidak menghapusnya. Isi semula terlihat lagi setelah unmount, yaitu pelepasan mount. Gunakan direktori latihan yang kosong. findmnt -T JALUR mencari sistem berkas yang mencakup jalur tersebut, sedangkan findmnt --mountpoint JALUR hanya mencocokkan titik mount yang ditentukan.

findmnt -T "$HOME"
df -hT "$HOME"
df -i "$HOME"

Perintah ini menampilkan mount yang mencakup direktori home, pemakaian ruang, dan pemakaian inode. Inode, singkatan dari index node, menyimpan informasi objek berkas seperti pemilik, izin, dan lokasi datanya. Banyak berkas kecil dapat menghabiskan inode meskipun kapasitas byte masih tersisa. Rincian pelaporan dan batasnya bergantung pada sistem berkas.

Melakukan mount, menulis, dan melepas image baru

Jalankan contoh mandiri ini di VM latihan yang dapat dibuang, dengan sudo dan alat ext4. Kontainer yang dibatasi mungkin tidak mengizinkan mount. Contoh tidak bergantung pada variabel shell dari pelajaran sebelumnya dan memformat hanya image yang baru dibuat, bukan perangkat penyimpanan nyata.

Simpan seluruh kode berikut sebagai mount-lab.sh dengan akhir baris LF, lalu jalankan bash mount-lab.sh. Diperlukan Bash, util-linux, e2fsprogs, utilitas dasar GNU, dan akses sudo. Di Ubuntu, siapkan paket dengan sudo apt install util-linux e2fsprogs; di Rocky, gunakan sudo dnf install util-linux e2fsprogs. Loop device menghubungkan berkas image dengan antarmuka perangkat blok. Skrip mengalokasikannya secara eksplisit dan baru menulis setelah sumber pada titik mount yang tepat cocok dengan perangkat itu.

Fungsi loop_is_mounted di bawah memeriksa daftar sumber mount yang berhasil dibaca. Nilai 0 berarti perangkat ditemukan, 1 berarti pembacaan berhasil tetapi perangkat tidak ditemukan, dan 2 berarti pembacaan gagal. Pembedaan ini diperlukan karena findmnt sendiri memakai status 1 untuk hasil kosong maupun galat; status itu saja tidak membuktikan perangkat sudah tidak dipakai.

#!/usr/bin/env bash
set -u
set -o pipefail
for tool in mktemp truncate mkfs.ext4 losetup mount umount findmnt sudo tee; do
  command -v "$tool" >/dev/null || { printf 'Missing tool: %s\n' "$tool" >&2; exit 1; }
done
sudo -v || exit 1
lab=$(mktemp -d "$HOME/linux-mount-lab.XXXXXX") || exit 1
img=$lab/disk.img
mnt=$lab/mnt
loop=''
loop_is_mounted() {
  local sources source
  sources=$(findmnt -rnv -o SOURCE) || return 2
  while IFS= read -r source; do
    [[ "$source" == "$loop" ]] && return 0
  done <<< "$sources"
  return 1
}
cleanup() {
  result=$?
  trap - EXIT
  if [[ -n "$loop" ]]; then
    source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE)
    lookup=$?
    if (( lookup == 0 )) && [[ "$source" == "$loop" ]]; then
      sudo umount -- "$mnt" || result=1
    elif (( lookup != 1 )); then
      printf 'Inspect mount before cleanup: %s\n' "$mnt" >&2
      result=1
    fi
    if loop_is_mounted; then
      printf 'Still mounted; keeping loop device: %s\n' "$loop" >&2
      result=1
    else
      lookup=$?
      if (( lookup == 1 )); then
        sudo losetup --detach "$loop" || result=1
      else
        printf 'Cannot verify loop usage; keeping: %s\n' "$loop" >&2
        result=1
      fi
    fi
  fi
  printf 'Lab retained for inspection: %s\n' "$lab"
  exit "$result"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
truncate -s 128M "$img" || exit 1
mkfs.ext4 -F "$img" || exit 1
mkdir "$mnt" || exit 1
loop=$(sudo losetup --find --show "$img") || exit 1
[[ "$loop" == /dev/loop* ]] || { printf 'Unexpected loop device\n' >&2; exit 1; }
sudo mount -t ext4 -o nodev,nosuid "$loop" "$mnt" || exit 1
source=$(findmnt -rn --mountpoint "$mnt" -o SOURCE) || exit 1
[[ "$source" == "$loop" ]] || { printf 'Mount source mismatch; no write\n' >&2; exit 1; }
printf 'mounted storage\n' | sudo tee "$mnt/note.txt" >/dev/null || exit 1
cat "$mnt/note.txt" || exit 1
sudo umount -- "$mnt" || exit 1
if loop_is_mounted; then
  printf 'Mount still present\n' >&2
  exit 1
else
  lookup=$?
  (( lookup == 1 )) || exit 1
fi
printf 'Unmount verified\n'

Jika berhasil, keluaran mencakup mounted storage dan Unmount verified. Penanganan EXIT hanya mencoba melepas mount pada direktori latihan jika sumbernya cocok dengan loop device latihan. Pelepasan loop device baru diminta setelah daftar sumber mount berhasil dibaca dan tidak lagi memuat perangkat tersebut. Jika pemeriksaan daftar gagal atau mount masih ditemukan, perangkat dipertahankan dan skrip mengembalikan kegagalan. Permintaan detach tidak selalu berarti perangkat langsung lenyap: kernel dapat menunda penghapusannya selama masih dipakai.

Direktori latihan dan image selalu dipertahankan serta jalurnya dicetak untuk diperiksa. Menjalankan ulang skrip membuat direktori baru. Contoh mengasumsikan VM pribadi tanpa administrator lain yang mengubah mount secara bersamaan; masih ada jeda antara pemeriksaan sumber dan penulisan. Skrip ini bukan alat pengelolaan penyimpanan produksi.

Setelah kegagalan, periksa jalur yang dicetak dengan findmnt --mountpoint JALUR_LATIHAN dan daftar perangkat dengan sudo losetup --list. Baca pesan galat; jangan menganggap hasil kosong membuktikan keadaan aman jika perintahnya gagal. Jangan menghapus isi direktori atau image selama mount masih ada.

Menangani mount yang sibuk tanpa memaksa pelepasan

Shell dengan direktori kerja di dalam mount, berkas yang masih terbuka, atau layanan yang berjalan dapat menghalangi unmount. Pindahkan direktori kerja terminal ke luar titik mount dan hentikan program terkait melalui prosedur normalnya. Jika tersedia, telusuri pemakai dengan fuser -vm MOUNT_PATH atau lsof, lalu ganti MOUNT_PATH dengan titik mount sebenarnya. Jangan menjadikan penghentian paksa atau lazy unmount sebagai respons awal.

Memverifikasi konfigurasi mount permanen

/etc/fstab memuat enam bidang: sumber, titik mount, jenis sistem berkas, opsi, penanda dump, dan urutan pemeriksaan fsck. Nama perangkat dapat berubah; bila sesuai, gunakan pengenal sistem berkas seperti UUID. Pastikan UUID benar dan tidak tertukar dengan salinan volume. Baris berikut hanya contoh untuk sistem berkas ext4 sekunder, bukan untuk ditempel tanpa perubahan atau digunakan bagi image sementara latihan.

UUID=REPLACE_WITH_ACTUAL_UUID /srv/data ext4 defaults,nodev,nosuid 0 2

Ganti penanda UUID dengan nilai volume yang sudah diverifikasi, pastikan /srv/data adalah direktori tujuan yang tepat, dan sesuaikan jenis serta opsi sistem berkas. Nilai terakhir 2 menyatakan urutan pemeriksaan untuk sistem berkas selain akar; angka 0 sebelumnya menonaktifkan pemilihan cadangan oleh dump.

Cadangkan fstab sebelum mengubahnya. Jalankan sudo findmnt --verify --verbose untuk memeriksa keterbacaan konfigurasi dan kegunaan sumber atau target yang tersedia. Pada sistem systemd, jalankan sudo systemctl daemon-reload agar konfigurasi unit yang dihasilkan dimuat ulang, kemudian uji mount tertentu secara sengaja, misalnya sudo mount /srv/data setelah memastikan entri tersebut benar. Periksa hasilnya dengan findmnt --mountpoint /srv/data. Pemeriksaan tidak menjamin semua kondisi boot mendatang; pertahankan akses pemulihan melalui konsol.

Opsi nofail dapat memungkinkan boot berlanjut tanpa perangkat opsional, tetapi tidak mencegah aplikasi menulis ke direktori dasar yang kosong ketika mount tidak tersedia. Untuk penyimpanan wajib, rancang dependensi mount dan syarat mulai layanan. Pilih ro untuk baca saja, nodev, nosuid, serta noexec sesuai kebutuhan beban kerja; opsi ini bukan pengamanan universal. Rincian bidang tersedia dalam manual fstab, sedangkan dependensi boot dijelaskan pada dokumentasi unit mount systemd.

Memahami perbedaan df dan du sebelum menghapus data

df -hT
df -i
du -xhd1 "$HOME" 2>/dev/null | sort -h

df melaporkan alokasi pada tingkat sistem berkas; du menelusuri berkas yang dapat diakses. Berkas yang sudah dihapus tetapi masih terbuka, jalur yang tidak dapat dibaca, blok cadangan, dan metadata dapat menyebabkan angkanya berbeda. df -i membantu membedakan kekurangan inode dari kekurangan ruang byte.

du -x tidak memasuki direktori pada sistem berkas lain, -d1 membatasi kedalaman rincian yang ditampilkan menjadi satu tingkat, dan -h memakai satuan yang mudah dibaca. Penelusuran direktori besar tetap dapat menimbulkan beban input/output (I/O). sort -h mengurutkan angka beserta satuan tersebut. Pengalihan 2>/dev/null menyembunyikan pesan galat; jika izin membatasi pembacaan, jumlahnya dapat tidak lengkap. Ulangi tanpa pengalihan bila perlu menelusuri penyebab perbedaan.

Kenali pemilik berkas besar dan kebutuhan penyimpanannya sebelum menghapusnya. Gunakan rotasi log atau pembersihan cache yang didukung aplikasi jika sesuai. Hapus image latihan hanya setelah memastikan mount sudah dilepas. Jika mengubah fstab selama latihan, pulihkan konfigurasi yang dicadangkan dan verifikasi kembali.

Dokumentasi resmi