
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:
- Sistemde takılı olan diskleri listeler (
lsblkile). - Kullanıcıdan hangi diski (örneğin
sda1) bağlamak istediğini sorar. - İsteğe bağlı olarak diski NTFS dosya sistemi ile sıfırdan formatlar (bu adım opsiyoneldir ve onay ister).
- Diskin UUID‘sini (Universally Unique Identifier) alır.
/mnt/hdd,/mnt/hdd1,/mnt/hdd2gibi çakışmayan bir mount noktası belirler./etc/fstabdosyasına bu UUID için kalıcı bir bağlama (mount) satırı ekler.- 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-3gsü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-getkullanan (Debian/Ubuntu tabanlı) herhangi bir Linux sisteminde de çalışır. Ancakapt-getkomutu 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-3gkomutunu çalıştırdığı içinntfs-3gpaketi sistemde yoksa internetten indirilmesi gerekir). rootyetkisi (scriptsudoile ç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
umountile, 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/fstabiçinde bu UUID’yi içeren bir satır varsased -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,-Lile 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.pikullanı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)
- 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ğrudannano otomatik_hdd_2.shile içeriği yapıştırıp kaydedebilirsiniz. - Çalıştırma izni verin:
chmod +x otomatik_hdd_2.sh
- Harici diskinizi Raspberry Pi’nin bir USB portuna takın. Birkaç saniye bekleyin ki sistem diski tanısın.
- Script’i root yetkisiyle çalıştırın:
sudo ./otomatik_hdd_2.sh
- Script size takılı diskleri listeleyecek. Çıktıda diskinizi bulun (genelde boyutuna bakarak ayırt edebilirsiniz, örn. 1TB’lık bir disk
sdaya dasda1olarak görünebilir). - İstenince disk adını (örneğin
sda1) yazıp Enter’a basın. - Eğer disk zaten NTFS formatlıysa ve verisine dokunmak istemiyorsanız, formatlama sorusuna
hayiryazın. Eğer diski sıfırdan hazırlamak/formatlamak istiyorsanız,evetyazın ve ardından bir etiket adı girin (örn.YEDEK,MEDYA,BACKUP).
Uyarı:
evetdediğiniz an disk üzerindeki tüm veriler kalıcı olarak silinir. Emin değilsenizhayirdeyip script’i iptal edin (Ctrl+C) ve önce verinizi yedekleyin.
- Script otomatik olarak bir mount noktası belirleyip (
/mnt/hdd,/mnt/hdd1, …) diski oraya bağlayacak ve/etc/fstab‘a kalıcı kayıt ekleyecektir. - İş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. - 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 dabash 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.nofailolmadan, 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.nofailsayesinde 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,pikullanı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üzdenntfs-3gmount sırasında tüm dosyaları belirtilenuid‘e ait gibi gösterir.1000, Raspberry Pi OS’ta varsayılan ilk kullanıcının (piya da kurulumda belirlediğiniz kullanıcı adı) UID’sidir, böylece o kullanıcı diske yazma/okuma yapabilir.auto: Diskinmount -akomutuyla 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:
gid=değeri boş bırakılmış. fstab satırının sonundagid=yazıyor ama bir grup numarası verilmemiş. Pratikte bu genelde sorun çıkarmaz çünkü çoğuntfs-3gsürümügidbelirtilmezse mount işlemini yineuid=1000ile 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ış, istersenizgid=1000olarak elle düzenleyebilirsiniz” diye belirtebilirsiniz ya da script’i kullanmadan önce bu satırı kendinizgid=1000şeklinde tamamlayabilirsiniz.- 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/fstabdosyasınıcat /etc/fstabile kontrol etmeniz önerilir. - Mount noktası kontrolü, klasörün var olup olmadığına bakıyor, gerçekten kullanımda olup olmadığına değil.
/mnt/hddklasö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. apt-getinternet bağlantısı gerektirir. İnternetsiz bir ortamda ventfs-3gdaha önce kurulmamışsa bu adım sessizce başarısız olur ama script yine de devam etmeye çalışır;mkfs.ntfsya da mount komutu bulunamama hatası verebilir.- Debian/Ubuntu (apt tabanlı) sistemlere özeldir. Fedora, Arch, openSUSE gibi dağıtımlarda
apt-getkomutu 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. - Formatlama işlemi geri döndürülemez. Bu bir “hata” değil ama script’in en riskli kısmı budur.
evetonayı 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çinlsblkçı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,sudoile başlatmadınız. Çözüm: başınasudoekleyin. - “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, sadecesda1gibi). - “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/sdX1komutunu 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 blkidkomutuyla 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öregid=1000(ya daid -g piile öğ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.bakile 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/fstabile 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
hayiryanı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.