Tutorial Ubuntu 26.04 / Menyiapkan disk tambahan dan mount otomatis dengan fstab
Mount otomatis untuk disk tambahan menghubungkan UUID sistem berkas dengan titik mount yang benar. Berkas yang terlihat saja belum membuktikan bahwa penulisan menuju disk yang dimaksud; periksa juga keadaan setelah reboot dan saat perangkat tidak tersedia.
Identifikasi perangkat dan data sebelum memformat
lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL,UUID,MOUNTPOINTS
findmnt -rno SOURCE,TARGET,FSTYPE,OPTIONS
Latihan mount dimulai dengan disk latihan terpisah yang sudah mempunyai sistem berkas. Cocokkan kapasitas, label, dan UUID (Universally Unique Identifier, pengenal sistem berkas), lalu keluarkan perangkat root, boot, serta cadangan yang sudah ada dari sasaran latihan. Bila hanya tersedia disk baru kosong, ikuti persiapan di bawah terlebih dahulu. Jangan memformat disk yang datanya masih diperlukan atau perlu dipulihkan.
Nama seperti /dev/sdb dapat berubah. Identifikasi perangkat dari beberapa informasi sekaligus, bukan urutan nama saja. UUID sistem berkas juga berbeda dari UUID berkas disk virtual yang ditampilkan pengelola virtualisasi. Disk hasil kloning dapat membawa UUID sistem berkas yang sama; selesaikan ambiguitas tersebut sebelum memilih sumber mount.
Siapkan disk latihan baru kosong sebagai ext4
Memasang berkas VDI (VirtualBox Disk Image) baru belum membuat sistem berkas ext4 di dalamnya. Untuk menyiapkan disk latihan kosong berukuran 8 GiB, matikan VM, buka Settings → Storage, pilih pengendali penyimpanan, lalu gunakan tindakan penambahan hard disk dan buat disk virtual baru. Jangan memilih disk data yang sudah ada atau disk fisik host. Alur pengaturan penyimpanan dijelaskan dalam panduan VirtualBox 7.2.
Skrip berikut dijalankan dari konsol Ubuntu Server untuk tepat satu VDI latihan baru yang dipastikan kosong. Siapkan lsblk, wipefs, fdisk, findmnt, dan blkid dari util-linux, udevadm, mkfs.ext4 dari e2fsprogs, serta alat shell seperti readlink, awk, dan grep. Periksa ketersediaannya dengan command -v dan tinjau sumber paket bila perlu memasangnya.
Cocokkan kapasitas, model, nomor seri, dan jalur /dev/disk/by-id/ dengan disk yang baru dibuat pada pengelola VM. Berhenti jika identitasnya belum pasti. Tidak ditemukannya tanda tangan bukan bukti bahwa semua sektor tidak berisi data berharga; pembatasan ke disk baru kosong harus dipastikan sebelum menjalankan skrip.
Simpan seluruh blok sebagai ~/prepare-empty-lab-disk.sh, lalu jalankan bash ~/prepare-empty-lab-disk.sh /dev/disk/by-id/ACTUAL_NEW_DISK setelah mengganti placeholder dengan jalur disk baru yang telah diverifikasi. Jangan memakai disk yang memiliki data untuk mencoba skrip ini. Pengetikan ulang jalur merupakan konfirmasi tambahan, bukan pengganti pemeriksaan identitas perangkat.
Di dalam fdisk, gunakan g untuk tabel GPT (GUID Partition Table) dan n untuk satu partisi baru. Nilai bawaan nomor, awal, serta akhir dapat digunakan pada disk latihan itu. Jalankan p untuk memeriksa sasaran dan rentang sekali lagi sebelum menyimpan dengan w. Bila salah, batalkan dengan q sebelum w. Tahap ini serta mkfs.ext4 berikutnya dapat menimpa struktur disk; memulihkan fstab tidak mengembalikan data yang telah diformat.
set -euo pipefail
if [ "$#" -ne 1 ]; then
printf 'Pemakaian: bash prepare-empty-lab-disk.sh /dev/disk/by-id/ACTUAL_NEW_DISK\n' >&2; exit 2
fi
case "$1" in /dev/disk/by-id/*) ;; *) printf 'Gunakan jalur by-id yang sudah diverifikasi.\n' >&2; exit 2 ;; esac
disk=$(readlink -e -- "$1")
test -b "$disk"
if [ "$(lsblk -dnro TYPE "$disk")" != disk ] || [ "$(lsblk -dnro RO "$disk")" != 0 ]; then
printf 'Bukan disk utuh yang dapat ditulis.\n' >&2; exit 1
fi
if [ "$(lsblk -nr -o NAME "$disk" | wc -l)" -ne 1 ]; then
printf 'Partisi atau perangkat dependen sudah ada; hentikan.\n' >&2; exit 1
fi
if lsblk -nr -o MOUNTPOINTS "$disk" | grep -q '[^[:space:]]'; then
printf 'Ada mount aktif; hentikan.\n' >&2; exit 1
fi
signatures=$(sudo wipefs --no-act --noheadings --output TYPE "$disk")
if [ -n "$signatures" ]; then
printf 'Tanda tangan yang sudah ada: %s; hentikan.\n' "$signatures" >&2; exit 1
fi
lsblk -o NAME,SIZE,TYPE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS "$disk"
read -r -p "Ketik jalur disk kosong yang sudah diverifikasi ($disk): " confirmed
if [ "$confirmed" != "$disk" ]; then exit 1; fi
sudo fdisk "$disk"
sudo udevadm settle
mapfile -t partitions < <(lsblk -nrpo NAME,TYPE "$disk" | awk '$2 == "part" {print $1}')
if [ "${#partitions[@]}" -ne 1 ]; then
printf 'Diperlukan tepat satu partisi baru; periksa sebelum memformat.\n' >&2; exit 1
fi
partition=${partitions[0]}
if findmnt -rn --source "$partition" >/dev/null; then
printf 'Partisi sedang di-mount; hentikan.\n' >&2; exit 1
fi
signatures=$(sudo wipefs --no-act --noheadings --output TYPE "$partition")
if [ -n "$signatures" ]; then printf 'Partisi sudah memiliki tanda tangan; hentikan.\n' >&2; exit 1; fi
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS "$disk"
read -r -p "Ketik partisi baru yang akan diformat sebagai ext4 ($partition): " confirmed
if [ "$confirmed" != "$partition" ]; then exit 1; fi
sudo mkfs.ext4 -L lab-data "$partition"
sudo blkid "$partition"
lsblk -f "$disk"
Skrip menolak disk hanya-baca, partisi atau perangkat dependen yang sudah terlihat, mount aktif, serta tanda tangan yang terdeteksi. Setelah pengeditan partisi, skrip mengharapkan tepat satu partisi dan meminta konfirmasi jalurnya lagi sebelum membuat ext4 berlabel lab-data. Periksa keluaran blkid serta lsblk -f dan catat UUID partisi yang sebenarnya. Bila pemeriksaan gagal, selidiki penyebabnya dan jangan menghapus pengaman agar skrip dapat diteruskan.
Disk latihan yang sudah memiliki ext4 tidak memerlukan inisialisasi ini; mulai dari identifikasi UUID. Jangan menulis ke disk virtual yang sama secara bersamaan dari beberapa VM. Manual fdisk Ubuntu 26.04 menjelaskan sasaran pengeditan partisi, sedangkan manual mke2fs menjelaskan pembuatan sistem berkas oleh mkfs.ext4.
Bedakan mount sistem dari kebutuhan layanan
Mount persisten pada Server menghubungkan UUID, titik mount, jenis sistem berkas, dan opsi dalam /etc/fstab. Membuat direktori atau berhasil menjalankan satu mount belum membuktikan bahwa konfigurasi akan bekerja setelah reboot. Pisahkan pemeriksaan cadangan, konfigurasi, mount aktual, dan boot berikutnya.
Disk data layanan yang wajib tersedia memerlukan kebijakan berbeda dari penyimpanan latihan opsional. Opsi nofail memungkinkan boot berlanjut tanpa menunggu keberhasilan mount tersebut, tetapi tidak mencegah aplikasi menulis ke direktori lokal yang kosong ketika disk tidak ada. Manual systemd.mount versi 259 menjelaskan perilaku opsi mount dan waktu tunggu perangkat.
Untuk layanan yang memerlukan mount, RequiresMountsFor=/srv/lab-data pada bagian [Unit] dapat membentuk ketergantungan dan urutan awal yang diperlukan. Nilai ini perlu ditempatkan pada konfigurasi layanan yang sebenarnya serta diuji, sesuai manual dependensi unit systemd. Dependensi awal saja tidak membuktikan bahwa UUID benar atau mencegah setiap kehilangan perangkat saat layanan berjalan.
Cadangkan fstab dan siapkan titik mount
(
set -eu
backup=$(sudo mktemp /root/fstab-backup.XXXXXX)
sudo cp -a /etc/fstab "$backup"
printf 'Backup: %s\n' "$backup"
sudo mkdir -p /srv/lab-data
)
Catat lokasi cadangan yang ditampilkan dan pastikan penyalinan berhasil sebelum mengedit. Jika lokasi /srv/lab-data sudah dipakai sebagai mount atau berisi berkas, pertahankan isinya dan pilih titik kosong yang sesuai. Ketika disk dipasang, berkas lokal di bawah titik itu dapat tertutup oleh sistem berkas baru tanpa terhapus. Membuat direktori saja tidak memasang disk.
Tambahkan satu entri dengan UUID sebenarnya
Buka sudoedit /etc/fstab, pertahankan semua entri lama, lalu tambahkan satu baris untuk disk latihan ext4 yang sudah diverifikasi. Ganti REPLACE_WITH_VERIFIED_UUID dengan UUID sistem berkas dari lsblk atau blkid, bukan UUID citra VDI. Jangan memakai jenis ext4 jika sistem berkas sebenarnya berbeda.
UUID=REPLACE_WITH_VERIFIED_UUID /srv/lab-data ext4 defaults,nofail,x-systemd.device-timeout=10s 0 2
Enam bidang baris ini adalah sumber, titik mount, jenis sistem berkas, opsi, nilai dump, dan urutan pemeriksaan sistem berkas. Pada contoh ini 0 tidak menjadwalkan dump dan 2 menentukan urutan pemeriksaan sistem berkas non-root. x-systemd.device-timeout=10s membatasi penantian perangkat; itu bukan batas waktu untuk seluruh proses mount atau aplikasi. Contoh memperlakukan disk sebagai opsional saat boot, sehingga jangan menyalinnya untuk penyimpanan wajib tanpa merancang ketergantungan layanan.
Bidang dipisahkan dengan spasi atau tab. Jalur yang mengandung spasi harus memakai escape fstab seperti \040, bukan sekadar tanda kutip shell. Rincian bidang dan escape tersedia dalam manual fstab. Setelah menyimpan, periksa lalu pasang hanya titik latihan:
(
set -eu
sudo findmnt --verify --verbose
sudo systemctl daemon-reload
sudo mount /srv/lab-data
findmnt --mountpoint /srv/lab-data
)
Selesaikan kesalahan verifikasi terlebih dahulu. findmnt --verify --verbose memeriksa keterbacaan format dan kegunaan tabel, bukan melakukan penulisan uji pada disk. daemon-reload memperbarui konfigurasi unit systemd setelah perubahan fstab, lalu mount /srv/lab-data menargetkan entri itu saja. Hindari menerapkan semua entri melalui mount -a hanya untuk menguji satu disk latihan.
Cocokkan sumber, UUID, dan jenis sistem berkas yang benar-benar terpasang dengan catatan disk. Manual findmnt menjelaskan perbedaan pencarian titik mount dan jalur biasa. Jangan mengganti --mountpoint dengan pemeriksaan direktori saja, karena direktori yang tidak menjadi mount tetap berada pada sistem berkas induknya.
Izinkan penulisan hanya setelah mount diverifikasi
Simpan blok berikut sebagai skrip Bash terpisah, misalnya ~/check-lab-mount.sh. Isi UUID yang telah diverifikasi sebelum menjalankan bash ~/check-lab-mount.sh. Skrip menolak placeholder atau UUID kosong, menghentikan proses bila alat tidak tersedia atau kueri gagal, lalu membandingkan UUID mount yang ditemukan.
expected_uuid=REPLACE_WITH_VERIFIED_UUID
if [ -z "$expected_uuid" ] || [ "$expected_uuid" = REPLACE_WITH_VERIFIED_UUID ]; then
printf 'Isi UUID aktual yang sudah diverifikasi terlebih dahulu.\n' >&2
exit 2
fi
if ! command -v findmnt >/dev/null 2>&1; then
printf 'findmnt tidak tersedia; hentikan pekerjaan tulis.\n' >&2
exit 2
fi
if ! actual_uuid=$(findmnt -rn --mountpoint /srv/lab-data -o UUID); then
printf 'Pemeriksaan mount gagal atau mount tidak ditemukan; hentikan.\n' >&2
exit 1
fi
if [ -z "$actual_uuid" ] || [ "$actual_uuid" != "$expected_uuid" ]; then
printf 'Sistem berkas yang diharapkan tidak terpasang; hentikan pekerjaan tulis.\n' >&2
exit 1
fi
printf 'Sistem berkas terpasang yang diharapkan sudah diverifikasi.\n'
Status keluar 0 berarti pemeriksaan UUID berhasil pada saat itu. Status 1 berarti mount tidak ditemukan, kueri gagal, atau UUID tidak cocok; status 2 menunjukkan persiapan pemeriksaan belum lengkap. Jadikan keberhasilan skrip sebagai syarat pekerjaan tulis berikutnya. Pemeriksaan terpisah ini tidak mengunci mount terhadap pelepasan oleh proses lain; gunakan rancangan layanan dan prosedur operasi yang sesuai untuk pekerjaan berkelanjutan.
Setelah sumber mount terverifikasi, tulis berkas latihan kecil yang tidak menimpa data lama. Lakukan reboot terencana melalui konsol, ulangi pemeriksaan mount, lalu baca kembali berkas itu. Jika aplikasi perlu menulis sebagai akun layanan biasa, periksa izin direktori di dalam sistem berkas yang terpasang dan jangan memberi izin luas hanya untuk melewati penolakan.
Uji ketiadaan perangkat hanya setelah menghentikan pekerjaan penyimpanan dan mematikan VM dengan aman. Lepaskan hanya disk latihan yang telah diidentifikasi, pastikan tersedia jalur konsol, lalu periksa apakah boot dan pemeriksaan mount mengikuti kebijakan yang direncanakan. Pekerjaan cadangan atau layanan harus berhenti dan tidak beralih menulis ke direktori lokal. Matikan VM dengan aman dan sambungkan kembali disk latihan sebelum mengulangi verifikasi.
Jika konfigurasi gagal, gunakan konsol untuk membandingkan entri fstab yang diubah dengan cadangan dan pulihkan hanya perubahan tersebut. Periksa lagi konfigurasinya serta keadaan mount aktual; pemulihan berkas konfigurasi tidak otomatis membatalkan mount aktif atau pembuatan partisi. Jangan melepas mount yang masih dipakai atau memformat ulang disk untuk memperbaiki kesalahan UUID.




