Raspberry Pi – Otomatik HDD Bağlama Scripti V2 (fstab Kalıcı Mount)

Kutay Utku
22 dk okuma

Raspberry Pi ile uğraşan herkesin er ya da geç karşılaştığı bir problem vardır: harici bir HDD ya da SSD taktığınızda, diski mount komutuyla bağlamak kolaydır ama Pi’yi her yeniden başlattığınızda bu işlemi elle tekrar yapmak gerekir. Özellikle Pi’yi bir medya sunucusu (Plex, Jellyfin), bir Samba/NFS paylaşım sunucusu, bir yedekleme hedefi ya da bir torrent/indirme kutusu olarak kullanıyorsanız, diskin her reboot’ta otomatik ve kalıcı şekilde bağlanması hayati önem taşır. İşte bu ihtiyacı ortadan kaldırmak için yazılmış olan otomatik_hdd_2.sh script’i tam olarak bunu yapıyor: diski tespit ediyor, isteğe bağlı olarak NTFS formatlıyor, /etc/fstab dosyasına kalıcı bir satır ekliyor ve diski otomatik olarak bağlıyor.

Bu yazıda script’i satır satır, adım adım, hiçbir detayı atlamadan inceleyeceğiz. Script’in ne yaptığını, nasıl çalıştırılacağını, hangi ortamlarda kullanılması gerektiğini, hangi durumlarda dikkatli olmanız gerektiğini ve script’in mevcut sınırlamalarını konuşacağız. Sonunda script’i güvenle kendi Raspberry Pi’nizde (ya da herhangi bir Debian tabanlı Linux sisteminde) kullanabilecek düzeyde bilgiye sahip olacaksınız.

Bu Script Tam Olarak Ne İşe Yarar?

Kısaca özetlemek gerekirse otomatik_hdd_2.sh:

  1. Sistemde takılı olan diskleri listeler (lsblk ile).
  2. Kullanıcıdan hangi diski (örneğin sda1) bağlamak istediğini sorar.
  3. İsteğe bağlı olarak diski NTFS dosya sistemi ile sıfırdan formatlar (bu adım opsiyoneldir ve onay ister).
  4. Diskin UUID‘sini (Universally Unique Identifier) alır.
  5. /mnt/hdd, /mnt/hdd1, /mnt/hdd2 gibi çakışmayan bir mount noktası belirler.
  6. /etc/fstab dosyasına bu UUID için kalıcı bir bağlama (mount) satırı ekler.
  7. Diski hemen o an bağlar ve sonucu kullanıcıya raporlar.

Bunun pratikteki anlamı şudur: script’i bir kere çalıştırdığınızda, Raspberry Pi kapatılıp açılsa bile disk otomatik olarak aynı klasöre bağlanmış halde sizi bekliyor olacak. Bu, mount komutunu elle her seferinde yazmaktan (ya da unutup “diskim nerede kayboldu” diye panik yapmaktan) sizi kurtarır.

Neden “V2” ve Neden fstab Önemli?

Script’in isminden de anlaşılacağı gibi bu ikinci versiyon, önceki (muhtemelen sadece mount komutunu manuel çalıştıran ya da geçici bağlama yapan) versiyona kıyasla asıl farkı kalıcılık katmasıdır. Linux’ta bir diski mount /dev/sda1 /mnt/hdd komutuyla bağlarsanız, bu bağlama sadece o oturum için geçerlidir; sistemi yeniden başlattığınızda kaybolur. /etc/fstab dosyası ise Linux çekirdeğinin (kernel) açılış sırasında hangi disklerin nereye bağlanacağını okuduğu sistem dosyasıdır. Bir satırı bu dosyaya eklediğinizde, o disk her açılışta otomatik olarak bağlanır — tıpkı Windows’ta bir sürücü harfinin her zaman orada olması gibi.

Bu yüzden V2’nin can alıcı noktası, script’in diski sadece o anlık bağlamakla kalmayıp /etc/fstab‘a UUID bazlı kalıcı bir kayıt eklemesidir. UUID kullanılması da önemlidir çünkü /dev/sda1 gibi cihaz isimleri, sisteme birden fazla disk takıldığında ya da USB portları değiştiğinde değişebilir; UUID ise diskin dosya sistemine gömülü, değişmeyen benzersiz bir kimliktir. Bu sayede fstab kaydı hep doğru diski bulur.

Script Hangi Ortamda, Ne Zaman Kullanılmalı?

Bu script özellikle şu senaryolar için tasarlanmıştır:

  • Raspberry Pi OS (Debian tabanlı) üzerinde çalışan bir Raspberry Pi’ye USB üzerinden harici bir HDD ya da SSD taktığınızda.
  • Diskin NTFS dosya sistemiyle formatlanmasını istediğinizde (örneğin diski hem Windows hem Linux tarafında okunabilir/yazılabilir tutmak istiyorsanız NTFS mantıklı bir tercihtir, ntfs-3g sürücüsü sayesinde Linux’ta tam okuma/yazma desteği sağlar).
  • Bir medya sunucusu, dosya paylaşım sunucusu, yedekleme kutusu ya da NAS benzeri bir kurulum yapıyorsanız ve diskin her açılışta otomatik hazır olmasını istiyorsanız.
  • Script sadece Raspberry Pi’ye özel değildir; apt-get kullanan (Debian/Ubuntu tabanlı) herhangi bir Linux sisteminde de çalışır. Ancak apt-get komutu barındırdığı için Fedora, Arch gibi RPM/pacman tabanlı dağıtımlarda çalışmaz, önce paket yöneticisi satırının uyarlanması gerekir.

Kullanmamanız gereken durumlar da var: Eğer diskte halihazırda önemli veri varsa ve NTFS formatlamayı seçerseniz, script bu veriyi geri dönüşü olmayan şekilde siler. Bu yüzden script’i sadece boş bir disk üzerinde ya da verisini önceden yedeklediğiniz bir disk üzerinde formatlama seçeneğiyle kullanmalısınız. Zaten formatlanmış ve üzerinde veri olan bir NTFS diski sadece bağlamak istiyorsanız, formatlama sorusuna “hayir” diyerek script’i güvenle kullanabilirsiniz; bu durumda script mevcut veriye dokunmadan sadece mount işlemini gerçekleştirir.

Ön Gereksinimler

Script’i çalıştırmadan önce şunlara ihtiyacınız var:

  • Raspberry Pi (ya da başka bir Debian/Ubuntu tabanlı Linux makine).
  • İnternet bağlantısı (script apt-get install ntfs-3g komutunu çalıştırdığı için ntfs-3g paketi sistemde yoksa internetten indirilmesi gerekir).
  • root yetkisi (script sudo ile çalıştırılmalıdır, aksi halde script kendini sonlandırır).
  • Bağlamak istediğiniz USB disk, Pi’ye takılmış ve sistem tarafından tanınmış olmalı (lsblk çıktısında görünmeli).

Script’in Tam Kodu

Aşağıda otomatik_hdd_2.sh dosyasının birebir içeriği yer alıyor:

#!/bin/bash

BASE_MOUNT="/mnt/hdd"
MOUNT_POINT="$BASE_MOUNT"

if [ "$EUID" -ne 0 ]; then
  echo "Sudo ile calistirin."
  exit 1
fi

apt-get install -y ntfs-3g > /dev/null 2>&1

echo "Takili diskler:"
lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID

read -p "Hangi cihazi mount etmek istiyorsun? (ornek: sda1): " DEVICE
DEVICE_PATH="/dev/$DEVICE"

if [ ! -b "$DEVICE_PATH" ]; then
  echo "Hata: $DEVICE_PATH bulunamadi."
  exit 1
fi

echo ""
echo "============================================"
echo "  UYARI: $DEVICE_PATH NTFS OLARAK BICIMLENDIRILECEK!"
echo "  DISKTEKI TUM VERILER KALICI OLARAK SILINECEK!"
echo "============================================"
echo ""
read -p "Bicimlendirmek istiyor musunuz? (evet/hayir): " ONAY

if [ "$ONAY" = "evet" ]; then
  read -p "Disk etiket adi girin (ornek: YEDEK): " LABEL

  echo "Unmount ediliyor..."
  umount "$DEVICE_PATH" 2>/dev/null
  umount -l "$DEVICE_PATH" 2>/dev/null

  OLD_UUID=$(blkid -s UUID -o value "$DEVICE_PATH")
  if [ -n "$OLD_UUID" ]; then
    sed -i "/$OLD_UUID/d" /etc/fstab
    echo "Eski fstab kaydi silindi."
  fi

  echo "Bicimlendiriliyor..."
  mkfs.ntfs -f -L "$LABEL" "$DEVICE_PATH"

  if [ $? -ne 0 ]; then
    echo "Hata: Bicimlendirme basarisiz."
    exit 1
  fi

  echo "Bicimlendirme tamamlandi."
  sleep 2
else
  echo "Bicimlendirme atlandi. Direkt mount edilecek..."
fi

UUID=$(blkid -s UUID -o value "$DEVICE_PATH")
if [ -z "$UUID" ]; then
  echo "UUID bulunamadi."
  exit 1
fi

i=1
while [ -d "$MOUNT_POINT" ]; do
  MOUNT_POINT="${BASE_MOUNT}${i}"
  i=$((i+1))
done

mkdir -p "$MOUNT_POINT"
echo "Mount noktasi: $MOUNT_POINT"

FSTAB_LINE="UUID=$UUID $MOUNT_POINT ntfs-3g defaults,auto,users,rw,nofail,uid=1000,gid="
echo "$FSTAB_LINE" >> /etc/fstab
echo "fstab'a eklendi: $FSTAB_LINE"

mount "$DEVICE_PATH" "$MOUNT_POINT"

if mountpoint -q "$MOUNT_POINT"; then
  echo "Basarili! Disk $MOUNT_POINT altina baglandi."
  df -h "$MOUNT_POINT"
else
  echo "Hata: Mount basarisiz."
  dmesg | tail -5
fi

Script Bölüm Bölüm Nasıl Çalışıyor?

Şimdi bu kodu parça parça açalım, çünkü bir script’i “kopyala-yapıştır çalıştır” mantığıyla kullanmak yerine ne yaptığını anlayarak kullanmak, hem güven verir hem de bir sorun çıktığında nereye bakacağınızı bilmenizi sağlar.

1) Root kontrolü

if [ "$EUID" -ne 0 ]; then
  echo "Sudo ile calistirin."
  exit 1
fi

EUID (Effective User ID), script’i çalıştıran kullanıcının etkin kullanıcı numarasıdır. root kullanıcısının EUID‘si her zaman 0‘dır. Bu kontrol, script sudo olmadan çalıştırılırsa hemen durur ve kullanıcıyı uyarır. Disk formatlamak, /etc/fstab gibi sistem dosyalarını değiştirmek ve mount yapmak root yetkisi gerektirdiği için bu kontrol mantıklı ve gereklidir.

2) ntfs-3g kurulumu

apt-get install -y ntfs-3g > /dev/null 2>&1

ntfs-3g, Linux’ta NTFS dosya sistemini tam okuma/yazma desteğiyle kullanmanızı sağlayan sürücüdür. Raspberry Pi OS’ta bu paket varsayılan olarak kurulu olmayabilir, bu yüzden script her çalıştığında sessizce (> /dev/null 2>&1 çıktıyı ve hata mesajlarını gizler) kurulumu dener. Paket zaten kuruluysa apt-get hiçbir şey yapmaz ve script sorunsuz devam eder.

3) Diskleri listeleme

lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID

lsblk (list block devices), sisteme bağlı tüm disk ve bölümleri (partition) listeler. Burada -o parametresiyle sadece isim, boyut, dosya sistemi türü, etiket ve UUID sütunları gösteriliyor. Bu, kullanıcının hangi cihazı seçmesi gerektiğine karar vermesi için kritik bir bilgi ekranıdır. Script’i çalıştırdığınızda burada çıkan tabloyu dikkatlice okumalısınız — yanlış diski seçmek, yanlış diskin formatlanmasına yol açabilir.

4) Cihaz seçimi ve doğrulama

read -p "Hangi cihazi mount etmek istiyorsun? (ornek: sda1): " DEVICE
DEVICE_PATH="/dev/$DEVICE"

if [ ! -b "$DEVICE_PATH" ]; then
  echo "Hata: $DEVICE_PATH bulunamadi."
  exit 1
fi

Kullanıcıdan sadece sda1 gibi kısa bir isim istenir, script bunu otomatik olarak /dev/sda1 haline getirir. -b testi, verilen yolun gerçekten bir “block device” (blok cihazı, yani bir disk/partition) olup olmadığını kontrol eder. Yanlış yazım ya da var olmayan bir cihaz girilirse script burada güvenli şekilde durur.

5) Formatlama uyarısı ve onayı

echo "UYARI: $DEVICE_PATH NTFS OLARAK BICIMLENDIRILECEK!"
...
read -p "Bicimlendirmek istiyor musunuz? (evet/hayir): " ONAY

Bu kısım script’in en kritik güvenlik adımıdır. Kullanıcıya açıkça, büyük harflerle ve dikkat çekici şekilde diskin formatlanacağı ve tüm verilerin sileceği söylenir. Kullanıcı tam olarak evet yazmadıkça (büyük/küçük harf ya da başka bir kelime kabul edilmez, sadece birebir evet string’i) formatlama gerçekleşmez. Bu, yanlışlıkla Enter’a basıp diski silmenizi önleyen basit ama etkili bir güvenlik katmanıdır.

6) Formatlama adımı (onay verilirse)

read -p "Disk etiket adi girin (ornek: YEDEK): " LABEL

umount "$DEVICE_PATH" 2>/dev/null
umount -l "$DEVICE_PATH" 2>/dev/null

OLD_UUID=$(blkid -s UUID -o value "$DEVICE_PATH")
if [ -n "$OLD_UUID" ]; then
  sed -i "/$OLD_UUID/d" /etc/fstab
  echo "Eski fstab kaydi silindi."
fi

mkfs.ntfs -f -L "$LABEL" "$DEVICE_PATH"

Burada sırasıyla şunlar oluyor:

  • Kullanıcıdan diske vereceği isim (etiket/label) istenir. Bu etiket, dosya yöneticilerinde diskin görünen adı olur (örn. “YEDEK”).
  • Disk önce normal umount ile, o başarısız olursa “lazy unmount” (umount -l) ile bağlantısı kesilir. Lazy unmount, disk hâlâ kullanımda olsa bile bağlantı noktasını hemen serbest bırakır, gerçek ayrılma işlemi arka planda tamamlanır. Bu, formatlama öncesi diskin meşgul olmamasını garanti etmeye çalışır.
  • Diskin eski UUID’si alınır ve eğer /etc/fstab içinde bu UUID’yi içeren bir satır varsa sed -i "/$OLD_UUID/d" komutuyla silinir. Bu önemlidir çünkü format sonrası disk yeni bir UUID alacaktır; eski UUID’ye ait ölü bir fstab satırı kalırsa, açılışta sistemin var olmayan bir UUID’yi aramaya çalışmasına (ve olası boot gecikmelerine) yol açabilirdi.
  • mkfs.ntfs -f -L "$LABEL" "$DEVICE_PATH" komutu diski gerçekten formatlar. -f (force/fast) hızlı format yapar, -L ile etiket atanır. Bu adım geri döndürülemez: disk üzerindeki tüm veri kalıcı olarak silinir.
  • Formatlama başarısız olursa ($? yani bir önceki komutun çıkış kodu sıfırdan farklıysa) script hata verip durur.

7) UUID alma ve mount noktası belirleme

UUID=$(blkid -s UUID -o value "$DEVICE_PATH")
...
i=1
while [ -d "$MOUNT_POINT" ]; do
  MOUNT_POINT="${BASE_MOUNT}${i}"
  i=$((i+1))
done

mkdir -p "$MOUNT_POINT"

Formatlama yapılmış olsun ya da olmasın, script bu noktada diskin (yeni ya da mevcut) UUID’sini blkid ile okur. Ardından mount noktası için /mnt/hdd klasörünün var olup olmadığına bakılır; eğer varsa /mnt/hdd1, o da varsa /mnt/hdd2 şeklinde artan bir isim bulunana kadar devam edilir. Bu döngü, script’i birden fazla disk için art arda çalıştırdığınızda her diskin kendine ait, çakışmayan bir klasöre bağlanmasını sağlar — yani script’i ikinci bir harici disk için tekrar çalıştırdığınızda ilk diskinizin mount noktasını ezmez.

8) fstab satırının eklenmesi

FSTAB_LINE="UUID=$UUID $MOUNT_POINT ntfs-3g defaults,auto,users,rw,nofail,uid=1000,gid="
echo "$FSTAB_LINE" >> /etc/fstab

Bu, script’in kalbi olan satır. /etc/fstab dosyasının her satırı şu formatta olur:

<disk kimliği> <mount noktası> <dosya sistemi türü> <seçenekler> <dump> <pass>

Script’in eklediği satırda:

  • UUID=$UUID → diskin benzersiz kimliği, cihaz adı yerine kullanılır (cihaz adı değişse bile UUID sabit kalır).
  • $MOUNT_POINT → örneğin /mnt/hdd.
  • ntfs-3g → dosya sistemi tipi, tam okuma/yazma NTFS sürücüsü.
  • defaults → standart mount seçenekleri (rw, suid, dev, exec, auto, nouser, async).
  • auto → sistem açılışında otomatik bağlanır.
  • users → root olmayan kullanıcıların da diski mount/umount edebilmesine izin verir.
  • rw → okuma/yazma modunda bağlanır.
  • nofailçok kritik bir seçenek: disk açılış sırasında takılı değilse ya da bir sorun varsa, sistem bu yüzden açılışta takılıp kalmaz (boot hatası vermez), sadece o mount adımını atlar. Bu olmadan, USB disk çıkarılmışken Pi’yi açarsanız sistem sizi bir “recovery/emergency shell” ekranında bırakabilir.
  • uid=1000 → diske erişecek varsayılan kullanıcı ID’si (Raspberry Pi OS’ta genelde ilk normal kullanıcı, örn. pi kullanıcısı, UID 1000’dir).
  • gid= → burada bir grup ID’si belirtilmesi bekleniyor fakat script bu değeri boş bırakıyor. Bu, bilinen bir eksiklik/hata olarak aşağıda “Dikkat Edilmesi Gerekenler” bölümünde ayrıca ele alınıyor.

9) Diskin bağlanması ve sonuç kontrolü

mount "$DEVICE_PATH" "$MOUNT_POINT"

if mountpoint -q "$MOUNT_POINT"; then
  echo "Basarili! Disk $MOUNT_POINT altina baglandi."
  df -h "$MOUNT_POINT"
else
  echo "Hata: Mount basarisiz."
  dmesg | tail -5
fi

Fstab’a satır eklendikten sonra script diski o an için de manuel olarak bağlar; böylece bir sonraki reboot’u beklemeden hemen kullanmaya başlayabilirsiniz. mountpoint -q komutu, belirtilen klasörün gerçekten bir mount noktası olup olmadığını sessizce (mesaj basmadan) kontrol eder. Başarılıysa df -h ile diskin boyutu, kullanılan/boş alanı gösterilir. Başarısızsa, hata ayıklamaya yardımcı olması için çekirdek mesaj günlüğünün (dmesg) son 5 satırı ekrana basılır.

Script’i Nasıl Kullanırsınız? (Adım Adım)

  1. Script dosyasını Raspberry Pi’ye aktarın. SSH ile bağlıysanız scp, wget/curl (bir URL’den indiriyorsanız) ya da doğrudan nano otomatik_hdd_2.sh ile içeriği yapıştırıp kaydedebilirsiniz.
  2. Çalıştırma izni verin:
   chmod +x otomatik_hdd_2.sh
  1. Harici diskinizi Raspberry Pi’nin bir USB portuna takın. Birkaç saniye bekleyin ki sistem diski tanısın.
  2. Script’i root yetkisiyle çalıştırın:
   sudo ./otomatik_hdd_2.sh
  1. Script size takılı diskleri listeleyecek. Çıktıda diskinizi bulun (genelde boyutuna bakarak ayırt edebilirsiniz, örn. 1TB’lık bir disk sda ya da sda1 olarak görünebilir).
  2. İstenince disk adını (örneğin sda1) yazıp Enter’a basın.
  3. Eğer disk zaten NTFS formatlıysa ve verisine dokunmak istemiyorsanız, formatlama sorusuna hayir yazın. Eğer diski sıfırdan hazırlamak/formatlamak istiyorsanız, evet yazın ve ardından bir etiket adı girin (örn. YEDEK, MEDYA, BACKUP).

Uyarı: evet dediğiniz an disk üzerindeki tüm veriler kalıcı olarak silinir. Emin değilseniz hayir deyip script’i iptal edin (Ctrl+C) ve önce verinizi yedekleyin.

  1. Script otomatik olarak bir mount noktası belirleyip (/mnt/hdd, /mnt/hdd1, …) diski oraya bağlayacak ve /etc/fstab‘a kalıcı kayıt ekleyecektir.
  2. İşlem sonunda “Basarili! Disk /mnt/hdd altina baglandi.” mesajını ve df -h çıktısını göreceksiniz. Bu, diskin kullanıma hazır olduğu anlamına gelir.
  3. Diskin gerçekten kalıcı olarak bağlandığından emin olmak isterseniz, Pi’yi yeniden başlatın:
    bash sudo reboot
    ve tekrar bağlandıktan sonra:
    bash df -h
    ya da
    bash ls /mnt/hdd
    komutlarıyla diskin hâlâ orada olduğunu doğrulayın.

Örnek Bir Kullanım Senaryosu

Diyelim ki Raspberry Pi’nize 1TB’lık boş bir harici disk taktınız ve bunu Plex medya kütüphaneniz için hazırlamak istiyorsunuz. Akış şöyle olur:

$ sudo ./otomatik_hdd_2.sh
Takili diskler:
NAME   SIZE FSTYPE LABEL UUID
sda    931G
└─sda1 931G

Hangi cihazi mount etmek istiyorsun? (ornek: sda1): sda1

============================================
  UYARI: /dev/sda1 NTFS OLARAK BICIMLENDIRILECEK!
  DISKTEKI TUM VERILER KALICI OLARAK SILINECEK!
============================================

Bicimlendirmek istiyor musunuz? (evet/hayir): evet
Disk etiket adi girin (ornek: YEDEK): MEDYA
Unmount ediliyor...
Bicimlendiriliyor...
Bicimlendirme tamamlandi.
Mount noktasi: /mnt/hdd
fstab'a eklendi: UUID=1234-5678 /mnt/hdd ntfs-3g defaults,auto,users,rw,nofail,uid=1000,gid=
Basarili! Disk /mnt/hdd altina baglandi.
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       931G   50M  931G   1% /mnt/hdd

Bu andan itibaren /mnt/hdd klasörü, Pi her açıldığında otomatik olarak bu diske işaret edecek şekilde kalıcı hale gelmiştir.

fstab Seçenekleri Neden Bu Şekilde Seçilmiş?

Script’in fstab satırında kullandığı seçenekler rastgele değil, USB harici disk senaryosuna özel olarak düşünülmüş seçenekler:

  • nofail: Belki de en önemli seçenek. USB diskler bazen gevşek bağlantı, güç kesintisi ya da farklı bir porta takma gibi nedenlerle açılışta orada olmayabilir. nofail olmadan, fstab’da tanımlı bir disk açılışta bulunamazsa Linux açılış sürecini “emergency mode”a düşürebilir ve Pi’niz normal şekilde açılmaz. nofail sayesinde disk yoksa sistem sorunsuz açılmaya devam eder, sadece o mount adımı atlanır.
  • users: Root olmayan kullanıcıların da diski (yeniden) bağlayıp ayırabilmesine izin verir; bu, pi kullanıcısıyla günlük işlemler yapıyorsanız kullanışlıdır.
  • uid=1000: NTFS dosya sisteminin kendisi Linux’un sahiplik (ownership) sistemini native olarak desteklemez, bu yüzden ntfs-3g mount sırasında tüm dosyaları belirtilen uid‘e ait gibi gösterir. 1000, Raspberry Pi OS’ta varsayılan ilk kullanıcının (pi ya da kurulumda belirlediğiniz kullanıcı adı) UID’sidir, böylece o kullanıcı diske yazma/okuma yapabilir.
  • auto: Diskin mount -a komutuyla ya da açılışta otomatik olarak bağlanmasını sağlar.

Dikkat Edilmesi Gereken Noktalar ve Bilinen Sınırlamalar

Blogunuzda okuyuculara dürüst davranmak adına, script’in mevcut haliyle sahip olduğu bazı sınırlamalardan da bahsetmekte fayda var:

  1. gid= değeri boş bırakılmış. fstab satırının sonunda gid= yazıyor ama bir grup numarası verilmemiş. Pratikte bu genelde sorun çıkarmaz çünkü çoğu ntfs-3g sürümü gid belirtilmezse mount işlemini yine uid=1000 ile devam ettirir ya da varsayılan grup ID’sini kullanır; ancak bazı sistemlerde boş bir değer mount komutunun beklenmedik davranmasına ya da bir uyarıya yol açabilir. Blogunuzda ya bu satırı olduğu gibi paylaşıp bir dipnotla “gid boş bırakılmış, isterseniz gid=1000 olarak elle düzenleyebilirsiniz” diye belirtebilirsiniz ya da script’i kullanmadan önce bu satırı kendiniz gid=1000 şeklinde tamamlayabilirsiniz.
  2. Script’i aynı disk için tekrar çalıştırırsanız ve formatlamayı atlarsanız, eski fstab kaydı silinmez. UUID bazlı eski fstab satırının silinmesi sadece formatlama yapıldığında (ONAY="evet" dalında) devreye giriyor. Diski formatlamadan tekrar mount etmeye çalışırsanız ve daha önce bu disk için zaten bir fstab kaydı varsa, script bunu fark etmeden /etc/fstab‘a ikinci bir satır daha ekleyebilir. Bu, aynı UUID için birden fazla fstab satırı oluşmasına ve karışıklığa yol açabilir. Script’i ikinci kez aynı disk üzerinde çalıştırmadan önce /etc/fstab dosyasını cat /etc/fstab ile kontrol etmeniz önerilir.
  3. Mount noktası kontrolü, klasörün var olup olmadığına bakıyor, gerçekten kullanımda olup olmadığına değil. /mnt/hdd klasörü daha önce başka bir amaçla (örneğin boş bir klasör olarak) oluşturulmuşsa, script bunu “dolu” sayıp /mnt/hdd1‘e geçecektir; bu istemediğiniz bir isimlendirmeye yol açabilir.
  4. apt-get internet bağlantısı gerektirir. İnternetsiz bir ortamda ve ntfs-3g daha önce kurulmamışsa bu adım sessizce başarısız olur ama script yine de devam etmeye çalışır; mkfs.ntfs ya da mount komutu bulunamama hatası verebilir.
  5. Debian/Ubuntu (apt tabanlı) sistemlere özeldir. Fedora, Arch, openSUSE gibi dağıtımlarda apt-get komutu bulunmadığı için script çalışmaz; paket kurulum satırının ilgili dağıtımın paket yöneticisine göre değiştirilmesi gerekir.
  6. Formatlama işlemi geri döndürülemez. Bu bir “hata” değil ama script’in en riskli kısmı budur. evet onayı bir güvenlik katmanı sağlasa da, yanlış disk adı girip yanlışlıkla sistem diskini ya da başka önemli bir diski formatlamamak için lsblk çıktısını çok dikkatli okumak gerekir.

Sık Karşılaşılabilecek Hatalar ve Çözümleri

  • “Sudo ile calistirin.” → Script’i sudo ./otomatik_hdd_2.sh şeklinde, sudo ile başlatmadınız. Çözüm: başına sudo ekleyin.
  • “Hata: /dev/sdX bulunamadi.” → Yazdığınız cihaz adı yanlış ya da disk sisteme takılı değil/tanınmamış. lsblk çıktısındaki isimlerden birebir kopyalayın (başında /dev/ olmadan, sadece sda1 gibi).
  • “Hata: Bicimlendirme basarisiz.” → Disk başka bir işlem tarafından hâlâ kullanılıyor olabilir (örneğin bir dosya yöneticisinde açık), ya da disk salt-okunur/bozuk olabilir. Diski çıkarıp tekrar takmayı, başka bir USB portu denemeyi ya da sudo umount /dev/sdX1 komutunu elle çalıştırmayı deneyin.
  • “UUID bulunamadi.” → Formatlama başarısız olmuş ya da disk bölümü (partition) düzgün oluşmamış olabilir. sudo blkid komutuyla diski manuel kontrol edin.
  • “Hata: Mount basarisiz.” → Script size otomatik olarak dmesg | tail -5 çıktısını gösterecek; bu çıktıda genelde gerçek sebep (örneğin dosya sistemi hatası, izin sorunu) yazar. Bu satırları okuyup arama motorunda aratmak genelde çözüme götürür.

Script’i Kullanmadan Önce Önerilen Ufak İyileştirmeler

Script’i olduğu gibi kullanabilirsiniz ama blog okuyucularınıza şu küçük dokunuşları da önerebilirsiniz:

  • gid= satırını kendi ihtiyacınıza göre gid=1000 (ya da id -g pi ile öğreneceğiniz grup ID’niz) olarak tamamlamak, izinlerle ilgili belirsizlikleri ortadan kaldırır.
  • Script’i çalıştırmadan önce mutlaka sudo cp /etc/fstab /etc/fstab.bak ile fstab dosyanızın bir yedeğini almanız, herhangi bir sorunda kolayca eski haline dönebilmenizi sağlar. Bozuk bir fstab satırı, açılışta ciddi sorunlara yol açabileceği için bu adım özellikle önemlidir.
  • Birden fazla disk yönetiyorsanız, script’i her disk için ayrı ayrı çalıştırmadan önce cat /etc/fstab ile mevcut kayıtları gözden geçirmek, tekrarlanan ya da çakışan satırların önüne geçer.

Güvenlik ve Sorumluluk Notu

Bu script root yetkisiyle çalışır, disk formatlar ve sistemin açılış davranışını belirleyen /etc/fstab dosyasını değiştirir. Bu üç işlem de dikkatli kullanılması gereken, hataya toleransı düşük işlemlerdir. Script’i çalıştırmadan önce:

  • Doğru diski seçtiğinizden emin olun.
  • Formatlamak istemiyorsanız hayir yanıtını vermekten çekinmeyin.
  • Kritik veri barındıran bir sistemde /etc/fstab‘ı elle değiştirmeden önce yedek almayı alışkanlık haline getirin.

Sonuç

otomatik_hdd_2.sh, Raspberry Pi’de harici disk yönetimini tek bir interaktif script’e indirgeyen, küçük ama işlevsel bir araç. lsblk ile disk keşfi, isteğe bağlı güvenli NTFS formatlama, UUID bazlı çakışmasız mount noktası belirleme ve en önemlisi /etc/fstab‘a kalıcı kayıt ekleme adımlarını tek bir akışta birleştiriyor. Doğru kullanıldığında, elle her reboot sonrası mount komutu yazma zahmetinden sizi kurtarıyor ve diskinizi Pi’nin ayrılmaz, her zaman hazır bir parçası haline getiriyor.

Yine de script mükemmel değil: gid= değerinin boş bırakılması ve tekrar çalıştırmalarda eski fstab kayıtlarının formatlama yapılmadığı sürece temizlenmemesi gibi küçük ama bilinmesi gereken sınırlamaları var. Bu yazıda anlatılan adımları takip ederek ve uyarılara dikkat ederek script’i güvenle kullanabilir, gerekirse yukarıdaki iyileştirmeleri kendi ihtiyacınıza göre ekleyebilirsiniz.

💬 Yorum Bırak