/etc/fstab ile Otomatik Disk Bağlama

Sunucuya yeni bir disk taktınızda ya da bir NFS paylaşımını mount etmeniz gerektiğinde, sistemi her yeniden başlattığınızda aynı mount komutlarını elle çalıştırmak kimsenin işi değil. İşte tam bu noktada /etc/fstab devreye giriyor. Linux sistemlerin olmazsa olmaz yapılandırma dosyalarından biri olan fstab, sisteminizin hangi dosya sistemlerini nereye, nasıl bağlayacağını tanımlar. Bu yazıda fstab’ı A’dan Z’ye ele alacağız; temel sözdiziminden gelişmiş senaryolara, sık yapılan hatalardan kurtarma yöntemlerine kadar her şeyi konuşacağız.

/etc/fstab Nedir ve Neden Önemlidir?

/etc/fstab (filesystem table) dosyası, sistem açılışında otomatik olarak mount edilecek dosya sistemlerinin listesini tutar. systemd veya geleneksel init sistemleri bu dosyayı okuyarak diskleri, bölümleri, ağ paylaşımlarını ve sanal dosya sistemlerini ilgili dizinlere bağlar.

Neden bu kadar önemli? Çünkü bir disk yanlış yapılandırılmış ya da hiç yapılandırılmamışsa sistem açılmayabilir, veri kayıpları yaşanabilir veya uygulamalar düzgün çalışmaz. Özellikle production ortamlarında fstab’ı doğru yönetmek, gece 3’te acil müdahale yapmanız ile rahat uyumanız arasındaki fark demektir.

Dosya Yapısı ve Sözdizimi

Bir fstab satırı altı alandan oluşur ve her alan boşluk ya da tab ile ayrılır:

<dosya_sistemi>  <mount_noktası>  <tür>  <seçenekler>  <dump>  <pass>

Gerçek bir örnekle gösterelim:

# /etc/fstab örneği
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /data  ext4  defaults  0  2
/dev/sdb1                                  /backup  xfs  defaults,noatime  0  2
tmpfs                                      /tmp  tmpfs  defaults,size=2G  0  0

Alan Açıklamaları

Alan 1 – Dosya Sistemi (device): Hangi aygıtın mount edileceğini belirtir. Burada birkaç farklı yöntem kullanılabilir:

  • /dev/sdXN: Geleneksel aygıt adı. Ancak tehlikelidir çünkü disk sırası değişebilir.
  • UUID=…: Evrensel benzersiz tanımlayıcı. Disk sırası değişse bile doğru diski bulur. Önerilen yöntem budur.
  • LABEL=…: Disk etiketi. UUID kadar güvenli olmasa da okunabilirliği artırır.
  • PARTUUID=…: GPT bölüm UUID’si. Özellikle EFI sistemlerde kullanılır.

Alan 2 – Mount Noktası: Dosya sisteminin bağlanacağı dizin. Swap için none kullanılır.

Alan 3 – Dosya Sistemi Türü: ext4, xfs, btrfs, ntfs, vfat, nfs, tmpfs, swap gibi değerler alır. auto yazarsanız sistem otomatik algılar ancak production’da bunu yapmayın.

Alan 4 – Mount Seçenekleri: Virgülle ayrılmış seçenekler listesi. En sık kullanılanlar:

  • defaults: rw, suid, dev, exec, auto, nouser, async seçeneklerinin hepsini bir arada etkinleştirir
  • noatime: Her okuma işleminde erişim zamanını güncellemez, I/O performansını artırır
  • nodiratime: Dizin erişim zamanlarını güncellemez
  • ro: Salt okunur mount
  • rw: Okuma/yazma mount
  • noexec: Bu dosya sisteminden çalıştırılabilir dosyaların çalıştırılmasını engeller
  • nosuid: SUID/SGID biti olan dosyaların bu özelliğini devre dışı bırakır
  • nodev: Aygıt dosyalarının yorumlanmasını engeller
  • user: Normal kullanıcıların bu dosya sistemini mount etmesine izin verir
  • nofail: Mount başarısız olsa bile sistem açılmaya devam eder
  • _netdev: Ağ bağlantısı gerektiren dosya sistemleri için, ağ hazır olana kadar bekler
  • discard: SSD’ler için TRIM desteği sağlar
  • errors=remount-ro: Hata durumunda salt okunur olarak yeniden mount eder

Alan 5 – Dump: dump yedekleme aracının bu dosya sistemini yedekleyip yedeklemeyeceğini belirtir. Günümüzde artık 0 yazın ve geçin. Dump pek kimse kullanmıyor.

Alan 6 – Pass (fsck sırası): Sistem açılışında fsck‘ın hangi sırayla disk kontrolü yapacağını belirler:

  • 0: Kontrol yapma
  • 1: İlk kontrol et (sadece kök bölüm için kullanın)
  • 2: Kök bölümden sonra kontrol et

UUID Bulma Yöntemleri

UUID olmadan fstab yazmamalısınız. UUID bulmak için birkaç komut var:

# En sık kullandığım yöntem - tüm blok aygıtları listeler
blkid

# Belirli bir aygıt için
blkid /dev/sdb1

# lsblk ile daha okunaklı çıktı
lsblk -f

# ls ile sembolik linkleri görmek için
ls -la /dev/disk/by-uuid/

Tipik blkid çıktısı şöyle görünür:

/dev/sdb1: UUID="d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90" TYPE="ext4" PARTUUID="12345678-01"
/dev/sdc1: UUID="9a8b7c6d-5e4f-3210-fedc-ba9876543210" TYPE="xfs"

Temel Yapılandırma Örnekleri

Ek Veri Diski Ekleme

Sunucuya yeni bir SSD taktınız ve /data dizinine mount etmek istiyorsunuz. Önce diski formatlayın, sonra fstab’a ekleyin:

# Önce diski formatla (dikkatli ol, bu komut veri siler!)
mkfs.ext4 /dev/sdb1

# UUID'yi al
blkid /dev/sdb1
# Çıktı: /dev/sdb1: UUID="abc123..." TYPE="ext4"

# Mount noktasını oluştur
mkdir -p /data

# fstab'a ekle (UUID'yi kendi UUID'nle değiştir)
echo 'UUID=abc123...  /data  ext4  defaults,noatime  0  2' >> /etc/fstab

# Test et - sistemin okuyup okumadığını kontrol et
mount -a

# Mount edildi mi kontrol et
df -h /data

Swap Bölümü

# /etc/fstab'da swap örneği
UUID=swap-uuid-buraya  none  swap  sw  0  0

# Swap'ı etkinleştir
swapon -a

# Kontrol et
swapon --show

XFS Dosya Sistemi ile Büyük Depolama

Büyük dosyalar ve yüksek I/O gerektiren ortamlarda XFS tercih edilir:

# fstab'a XFS volume ekle
UUID=xfs-uuid-buraya  /storage  xfs  defaults,noatime,nofail  0  2

Gelişmiş Senaryolar

NFS Paylaşımı Mount Etme

Kurumsal ortamlarda NFS paylaşımlarını otomatik bağlamak çok yaygın. _netdev seçeneği kritik: ağ hazır olmadan mount etmeye çalışırsa sistem açılışta takılır.

# NFS v4 paylaşımı
192.168.1.10:/exports/data  /mnt/nfs_data  nfs4  defaults,_netdev,hard,intr,timeo=30  0  0

# NFS mount sonrası test
mount -a
showmount -e 192.168.1.10

CIFS/SMB Windows Paylaşımı

Windows sunucusundaki bir paylaşımı Linux’a otomatik bağlamak istiyorsanız:

# Önce credentials dosyası oluştur (şifreyi fstab'a yazma!)
cat > /etc/samba/credentials_fileserver << 'EOF'
username=kullanici_adi
password=gizli_sifre
domain=WORKGROUP
EOF

chmod 600 /etc/samba/credentials_fileserver

# fstab'a ekle
//192.168.1.20/paylasim  /mnt/windows_share  cifs  credentials=/etc/samba/credentials_fileserver,iocharset=utf8,_netdev,nofail  0  0

Şifreyi doğrudan fstab’a yazmak büyük güvenlik açığıdır. Her zaman credentials dosyası kullanın ve dosyayı chmod 600 ile koruyun.

tmpfs ile RAM Diski

Geçici dosyalar için RAM kullanmak istiyorsanız tmpfs kullanın. Özellikle derleme ortamları için çok işe yarar:

# /tmp için RAM disk (2GB ile sınırla)
tmpfs  /tmp  tmpfs  defaults,size=2G,mode=1777,noexec,nosuid  0  0

# Derleme için özel RAM disk
tmpfs  /home/deploy/build  tmpfs  defaults,size=4G,uid=1001,gid=1001  0  0

Bind Mount Kullanımı

Bir dizini başka bir yere bağlamak için bind mount kullanılır. Docker ve container ortamlarında sık görürsünüz:

# /home/user/data dizinini /var/app/data olarak da bağla
/home/user/data  /var/app/data  none  bind  0  0

# Sadece okunur bind mount
/opt/readonly_source  /srv/web/static  none  bind,ro  0  0

LVM Volume Mount Etme

LVM kullanıyorsanız UUID yerine device mapper yolunu da kullanabilirsiniz, ancak UUID her zaman daha güvenlidir:

# LVM volume için fstab
UUID=lvm-vol-uuid-buraya  /var/lib/postgresql  ext4  defaults,noatime,errors=remount-ro  0  2

# Ya da device mapper yoluyla (önerilmez ama çalışır)
/dev/mapper/vg_data-lv_postgres  /var/lib/postgresql  ext4  defaults,noatime  0  2

Güvenlik Odaklı Mount Seçenekleri

Güvenliği ön planda tuttuğunuz sistemlerde, her bölümün sadece ihtiyacı olan izinlere sahip olması gerekir. Bu “least privilege” prensibinin dosya sistemi düzeyindeki yansımasıdır.

# /tmp için güvenli yapılandırma
tmpfs  /tmp  tmpfs  defaults,size=1G,nosuid,nodev,noexec  0  0

# /var/tmp için
/dev/sdb2  /var/tmp  ext4  defaults,nosuid,nodev,noexec  0  2

# /home için - kullanıcı alanı
UUID=home-uuid  /home  ext4  defaults,nosuid,nodev  0  2

# Web sunucusu yükleme dizini - özellikle güvenli
UUID=uploads-uuid  /var/www/uploads  ext4  defaults,nosuid,nodev,noexec  0  2

Web sunucusu yükleme dizinine noexec koymak çok önemli. Bir saldırgan zararlı bir PHP dosyası yükleyip çalıştırmak istediğinde bu seçenek hayat kurtarır.

fstab Doğrulama ve Test

Fstab düzenlendikten sonra sistemi yeniden başlatmadan önce mutlaka test edin. Hatalı bir fstab sistemi açılmaz hale getirebilir.

# Sözdizimini kontrol et (mount -a'dan önce bunu çalıştır)
findmnt --verify --fstab

# Tüm fstab girişlerini mount et (zaten mount edilenler atlanır)
mount -a

# Belirli bir mount noktasını test et
mount /data

# Mount edilenleri listele
mount | grep /data

# Ya da daha okunaklı
findmnt /data

# Tüm mount noktalarını göster
findmnt --all

mount -a komutunu çalıştırdıktan sonra hata vermiyorsa iyi işaret. Ama yine de df -h ile gerçekten mount edildiğini doğrulayın.

Sık Yapılan Hatalar ve Çözümleri

Hata 1: UUID yazmak yerine /dev/sdX kullanmak

Sunucuya yeni disk eklendiğinde veya BIOS’ta disk sırası değiştiğinde /dev/sdb olan disk /dev/sdc olabilir. Yıllar önce bir üretim sunucusunda bu yüzden veri dizini yerine yanlış disk mount edilmişti. Her zaman UUID kullanın.

Hata 2: nofail Seçeneğini Kullanmamak

Harici diskler, USB sürücüler veya ağ paylaşımları için nofail kullanmazsanız ve bu aygıt hazır değilse sistem açılışta kalabilir. Emergency mode’a düşer ve paniklemeye başlarsınız.

# Harici veya opsiyonel diskler için mutlaka nofail ekle
UUID=external-uuid  /mnt/backup  ext4  defaults,nofail  0  2

Hata 3: Mount Noktası Dizinini Oluşturmamak

fstab’a bir dizin yazdınız ama o dizin yok. Mount başarısız olur.

# Mount noktalarını önceden oluştur
mkdir -p /data /backup /mnt/nfs_share

Hata 4: Tab/Boşluk Karışıklığı

fstab alanlarını ayırmak için tab veya boşluk kullanabilirsiniz, ikisini karıştırmak bazen sorun çıkarabilir. Ben genellikle tab kullanırım, okunması daha kolay.

Hata 5: Dosya İzinleri Sorunu

fstab düzenlemesi sonrası dosya izinleri değişmişse sistem açılmayabilir:

# fstab izinleri 644 olmalı
chmod 644 /etc/fstab
ls -la /etc/fstab

Sistem Açılmıyorsa Kurtarma

En kötü senaryo: hatalı fstab yüzünden sistem açılmıyor. Sakin olun, çözüm var.

Yöntem 1: Kernel parametresiyle tek kullanıcı modu

GRUB menüsünde e tuşuna basın, linux satırı sonuna systemd.unit=rescue.target ya da single ekleyin.

Yöntem 2: Emergency modda fstab düzenleme

Sistem emergency mode’a düşerse:

# Kök dosya sistemini okuma-yazma olarak yeniden mount et
mount -o remount,rw /

# Hatalı satırı yorum satırına çevir ya da sil
nano /etc/fstab

# Düzeltme sonrası
mount -a

Yöntem 3: Live USB ile kurtarma

Live USB’den boot edin:

# Kök bölümü mount et
mount /dev/sda1 /mnt

# fstab'ı düzenle
nano /mnt/etc/fstab

# Sistemi yeniden başlat

Bu yüzden her zaman sistemde bir canlı ortam (Live USB veya rescue partition) bulundurmanızı tavsiye ederim. Production sunucularda IPMI/iDRAC erişimi varsa sanal konsol üzerinden de müdahale edebilirsiniz.

Systemd ile fstab Entegrasyonu

Modern Linux sistemlerinde systemd, fstab satırlarını otomatik olarak systemd mount unit’lerine dönüştürür. Bu sayede mount işlemlerini systemctl ile de yönetebilirsiniz:

# Systemd'nin fstab'ı nasıl yorumladığını göster
systemd-analyze verify

# Otomatik oluşturulan mount unit'lerini listele
systemctl list-units --type=mount

# Belirli bir mount point'in durumu
systemctl status data.mount

# Mount işlemini systemctl ile tetikle
systemctl start data.mount

# Açılışta otomatik mount için
systemctl enable data.mount

fstab satırındaki mount noktası /data/volume ise systemd bunu data-volume.mount unit olarak oluşturur. Slash karakterleri tire ile değiştirilir.

Pratik İpuçları

Yıllar içinde edindiğim birkaç pratik öneri:

Her değişiklikten önce yedek alın:

cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S)

Değişiklik yaparken ne yaptığınızı yorum satırlarıyla belgelleyin. Altı ay sonra bakan kişi siz olabilirsiniz:

# 2024-01-15 - Veritabani sunucusu icin NVMe disk eklendi
UUID=nvme-uuid-buraya  /var/lib/mysql  xfs  defaults,noatime,discard  0  2

# 2024-02-10 - NFS backup storage - fileserver01 yedek sunucu
192.168.1.10:/backup  /mnt/backup  nfs4  defaults,_netdev,ro,soft  0  0

SSD kullanıyorsanız discard ve noatime seçeneklerini eklemeyi unutmayın. SSD ömrünü uzatır ve performansı artırır.

Büyük production ortamlarında fstab değişikliklerini configuration management araçlarıyla (Ansible, Puppet, Chef) yönetin. Elle müdahale ne kadar az olursa o kadar iyi.

# Ansible ile fstab yönetimi için bir görev örneği
# ansible.builtin.mount modülü kullanılır
# Bu komut değil, referans amaçlı gösterilmiştir:
# - name: Veri diski mount et
#   ansible.builtin.mount:
#     path: /data
#     src: UUID=abc123...
#     fstype: ext4
#     opts: defaults,noatime
#     state: mounted

Sonuç

/etc/fstab basit görünen ama yanlış yapılandırıldığında ciddi sonuçlar doğurabilen kritik bir sistem dosyasıdır. Temel kuralları özetleyecek olursam: her zaman UUID kullanın, harici veya opsiyonel kaynaklar için nofail ekleyin, değişiklik sonrası mount -a ile test edin ve değişiklik öncesi yedek alın. Güvenlik gereksinimlerinize göre noexec, nosuid ve nodev seçeneklerini kullanmayı ihmal etmeyin.

fstab’ı doğru yönetmek aslında iyi bir sysadmin’in temel becerilerinden biridir. Disk ekleme, NFS bağlama ya da güvenlik sertleştirme gibi görevlerin hepsinin yolu bir şekilde bu dosyadan geçer. Pratiğe devam edin, test ortamında deneyin ve production’a geçmeden önce her zaman doğrulayın.

Yorum yapın