Skip to content

Instantly share code, notes, and snippets.

@phalconyx
Last active August 2, 2026 03:22
Show Gist options
  • Select an option

  • Save phalconyx/c2458818c317d75c033476bfa55f38df to your computer and use it in GitHub Desktop.

Select an option

Save phalconyx/c2458818c317d75c033476bfa55f38df to your computer and use it in GitHub Desktop.

Tutorial Storage Server Raspberry Pi dengan HDD Ext4, Samba, dan Tailscale

Dokumen ini menjelaskan konfigurasi storage server yang telah digunakan pada Raspberry Pi. Server memakai HDD portabel 1 TB dengan sistem berkas ext4 dan membagikan folder penyimpanan melalui protokol SMB menggunakan Samba. Perangkat dapat mengakses storage melalui jaringan lokal maupun melalui jaringan privat Tailscale tanpa membuka port SMB ke internet publik.

Caution

Tahap pembuatan partisi dan format akan menghapus seluruh isi HDD. Pastikan target benar-benar /dev/sda. Jangan pernah menjalankan perintah format terhadap /dev/mmcblk0 karena perangkat tersebut merupakan kartu microSD sistem Raspberry Pi.

1. Konfigurasi akhir

Komponen Nilai
Sistem Raspberry Pi OS berbasis Debian
Pengguna Linux dan Samba fajarb
HDD Seagate One Touch 1 TB
Perangkat HDD /dev/sda
Partisi data /dev/sda1
Sistem berkas ext4
Label STORAGE
UUID 752937b0-1a9c-449d-8a20-d7af28ae0a4c
Lokasi mount /srv/storage
Folder yang dibagikan /srv/storage/data
Nama share Storage
IP LAN Raspberry Pi 10.10.10.10
Subnet LAN yang diizinkan 10.10.10.0/24
IP Tailscale Raspberry Pi 100.68.196.86
Nama perangkat Tailscale raspberrypi
Rentang IPv4 Tailscale 100.64.0.0/10
Prefiks IPv6 Tailscale fd7a:115c:a1e0::/48
Port SMB TCP 445

Struktur penyimpanan akhir:

/srv/storage/          root HDD
├── lost+found/        direktori sistem ext4
└── data/              folder yang dibagikan melalui Samba

2. Persiapan perangkat

Gunakan perangkat berikut:

  • Raspberry Pi yang sudah dapat diakses melalui SSH.
  • HDD portabel 1 TB.
  • Kabel USB 3.0 yang baik.
  • Powered USB hub jika daya dari port Raspberry Pi tidak stabil.
  • Koneksi jaringan lokal melalui eth0.
  • Tailscale pada Raspberry Pi dan perangkat klien jika storage perlu diakses dari luar jaringan lokal.

Hindari mencabut HDD saat sistem membaca atau menulis data. Tempatkan HDD pada dudukan yang kokoh, beri ruang sirkulasi udara, dan cegah kabel menarik konektor HDD. Jangan membuka atau meneruskan port TCP 445 pada router ke internet publik.

3. Identifikasi HDD secara aman

Hubungkan HDD, lalu tampilkan identitas semua perangkat penyimpanan:

lsblk -e 7 -o NAME,PATH,SIZE,MODEL,SERIAL,TRAN,FSTYPE,LABEL,UUID,MOUNTPOINTS

Pastikan sistem operasi berada pada kartu microSD:

findmnt /

Pada konfigurasi ini, hasil identifikasi menunjukkan:

HDD eksternal : /dev/sda
Partisi HDD   : /dev/sda1
Kartu sistem  : /dev/mmcblk0
Root sistem   : /dev/mmcblk0p2

Periksa juga stabilitas koneksi USB:

sudo dmesg --ctime | tail -n 50

Jangan melanjutkan jika /dev/sda tidak menampilkan model dan kapasitas HDD yang benar.

4. Membuat partisi GPT dan ext4

4.1 Lepaskan partisi lama

sudo umount /dev/sda1 2>/dev/null || true

4.2 Hapus signature sistem berkas lama

Warning

Perintah berikut menghapus struktur partisi dan sistem berkas lama pada HDD.

sudo wipefs --all /dev/sda1
sudo wipefs --all /dev/sda

4.3 Buat tabel partisi GPT dan satu partisi data

sudo parted -s -a optimal /dev/sda mklabel gpt
sudo parted -s -a optimal /dev/sda mkpart STORAGE ext4 1MiB 100%
sudo partprobe /dev/sda
sudo udevadm settle

4.4 Format partisi sebagai ext4

sudo mkfs.ext4 -L STORAGE -m 0 /dev/sda1

Opsi -L STORAGE memberikan label pada partisi. Opsi -m 0 tidak mencadangkan ruang khusus untuk pengguna root karena HDD ini berfungsi sebagai media data, bukan partisi sistem.

4.5 Verifikasi hasil format

lsblk -e 7 -o NAME,PATH,SIZE,MODEL,FSTYPE,LABEL,UUID,MOUNTPOINTS

Hasil yang benar harus memuat nilai berikut:

/dev/sda1  ext4  STORAGE  752937b0-1a9c-449d-8a20-d7af28ae0a4c

Jika Anda menggunakan HDD lain, salin UUID yang tampil pada perangkat tersebut. Jangan menyalin UUID dari tutorial ini ke HDD yang berbeda.

5. Membuat mount permanen

5.1 Buat lokasi mount

sudo mkdir -p /srv/storage

5.2 Cadangkan konfigurasi fstab

sudo cp /etc/fstab /etc/fstab.backup-before-storage

5.3 Tambahkan HDD ke fstab

Buka konfigurasi:

sudo nano /etc/fstab

Tambahkan satu baris berikut pada bagian paling bawah:

UUID=752937b0-1a9c-449d-8a20-d7af28ae0a4c /srv/storage ext4 defaults,noatime,nofail,x-systemd.device-timeout=30s 0 2

Arti opsi utama:

Opsi Fungsi
defaults Menggunakan opsi mount standar yang mendukung baca dan tulis
noatime Mengurangi penulisan metadata waktu akses
nofail Menjaga Raspberry Pi tetap dapat melakukan boot ketika HDD tidak tersedia
x-systemd.device-timeout=30s Membatasi waktu tunggu perangkat menjadi 30 detik
0 2 Menonaktifkan dump dan menempatkan pemeriksaan ext4 setelah partisi root

Simpan melalui Ctrl+O, tekan Enter, lalu keluar melalui Ctrl+X.

5.4 Validasi dan pasang HDD

sudo findmnt --verify --verbose

Hasil yang benar menampilkan:

0 parse errors, 0 errors

Jika systemd masih memakai konfigurasi lama, jalankan:

sudo systemctl daemon-reload
sudo mount -a

mount -a biasanya tidak menampilkan keluaran ketika proses berhasil.

5.5 Periksa mount dan kapasitas

findmnt /srv/storage
df -hT /srv/storage

Hasil konfigurasi ini:

TARGET       SOURCE    FSTYPE OPTIONS
/srv/storage /dev/sda1 ext4   rw,noatime

6. Membuat folder data dan izin akses

Bagikan folder data, bukan root HDD. Cara ini memisahkan data pengguna dari direktori sistem lost+found.

sudo mkdir -p /srv/storage/data
sudo chown fajarb:fajarb /srv/storage/data
sudo chmod 2770 /srv/storage/data

Angka awal 2 pada 2770 mengaktifkan bit setgid. Folder dan berkas baru akan mempertahankan grup fajarb.

Uji akses tulis:

sudo -u fajarb touch /srv/storage/data/.write-test
ls -la /srv/storage/data
sudo -u fajarb rm /srv/storage/data/.write-test

Periksa izin akhir:

ls -ld /srv/storage /srv/storage/data

Hasil yang diharapkan untuk folder data:

drwxrws--- fajarb fajarb /srv/storage/data

7. Memasang Samba

7.1 Instal paket

sudo apt update
sudo apt install -y samba smbclient samba-vfs-modules

Paket samba-vfs-modules menyediakan modul fruit yang meningkatkan kompatibilitas akses dari macOS dan iPadOS.

7.2 Cadangkan konfigurasi awal

sudo cp -a /etc/samba/smb.conf \
  /etc/samba/smb.conf.backup-before-storage

7.3 Buat akun Samba

sudo smbpasswd -a fajarb
sudo smbpasswd -e fajarb

Masukkan kata sandi khusus untuk akses storage. Kata sandi ini dapat berbeda dari kata sandi Linux atau SSH.

7.4 Terapkan konfigurasi Samba minimal

Buka berkas konfigurasi:

sudo nano /etc/samba/smb.conf

Ganti seluruh isinya dengan konfigurasi berikut:

[global]
   workgroup = WORKGROUP
   server role = standalone server
   security = user

   server min protocol = SMB2_02
   ntlm auth = ntlmv2-only

   bind interfaces only = no

   hosts allow = 127.0.0.1 ::1 10.10.10.0/24 100.64.0.0/10 fd7a:115c:a1e0::/48
   hosts deny = ALL

   log file = /var/log/samba/log.%m
   logging = file
   max log size = 1000

   load printers = no
   printing = bsd
   printcap name = /dev/null
   disable spoolss = yes

   map to guest = Never
   usershare allow guests = no
   usershare max shares = 0

[Storage]
   comment = Storage Server Raspberry Pi
   path = /srv/storage/data

   browseable = yes
   read only = no
   guest ok = no
   valid users = fajarb

   force group = fajarb
   create mask = 0660
   directory mask = 0770

   vfs objects = catia fruit streams_xattr
   fruit:resource = file
   fruit:metadata = netatalk
   fruit:encoding = native

Konfigurasi ini menerapkan beberapa ketentuan:

  • Server hanya menerima SMB2 atau versi yang lebih baru.
  • Server hanya menerima autentikasi NTLMv2.
  • Samba mendengarkan alamat jaringan yang tersedia agar port SMB dapat menerima koneksi dari antarmuka tailscale0 yang memakai alamat /32.
  • hosts allow hanya mengizinkan akses dari Raspberry Pi sendiri, subnet LAN 10.10.10.0/24, rentang IPv4 Tailscale 100.64.0.0/10, dan prefiks IPv6 Tailscale fd7a:115c:a1e0::/48.
  • hosts deny = ALL menolak alamat sumber di luar daftar tersebut.
  • Server menolak akses tamu.
  • Hanya pengguna fajarb yang dapat membuka share Storage.
  • Server tidak membagikan folder home atau printer.
  • Seluruh share memakai modul Apple yang konsisten sehingga testparm tidak menampilkan peringatan konfigurasi campuran vfs_fruit.

Konfigurasi sebelumnya memakai interfaces = lo eth0 dan bind interfaces only = yes. Konfigurasi tersebut bekerja pada LAN, tetapi menolak koneksi menuju IP Tailscale karena Samba tidak membuka port 445 pada tailscale0. Jangan gunakan kembali dua parameter lama tersebut jika server perlu menerima SMB melalui Tailscale.

Simpan melalui Ctrl+O, tekan Enter, lalu keluar melalui Ctrl+X.

8. Memvalidasi dan menjalankan Samba

Periksa sintaks sebelum memulai ulang layanan:

sudo testparm -s

Konfigurasi valid menampilkan:

Loaded services file OK.
Server role: ROLE_STANDALONE

Hasil ringkas hanya boleh memuat bagian [global] dan [Storage]. Pastikan hasil tidak memuat ERROR, Unknown parameter, atau Failed to load services.

Pesan berikut bukan kesalahan sintaks:

Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Konfigurasi tetap menolak SMB1 melalui server min protocol = SMB2_02 dan menolak NTLMv1 melalui ntlm auth = ntlmv2-only.

9. Membuat Samba menunggu mount HDD

Tambahkan dependensi mount agar smbd tidak mulai sebelum /srv/storage tersedia:

sudo SYSTEMD_EDITOR=nano systemctl edit smbd.service

Editor menampilkan area seperti berikut:

### Editing /etc/systemd/system/smbd.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file

[Unit]
RequiresMountsFor=/srv/storage

### Lines below this comment will be discarded

Letakkan dua baris konfigurasi tepat sebelum komentar ### Lines below this comment will be discarded. Systemd akan membuang teks yang Anda tulis di bawah komentar tersebut.

Simpan melalui Ctrl+O, tekan Enter, lalu keluar melalui Ctrl+X.

Muat ulang systemd dan jalankan layanan:

sudo systemctl daemon-reload
sudo systemctl enable smbd
sudo systemctl restart smbd

Periksa drop-in dan status layanan:

sudo systemctl cat smbd.service
systemctl is-active smbd
systemctl is-enabled smbd

Bagian akhir systemctl cat harus memuat:

# /etc/systemd/system/smbd.service.d/override.conf
[Unit]
RequiresMountsFor=/srv/storage

Status yang diharapkan:

active
enabled

Periksa port SMB:

sudo ss -lntp 'sport = :445'

Karena bind interfaces only = no, hasil yang benar umumnya memuat socket wildcard berikut:

0.0.0.0:445
[::]:445

Socket wildcard berarti smbd dapat menerima koneksi pada alamat LAN dan Tailscale. Parameter hosts allow, autentikasi Samba, aturan firewall, dan kebijakan akses Tailscale tetap membatasi siapa yang dapat membuka share.

10. Menguji Samba dari Raspberry Pi

Tampilkan daftar share:

smbclient -L //127.0.0.1 -U fajarb

Masukkan kata sandi Samba. Daftar share harus menampilkan Storage.

Uji pembuatan folder, pengunggahan berkas, pembacaan daftar, dan penghapusan:

smbclient //127.0.0.1/Storage -U fajarb \
  -c 'mkdir UJI-SAMBA; put /etc/hostname UJI-SAMBA/hostname-test.txt; ls UJI-SAMBA; del UJI-SAMBA/hostname-test.txt; rmdir UJI-SAMBA'

Pengujian berhasil jika Samba tidak menampilkan NT_STATUS_ACCESS_DENIED, NT_STATUS_LOGON_FAILURE, atau kesalahan I/O.

10.1 Memeriksa Tailscale pada Raspberry Pi

Pastikan layanan Tailscale aktif dan Raspberry Pi mempunyai alamat pada tailnet:

systemctl is-active tailscaled
tailscale status
tailscale ip -4
ip -brief address show tailscale0

Hasil konfigurasi ini harus memuat:

100.68.196.86   raspberrypi

Status antarmuka harus memuat alamat berikut:

100.68.196.86/32

10.2 Menguji SMB melalui IP Tailscale

Jalankan pengujian langsung dari Raspberry Pi:

smbclient //100.68.196.86/Storage -U fajarb -c 'ls'

Daftar isi share harus tampil tanpa pesan NT_STATUS_CONNECTION_REFUSED.

Jika koneksi ditolak, periksa kembali socket Samba:

sudo ss -lntp 'sport = :445'

Pastikan hasil memuat 0.0.0.0:445 dan [::]:445, bukan hanya 127.0.0.1:445 dan 10.10.10.10:445.

11. Mengakses storage dari perangkat klien

Gunakan kredensial berikut pada semua perangkat:

Username: fajarb
Password: kata sandi Samba yang telah dibuat

Pilih alamat berdasarkan posisi perangkat:

Jalur akses Alamat server Kondisi penggunaan
LAN 10.10.10.10 Perangkat berada pada jaringan lokal 10.10.10.0/24
Tailscale IP 100.68.196.86 Tailscale aktif pada server dan klien
MagicDNS raspberrypi MagicDNS aktif dan klien memakai DNS Tailscale

Uji IP Tailscale terlebih dahulu. Gunakan MagicDNS setelah akses melalui 100.68.196.86 berhasil. Urutan ini memisahkan masalah koneksi SMB dari masalah resolusi nama.

11.1 macOS

  1. Aktifkan Tailscale jika Mac berada di luar LAN.

  2. Buka Finder.

  3. Pilih Go > Connect to Server atau tekan Command+K.

  4. Masukkan salah satu alamat berikut:

    smb://10.10.10.10/Storage
    smb://100.68.196.86/Storage
    smb://raspberrypi/Storage
    
  5. Pilih Registered User.

  6. Masukkan nama pengguna dan kata sandi Samba.

  7. Simpan kata sandi hanya pada perangkat pribadi yang terlindungi.

Uji port dari Terminal macOS jika Finder gagal terhubung:

nc -vz 100.68.196.86 445

Hasil yang diharapkan:

Connection to 100.68.196.86 port 445 succeeded

11.2 iPhone atau iPad

  1. Aktifkan Tailscale jika perangkat berada di luar LAN.

  2. Buka aplikasi Files.

  3. Tekan menu tiga titik.

  4. Pilih Connect to Server.

  5. Masukkan salah satu alamat berikut:

    smb://10.10.10.10
    smb://100.68.196.86
    smb://raspberrypi
    
  6. Pilih Registered User.

  7. Masukkan kredensial Samba, lalu buka share Storage.

11.3 Windows

Masukkan salah satu alamat berikut pada bilah alamat File Explorer:

\\10.10.10.10\Storage
\\100.68.196.86\Storage
\\raspberrypi\Storage

Aktifkan Tailscale sebelum memakai alamat IP Tailscale atau MagicDNS.

11.4 Android

Gunakan aplikasi open source yang mendukung SMB2 atau SMB3. SambaLite cocok untuk koneksi Samba khusus, sedangkan Voyager cocok jika Anda memerlukan pengelola berkas yang lebih umum. Instal aplikasi melalui F-Droid atau repositori resmi proyek.

Contoh konfigurasi SambaLite:

Nama koneksi : Raspberry Pi Storage
Server/Host  : 10.10.10.10
Port         : 445
Share        : Storage
Path         : kosong
Username     : fajarb
Password     : kata sandi Samba
Domain       : kosong

Untuk akses jarak jauh, aktifkan Tailscale pada Android dan ganti Server/Host menjadi:

100.68.196.86

Setelah MagicDNS berfungsi, Anda juga dapat menggunakan:

raspberrypi

Jangan menulis smb:// pada kolom host aplikasi yang menyediakan kolom Server/Host secara khusus. Gunakan VLC untuk memutar video jika file manager menyerahkan pemutaran kepada aplikasi eksternal.

11.5 Memeriksa MagicDNS

Nama pendek berikut seharusnya mengarah ke 100.68.196.86:

raspberrypi

Pada macOS, periksa resolusi nama:

dscacheutil -q host -a name raspberrypi
nc -vz raspberrypi 445

Jika IP Tailscale berhasil tetapi nama raspberrypi gagal, aktifkan MagicDNS pada pengaturan DNS tailnet dan pastikan perangkat klien menerima pengaturan DNS Tailscale. Anda juga dapat memakai nama lengkap raspberrypi.<nama-tailnet>.ts.net setelah mengetahui sufiks MagicDNS tailnet.

Jangan membuat port forwarding TCP 445 pada router. Tailscale membawa koneksi SMB melalui jaringan privatnya tanpa mengekspos layanan SMB ke internet publik.

12. Pengujian setelah restart

Restart Raspberry Pi:

sudo reboot

Setelah Raspberry Pi kembali aktif, periksa:

findmnt /srv/storage
df -hT /srv/storage
systemctl is-active smbd
systemctl is-enabled smbd
systemctl is-active tailscaled
tailscale ip -4
sudo ss -lntp 'sport = :445'

Uji kembali share secara lokal:

smbclient -L //127.0.0.1 -U fajarb
smbclient //100.68.196.86/Storage -U fajarb -c 'ls'

Konfigurasi selesai jika memenuhi seluruh kondisi berikut:

  • /srv/storage bersumber dari /dev/sda1.
  • Sistem berkas menunjukkan ext4.
  • Layanan smbd menunjukkan active dan enabled.
  • Layanan tailscaled menunjukkan active.
  • Share Storage terlihat melalui smbclient.
  • Socket Samba memuat 0.0.0.0:445 dan [::]:445.
  • Perangkat klien dapat membuat, membaca, mengubah, dan menghapus berkas melalui LAN.
  • Perangkat Tailscale dapat membuka share melalui 100.68.196.86.

13. Operasi harian dan pemeliharaan

Memeriksa kapasitas

df -hT /srv/storage

Memeriksa status layanan

systemctl status smbd --no-pager
systemctl status tailscaled --no-pager
tailscale status

Memeriksa log Samba pada boot saat ini

journalctl -u smbd -b --no-pager

Memeriksa kesalahan koneksi HDD

sudo dmesg --ctime | grep -Ei 'usb|uas|sda|reset|disconnect|error' | tail -n 100

Pesan berulang seperti USB disconnect, reset SuperSpeed USB device, kesalahan I/O, atau perangkat berubah menjadi kapasitas 0B biasanya mengarah pada masalah kabel, konektor, enclosure, atau suplai daya.

Memeriksa kesehatan SMART

Instal alat SMART:

sudo apt install -y smartmontools

Coba baca informasi HDD:

sudo smartctl -a /dev/sda

Jika USB bridge membutuhkan mode SAT, gunakan:

sudo smartctl -d sat -a /dev/sda

Tidak semua enclosure USB meneruskan data SMART. Kegagalan membaca SMART tidak selalu menunjukkan kerusakan HDD.

Menguji kecepatan HDD secara langsung

Instal fio:

sudo apt update
sudo apt install -y fio

Uji tulis berurutan dengan berkas sementara sebesar 2 GB:

fio --name=seq-write \
  --filename=/srv/storage/data/.fio-speedtest \
  --size=2G \
  --rw=write \
  --bs=1M \
  --direct=1 \
  --ioengine=libaio \
  --iodepth=1 \
  --numjobs=1 \
  --end_fsync=1 \
  --group_reporting

Perhatikan nilai WRITE: bw=....

Uji baca berurutan terhadap berkas yang sama:

fio --name=seq-read \
  --filename=/srv/storage/data/.fio-speedtest \
  --size=2G \
  --rw=read \
  --bs=1M \
  --direct=1 \
  --ioengine=libaio \
  --iodepth=1 \
  --numjobs=1 \
  --group_reporting

Perhatikan nilai READ: bw=..., lalu hapus berkas uji:

rm /srv/storage/data/.fio-speedtest

Pastikan ruang kosong HDD melebihi 2 GB sebelum menjalankan pengujian. Jangan menghentikan daya ketika fio sedang menulis data.

Memeriksa mode koneksi USB

lsusb -t

Interpretasi utama:

Hasil Makna
5000M atau lebih tinggi HDD terhubung melalui USB 3.x
480M HDD terhubung melalui USB 2.0
Driver=uas Sistem memakai protokol UAS yang sesuai untuk storage USB modern

Jika HDD hanya terhubung pada 480M, pindahkan kabel ke port USB 3.0 Raspberry Pi dan periksa kembali kabel atau enclosure.

Memeriksa kecepatan link Ethernet

sudo apt install -y ethtool
cat /sys/class/net/eth0/speed
sudo ethtool eth0

Nilai 100 berarti link bekerja pada 100 Mbps. Nilai 1000 berarti link bekerja pada 1 Gbps.

Pada jaringan yang memakai RouterBOARD RB951Ui-2HnD, link Raspberry Pi akan berhenti pada 100 Mbps karena seluruh port Ethernet router tersebut bertipe 10/100 Mbps. Batas teoritisnya sebesar:

100 Mbps / 8 = 12,5 MB/s

Transfer Samba aktual biasanya berada di bawah batas teoritis. Router gigabit, access point 5 GHz, atau switch gigabit dapat meningkatkan kecepatan lokal. Jika Raspberry Pi dan komputer terhubung pada switch gigabit yang sama, trafik lokal keduanya tidak perlu melewati port 100 Mbps RouterBOARD.

Menguji throughput jaringan dengan iperf3

Pasang iperf3 pada Raspberry Pi dan perangkat klien:

sudo apt install -y iperf3

Jalankan server pengujian pada Raspberry Pi:

iperf3 -s

Dari klien LAN, jalankan:

iperf3 -c 10.10.10.10

Dari klien Tailscale, jalankan:

iperf3 -c 100.68.196.86

Tekan Ctrl+C pada Raspberry Pi setelah pengujian selesai. iperf3 mengukur jalur jaringan tanpa melibatkan HDD atau Samba.

Menentukan sumber video yang tersendat

Hasil pengujian Kesimpulan utama
fio jauh di atas 12,5 MB/s, tetapi Ethernet menunjukkan 100 Jalur Ethernet 100 Mbps membatasi transfer
lsusb -t menunjukkan 480M Koneksi HDD memakai USB 2.0
fio sangat rendah atau berubah tajam Periksa suplai daya, kabel, enclosure, dan kesehatan HDD
iperf3 LAN rendah atau tidak stabil Periksa kabel, port, switch, atau Wi-Fi klien
LAN lancar, tetapi Tailscale lambat Periksa kualitas internet, jalur langsung atau relay Tailscale, dan Wi-Fi klien
Berkas lancar setelah disalin ke perangkat Hambatan berada pada jaringan atau SMB
Berkas tetap tersendat setelah disalin Periksa codec, bitrate, pemutar, dan kemampuan dekode perangkat

Koneksi 100 Mbps masih dapat memutar banyak video terkompresi. Video dapat tetap tersendat ketika Wi-Fi 2,4 GHz mengalami interferensi, throughput aktual turun, atau bitrate video meningkat sesaat.

14. Melepas HDD dengan aman

Hentikan akses Samba sebelum melepas HDD:

sudo systemctl stop smbd
sudo sync
sudo umount /srv/storage

Pastikan HDD tidak lagi terpasang:

findmnt /srv/storage

Jika perintah tidak menghasilkan keluaran, Anda dapat melepas HDD. Saat memasang kembali HDD, jalankan:

sudo mount -a
sudo systemctl start smbd

Jika sistem menolak unmount karena perangkat sibuk, periksa proses yang masih mengakses HDD:

sudo fuser -vm /srv/storage

Tutup proses atau koneksi klien yang masih aktif, kemudian ulangi umount. Jangan mencabut paksa HDD yang masih terpasang.

15. Keamanan data dan jaringan

  • Jangan meneruskan port TCP 445 dari router ke internet publik.
  • Gunakan Tailscale untuk akses dari luar jaringan lokal.
  • Pertahankan hosts allow agar Samba hanya menerima subnet LAN dan rentang alamat Tailscale.
  • Kelola kebijakan akses tailnet agar hanya perangkat atau pengguna yang berwenang dapat mencapai Raspberry Pi pada port 445.
  • Gunakan kata sandi Samba yang kuat dan berbeda dari kata sandi umum lainnya.
  • Jangan aktifkan guest ok = yes untuk penyimpanan pribadi.
  • Simpan salinan data penting pada perangkat lain. Storage server tunggal tidak menggantikan sistem cadangan.
  • Matikan Raspberry Pi secara normal sebelum memutus daya.
  • Gunakan powered USB hub jika log kernel menunjukkan reset USB atau putus sambung berulang.

Aturan firewall opsional

Periksa apakah UFW aktif:

sudo ufw status verbose

Jika statusnya active, izinkan SMB dari LAN dan antarmuka Tailscale:

sudo ufw allow in on eth0 from 10.10.10.0/24 to any port 445 proto tcp comment 'Samba LAN'
sudo ufw allow in on tailscale0 to any port 445 proto tcp comment 'Samba Tailscale'
sudo ufw status numbered

Jangan mengaktifkan UFW melalui SSH sebelum memastikan aturan SSH yang diperlukan sudah tersedia. Aturan firewall melengkapi autentikasi Samba dan kebijakan Tailscale, tetapi tidak menggantikannya.

16. Troubleshooting

HDD tidak terpasang setelah restart

Periksa UUID aktual:

sudo blkid /dev/sda1

Bandingkan UUID tersebut dengan baris /etc/fstab:

grep -n '/srv/storage' /etc/fstab
sudo findmnt --verify --verbose

Periksa koneksi fisik dan log kernel:

lsblk -e 7 -o NAME,SIZE,MODEL,FSTYPE,LABEL,UUID,MOUNTPOINTS
sudo dmesg --ctime | tail -n 100

Samba tidak aktif

sudo testparm -s
systemctl status smbd --no-pager
journalctl -u smbd -b --no-pager

Perbaiki kesalahan konfigurasi sebelum menjalankan:

sudo systemctl restart smbd

systemctl edit tidak menyimpan konfigurasi

Pesan berikut berarti area konfigurasi yang valid masih kosong:

after editing, new contents are empty, not writing file

Jalankan kembali:

sudo SYSTEMD_EDITOR=nano systemctl edit smbd.service

Tuliskan [Unit] dan RequiresMountsFor=/srv/storage di atas komentar ### Lines below this comment will be discarded.

Peringatan campuran vfs_fruit

Peringatan berikut muncul ketika sebagian share memakai vfs_fruit, tetapi share lain tidak memakainya:

WARNING: some services use vfs_fruit, others don't

Gunakan konfigurasi minimal dalam tutorial ini. Pastikan testparm -s hanya menampilkan [global] dan [Storage].

Nama pengguna atau kata sandi ditolak

Aktifkan kembali akun Samba dan buat kata sandi baru:

sudo smbpasswd -a fajarb
sudo smbpasswd -e fajarb

Uji kredensial dari Raspberry Pi:

smbclient -L //127.0.0.1 -U fajarb

Klien dapat membaca tetapi tidak dapat menulis

Periksa mount dan izin folder:

findmnt /srv/storage
ls -ld /srv/storage/data

Pulihkan kepemilikan dan izin:

sudo chown fajarb:fajarb /srv/storage/data
sudo chmod 2770 /srv/storage/data
sudo systemctl restart smbd

Server tidak dapat diakses dari klien

Periksa alamat IP LAN, IP Tailscale, dan port Samba:

ip -br address show eth0
tailscale ip -4
sudo ss -lntp 'sport = :445'

Hasil ss seharusnya memuat:

0.0.0.0:445
[::]:445

Jika klien berada pada LAN, gunakan smb://10.10.10.10/Storage. Pastikan router atau switch mengizinkan lalu lintas antarklien dan perangkat tidak memakai jaringan tamu yang mengaktifkan client isolation.

IP Tailscale menghasilkan Connection refused

Uji dari Raspberry Pi:

smbclient //100.68.196.86/Storage -U fajarb -c 'ls'

Jika perintah menghasilkan NT_STATUS_CONNECTION_REFUSED, periksa /etc/samba/smb.conf. Pastikan konfigurasi tidak lagi memuat:

interfaces = lo eth0
bind interfaces only = yes

Gunakan konfigurasi final pada Bagian 7.4, lalu jalankan:

sudo testparm -s
sudo systemctl restart smbd
sudo ss -lntp 'sport = :445'

IP Tailscale tidak dapat dijangkau dari klien

Pastikan kedua perangkat berada pada tailnet yang sama:

tailscale status
tailscale ping 100.68.196.86

Periksa pula kebijakan akses Tailscale dan firewall Raspberry Pi. Anda tidak perlu membuat port forwarding pada router.

IP Tailscale bekerja, tetapi MagicDNS gagal

Uji IP terlebih dahulu:

smb://100.68.196.86/Storage

Pada macOS, periksa nama perangkat:

dscacheutil -q host -a name raspberrypi
nc -vz raspberrypi 445

Aktifkan MagicDNS pada pengaturan DNS tailnet dan pastikan aplikasi Tailscale pada klien memakai DNS Tailscale. Sambil memperbaiki resolusi nama, tetap gunakan IP 100.68.196.86.

Koneksi mencapai port 445, tetapi login gagal

Jika nc berhasil tetapi aplikasi tetap menolak login, jaringan sudah berfungsi. Uji akun Samba:

smbclient //127.0.0.1/Storage -U fajarb -c 'ls'
sudo pdbedit -L | grep '^fajarb:'

Hapus kredensial Samba lama yang tersimpan pada klien, lalu masukkan kembali pengguna fajarb dan kata sandi Samba.

17. Checklist akhir

  • HDD terdeteksi sebagai /dev/sda.
  • Partisi /dev/sda1 memakai ext4 dan label STORAGE.
  • UUID pada /etc/fstab sama dengan UUID HDD.
  • HDD terpasang pada /srv/storage setelah restart.
  • Folder /srv/storage/data dimiliki fajarb:fajarb.
  • Akun Samba fajarb aktif.
  • sudo testparm -s tidak menampilkan kesalahan.
  • smbd berstatus active dan enabled.
  • tailscaled berstatus active.
  • Drop-in systemd memuat RequiresMountsFor=/srv/storage.
  • Konfigurasi Samba mengizinkan 10.10.10.0/24, 100.64.0.0/10, dan fd7a:115c:a1e0::/48.
  • Port 445 mendengarkan pada 0.0.0.0 dan [::].
  • Share Storage dapat membaca dan menulis data.
  • Share dapat diakses melalui smb://10.10.10.10/Storage.
  • Share dapat diakses melalui smb://100.68.196.86/Storage ketika Tailscale aktif.
  • MagicDNS smb://raspberrypi/Storage bekerja jika fitur tersebut diaktifkan.
  • Port SMB tidak dibuka ke internet publik.
  • Data penting memiliki salinan cadangan pada media lain.

18. Perintah pemeriksaan cepat

Gunakan rangkaian berikut untuk memeriksa keadaan server sewaktu-waktu:

lsblk -e 7 -o NAME,SIZE,MODEL,FSTYPE,LABEL,UUID,MOUNTPOINTS
findmnt /srv/storage
df -hT /srv/storage
systemctl is-active smbd
systemctl is-enabled smbd
systemctl is-active tailscaled
tailscale status
tailscale ip -4
sudo testparm -s
sudo ss -lntp 'sport = :445'

Storage server siap digunakan ketika HDD terpasang pada /srv/storage, layanan smbd aktif, share dapat diakses melalui smb://10.10.10.10/Storage, dan perangkat Tailscale dapat membuka smb://100.68.196.86/Storage. MagicDNS menyediakan alamat smb://raspberrypi/Storage setelah klien menerima konfigurasi DNS Tailscale.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment