USB flash disk dan kartu SD adalah perangkat yang paling sering kita tancapkan — dan paling sering bikin panik saat mau diformat atau dicabut. Di desktop modern semuanya tampak ajaib: colok, folder terbuka, selesai; padahal di baliknya ada daemon yang menimbang izin, buffer yang harus disiram, dan nomor perangkat yang bisa bergeser. Chapter ini membedah otomatisasi itu, lalu berlatih mengenali perangkat dengan lsblk, me-mount manual, memformat dengan aman, melepas perangkat dengan benar, dan membuat USB tetap terpasang punya alamat tetap lewat fstab.

Automount: udisks2 di Balik Layar #

Ketika file manager memunculkan USB begitu dicolok, yang bekerja sebenarnya bukan si file manager. Ia hanya meminta layanan udisks2 — daemon yang mengelola penyimpanan lepas-pasang lewat D-Bus — untuk men-mount-kan partisi atas nama kita; udisks2-lah yang memegang hak yang dibutuhkan, dengan izinnya ditimbang oleh polkit. Titik kaitnya pun teratur: label partisi menjadi nama folder di bawah folder user kita. Untuk mesin tanpa desktop, udisksctl memberi akses yang sama; berikut contoh tampilan pasang dan lepasnya:

console
$ udisksctl mount -b /dev/sdb1
Mounted /dev/sdb1 at /media/budi/KINGSTON.
$ udisksctl unmount -b /dev/sdb1
Unmounted /dev/sdb1.

Mengenali Perangkat dengan lsblk #

Sebelum mem-mount, memformat, atau mencabut apa pun, langkah pertama selalu mengenali siapa perangkatnya — dan alatnya satu: lsblk. Berikut contoh tampilannya pada laptop dengan satu flash disk tercolok:

text
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   100G  0 disk
├─sda1   8:1    0    98G  0 part /
└─sda2   8:2    0     2G  0 part [SWAP]
sdb      8:16   1  29.7G  0 disk
└─sdb1   8:17   1  29.7G  0 part /media/budi/KINGSTON

Dua hal penting terbaca langsung dari tabel itu. Kolom RM bernilai 1 menandai perangkat removable — flash disk sdb, bukan disk utama sda. Kolom MOUNTPOINTS menunjukkan sdb1 sudah terkait di /media/budi/KINGSTON, jadi partisi inilah (bukan sdb seluruhnya) yang kita kelola. Satu peringatan klasik: nama sdb ditentukan urutan pencolokan — besok flash disk yang sama bisa menjadi sdc — sehingga pengaturan permanen sebaiknya berpegang pada UUID atau label, bukan nama /dev ini. Pembahasan penuh tabel partisi ada di Chapter Disk Partitioning Tools .

Mount Manual dan Melepasnya #

Tanpa desktop, siklus hidupnya singkat: siapkan folder, sudo mount /dev/sdb1 /mnt, pakai, lalu sudo umount /mnt. Dua keluhan klasik muncul di sini. Pertama, umount menolak dengan target is busy karena terminal atau file manager masih berdiri di dalam folder itu — tutup dulu jendelanya atau pindah (cd) keluar. Kedua, permission file di flash disk FAT tampak aneh atau terkunci — itu karena FAT tidak menyimpan izin Unix; solusinya lewat opsi uid yang kita pakai di bagian fstab nanti. Mekanisme mount selengkapnya sudah kita bedah di Chapter Mount dan Unmount .

Format Aman: Umount Dulu #

Memformat berarti menimpa filesystem lama — mkfs.vfat untuk FAT32 sehari-hari, mkfs.ext4 untuk Linux penuh, keduanya melalui sudo. Aturan besarnya satu: perangkat harus dilepas dulu. Selama masih ter-mount, kernel masih menahan buffer tulisan dan file manager bisa sedang membaca folder di dalamnya; menulis filesystem baru pada partisi yang sedang dipakai adalah resep data korup.

Disiplin itu bisa kita latih tanpa mempertaruhkan flash disk sungguhan. Skrip format-aman.sh di bundle chapter ini membaca tabel partisi latihan — format barisnya PARTISI|FSTYPE|MOUNT — dan menolak memformat apa pun yang masih ter-mount; baris sed di tengah berperan sebagai umount yang mengubah status tabel:

bash
cat > tabel-partisi.txt <<'EOF'
sdb1|vfat|/media/budi/KINGSTON
sdb2|ext4|-
EOF
bash format-aman.sh sdb1 vfat DATA-USB
sed -i 's#^sdb1|vfat|/media/budi/KINGSTON$#sdb1|vfat|-#' tabel-partisi.txt
bash format-aman.sh sdb1 vfat DATA-USB

Output yang Dihasilkan:

text
DITOLAK: partisi sdb1 masih ter-mount di /media/budi/KINGSTON
lepas dulu: udisksctl unmount -b /dev/sdb1
pemeriksaan sdb1: belum ter-mount, aman diformat
mengosongkan 4 MiB pertama partisi (dd if=/dev/zero)
menulis filesystem vfat berlabel DATA-USB (mkfs simulasi)
sdb1.img: 4194304 byte

Percobaan pertama ditolak karena sdb1 masih tercatat ter-mount; setelah statusnya diganti (peran umount), percobaan kedua lolos dan simulasi format berjalan. Bagian penting skripnya:

  1. Baris baris=$(grep -m1 "^$partisi|" "$tabel"): mencari baris partisi target di tabel — pengganti membaca keluaran lsblk sungguhan.
  2. Baris mount=$(... | cut -d'|' -f3): mengambil kolom ketiga, yaitu titik kait; nilai - berarti tidak ter-mount.
  3. Blok if [ "$mount" != "-" ]: gerbang keamanannya — selama masih ter-mount, skrip menolak dengan saran perintah pelepasnya, persis disiplin yang wajib di dunia nyata.
  4. Baris dd if=/dev/zero of="$partisi.img" ...: simulasi penulisan filesystem ke berkas bayangan, bukan ke perangkat — aman untuk latihan.
  5. Baris stat -c '%n: %s byte': melaporkan hasil akhirnya sebagai bukti “format” selesai, pengganti keluaran mkfs asli.

Label yang tercetak (DATA-USB) di dunia nyata ditulis lewat opsi mkfs -L; pada FAT32 labelnya bisa diganti kapan pun tanpa format ulang lewat dosfslabel /dev/sdb1 NAMA-BARU, dan pada ext4 padanannya e2label — nama inilah yang dipakai folder automount di file manager.

Eject versus Umount: Menyiram Buffer #

Menulis berkas ke flash disk tidak serta-merta menuliskannya ke chip. Kernel menahan data di page cache dan menuliskannya secara efisien; perintah umount yang menutup siklus ini — ia menunggu seluruh buffer tersiram ke perangkat sebelum melepasnya, itulah inti “safely remove” (rincian perilakunya di umount(8) ). Perintah sync memaksa penyiraman tanpa melepas perangkat, berguna saat kita ingin terus menyalin lagi. udisksctl power-off -b /dev/sdb melangkah lebih jauh: melepas dan mematikan perangkat sampai LED-nya padam — inilah padanan sebenarnya dari tombol Eject di file manager, bukan sekadar unmount.

USB yang Selalu Terpasang: Entry fstab #

Disk backup yang menetap di komputer desktop punya kebutuhan berbeda: skrip backup butuh alamat yang selalu sama, sementara automount menempelkan label di path yang bergantung pada siapa yang login. Solusinya satu baris di /etc/fstab — topik yang dibedah tuntas di Chapter fstab ; di sini kita fokus pada bentuk baris khas USB, panduan lengkap perangkat lepas-pasang ada di wiki USB storage :

bash
cat > fstab-usb <<'EOF'
UUID=6a2b4c9d-1111-4e5f-8a9b-3c4d5e6f7a8b  /             ext4   errors=remount-ro       0  1
UUID=8c0d1e2f-3333-4a5b-9c0d-1e2f3a4b5c6d  none          swap   sw                      0  0
UUID=1234-ABCD                             /media/arsip  vfat   nofail,user,uid=1000,gid=1000  0  0
EOF
cat fstab-usb

Output yang Dihasilkan:

text
UUID=6a2b4c9d-1111-4e5f-8a9b-3c4d5e6f7a8b  /             ext4   errors=remount-ro       0  1
UUID=8c0d1e2f-3333-4a5b-9c0d-1e2f3a4b5c6d  none          swap   sw                      0  0
UUID=1234-ABCD                             /media/arsip  vfat   nofail,user,uid=1000,gid=1000  0  0

Dua baris pertama adalah isi fstab milik sistem — kita hanya menambahkan yang ketiga. Bedah baris USB tersebut:

  1. Kolom UUID=1234-ABCD: alamat partisi memakai UUID khas FAT, stabil berapa pun urutan pencolokan; nilainya terbaca dari lsblk -f.
  2. Kolom /media/arsip: titik kait tetap — buat foldernya dulu dengan mkdir -p, karena mount tidak membuat folder sendiri.
  3. Opsi nofail: kunci entry USB — boot tetap berjalan meski disknya sedang dicabut; tanpa opsi ini, sistem bisa menggantung masuk mode darurat gara-gara USB yang lupa ditancapkan.
  4. Opsi user: user biasa boleh me-mount dan melepas sendiri tanpa sudo.
  5. Opsi uid=1000,gid=1000: semua file di FAT tampil sebagai milik user kita, karena FAT tidak menyimpan izin Unix — inilah solusi keluhan permission di bagian awal.
  6. Kolom 0 0: disk data tidak di-dump dan tidak perlu urutan fsck saat boot.

Setelah baris itu berdiri, sudo mount -a mengaitkannya tanpa reboot, dan skrip backup bisa selalu menunjuk /media/arsip. Perangkat penyimpanan kita kini lengkap: yang tetap maupun yang lepas-pasang. Satu dimensi kustomisasi desktop yang sering luput tapi menentukan bisa-tidaknya semua orang memakai komputer ini masih tersisa — fitur aksesibilitas — dan ia justru berguna bagi kita semua lebih sering daripada yang dikira. Kita tutup section ini pada Chapter Accessibility .

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

format-aman.sh

Unduh berkas
bash
#!/usr/bin/env bash
# format-aman.sh -- format partisi (simulasi) dengan pemeriksaan "umount dulu"
# Pemakaian: bash format-aman.sh <partisi> <fstype> <label> [tabel]
# Format baris tabel: PARTISI|FSTYPE|MOUNT  (MOUNT berisi "-" bila belum)
# Tanpa argumen: demo singkat di direktori sementara.

skrip=$(realpath "$0")

if [ $# -eq 0 ]; then
    tmp=$(mktemp -d)
    printf 'sdb1|vfat|/media/budi/KINGSTON\nsdb2|ext4|-\n' > "$tmp/tabel-partisi.txt"
    (
        cd "$tmp" || exit 1
        bash "$skrip" sdb1 vfat DATA-USB tabel-partisi.txt
        sed -i 's#^sdb1|vfat|/media/budi/KINGSTON$#sdb1|vfat|-#' tabel-partisi.txt
        bash "$skrip" sdb1 vfat DATA-USB tabel-partisi.txt
        rm -f sdb1.img
    )
    rm -rf "$tmp"
    echo "demo selesai di direktori sementara"
    exit 0
fi

partisi=$1
fstype=${2:-vfat}
label=${3:-TANPA-LABEL}
tabel=${4:-tabel-partisi.txt}

if [ ! -f "$tabel" ]; then
    echo "gagal: tabel partisi $tabel tidak ditemukan"
    exit 0
fi

baris=$(grep -m1 "^$partisi|" "$tabel")
if [ -z "$baris" ]; then
    echo "gagal: partisi $partisi tidak terdaftar di $tabel"
    exit 0
fi

mount=$(printf '%s\n' "$baris" | cut -d'|' -f3)
if [ "$mount" != "-" ]; then
    echo "DITOLAK: partisi $partisi masih ter-mount di $mount"
    echo "lepas dulu: udisksctl unmount -b /dev/$partisi"
    exit 0
fi

echo "pemeriksaan $partisi: belum ter-mount, aman diformat"
dd if=/dev/zero of="$partisi.img" bs=1M count=4 status=none
echo "mengosongkan 4 MiB pertama partisi (dd if=/dev/zero)"
echo "menulis filesystem $fstype berlabel $label (mkfs simulasi)"
stat -c '%n: %s byte' "$partisi.img"