NFS ve Samba Bağlantı Sorunlarını Çözme Rehberi

Ağ üzerinden dosya paylaşımı, kurumsal ortamlarda günlük hayatın vazgeçilmez bir parçası. Ancak NFS mount’u bağlanmıyor, Samba’dan dosyaya erişilemiyor gibi sorunlar sysadmin’lerin en sık karşılaştığı headache’lerden biri. Bu yazıda hem NFS hem de Samba bağlantı sorunlarını sistematik bir şekilde nasıl çözeceğini, gerçek dünya senaryolarıyla anlatacağım.

NFS Sorunlarına Giriş

NFS (Network File System) basit görünse de bağlantı sorunları geldiğinde insanı çileden çıkarabilir. Özellikle “stale file handle”, “permission denied” ve mount’un takılı kalması gibi durumlar sabahları çok kötü başlamanıza neden olur.

Önce NFS servislerinin sağlıklı çalışıp çalışmadığını kontrol edelim:

# Sunucu tarafında NFS servis durumu
systemctl status nfs-server
systemctl status rpcbind

# Client tarafında mount edilmiş NFS paylaşımlarını listele
mount | grep nfs

# RPC servislerin kayıtlı olup olmadığını kontrol et
rpcinfo -p localhost

Eğer rpcinfo çıktısında nfs, mountd ve portmapper göremiyorsanız, servis tamamen ayakta değildir. Bu durumda önce rpcbind sonra nfs-server servisini başlatın.

NFS Export Konfigürasyonu Sorunları

En sık karşılaştığım sorunların başında yanlış /etc/exports konfigürasyonu geliyor. Özellikle IP aralıkları ve seçenekler arasındaki boşluklar can sıkıcı hatalara yol açıyor.

# /etc/exports dosyasını kontrol et
cat /etc/exports

# Örnek doğru syntax:
# /data/shared 192.168.1.0/24(rw,sync,no_subtree_check)
# /data/backup 192.168.1.100(ro,sync,root_squash)

# Değişiklikten sonra export'ları yenile
exportfs -ra

# Aktif export'ları listele
exportfs -v

Kritik nokta: /data/shared 192.168.1.0/24 (rw,sync) şeklinde IP ile parantez arasında boşluk bırakırsanız, NFS bunu iki ayrı kural olarak yorumlar ve ikincisini anonim erişim olarak değerlendirir. Bu hem güvenlik açığı yaratır hem de beklenmedik davranışlara neden olur.

Firewall ve Port Sorunları

NFS’in en sinsi düşmanı firewall kuralları. NFS sadece 2049 portunu değil, dinamik RPC portlarını da kullanır. Bu yüzden sadece 2049’u açmak yeterli olmaz.

# Firewalld ile NFS için gerekli servisleri aç (RHEL/CentOS)
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload

# Ubuntu/Debian için ufw
ufw allow from 192.168.1.0/24 to any port 2049
ufw allow from 192.168.1.0/24 to any port 111

# Portların açık olduğunu doğrula
ss -tlnp | grep -E '2049|111'
nmap -p 111,2049 192.168.1.10

NFS4 kullanıyorsanız işler biraz daha basitleşiyor çünkü sadece 2049 TCP portunu kullanıyor. Mümkünse NFSv4’e geçmenizi öneririm.

Client Tarafında Mount Sorunları

Client’ta mount işlemi başarısız oluyorsa veya “Connection refused” hatası alıyorsanız şu adımları izleyin:

# Sunucuya ulaşılabilirlik ve port kontrolü
telnet 192.168.1.10 2049
nc -zv 192.168.1.10 2049

# Sunucunun export'larını client'tan listele
showmount -e 192.168.1.10

# Manuel mount denemesi (verbose modda)
mount -v -t nfs 192.168.1.10:/data/shared /mnt/test

# NFSv4 ile özel mount
mount -t nfs4 192.168.1.10:/data/shared /mnt/test

# Mount timeout sorunları için seçenekler
mount -t nfs -o soft,timeo=30,retrans=3 192.168.1.10:/data/shared /mnt/test

soft seçeneği önemli: hard mount kullanırsanız sunucu erişilemez olduğunda process’ler sonsuza kadar bekler. Production ortamında soft ve makul bir timeo değeri kullanmak daha iyi bir deneyim sağlar, ancak veri tutarlılığı kritikse hard tercih edilebilir.

“Stale File Handle” Sorununun Çözümü

Bu hata genellikle sunucudaki bir dizin yeniden export edildiğinde veya sunucu restart edildiğinde ortaya çıkar. Client hala eski bir inode referansı tutar.

# Etkilenen mount noktasını bul
df -h | grep nfs

# Zorla unmount et
umount -f -l /mnt/nfs_share

# Mount noktasını temizle ve yeniden bağla
mount -t nfs 192.168.1.10:/data/shared /mnt/nfs_share

# Eğer unmount olmazsa (process kullanuyor)
fuser -km /mnt/nfs_share
umount /mnt/nfs_share

-l (lazy unmount) seçeneği dizini dosya sisteminden ayırır ama aktif referanslar kapanana kadar bekler. Acil durumlar için faydalı bir araç.

Samba Sorunlarına Giriş

Samba, Windows ve Linux arasındaki köprü olarak hayatımızda kritik bir yere sahip. Ancak Windows’tan Linux share’e bağlanırken “Access Denied”, “The network path was not found” gibi hatalar almak çok yaygın.

Samba Servis ve Konfigürasyon Kontrolü

# Samba servislerini kontrol et
systemctl status smbd
systemctl status nmbd
systemctl status winbind  # Domain ortamında

# smb.conf syntax kontrolü (bu çok önemli!)
testparm
testparm -s  # Sessiz mod, sadece geçerli konfigürasyonu göster

# Samba loglarını izle
tail -f /var/log/samba/log.smbd
tail -f /var/log/samba/log.nmbd

testparm komutu altın değerinde. Her konfigürasyon değişikliğinden sonra çalıştırın. Sözdizimi hatalarını anında gösterir ve varsayılan değerlerle birleştirilmiş konfigürasyonu çıktı olarak verir.

Kullanıcı ve Şifre Sorunları

Samba kendi kullanıcı veritabanını tutar. Linux kullanıcısı oluşturmak Samba erişimi için yetmez.

# Samba kullanıcısı ekle
smbpasswd -a kullanici_adi

# Kullanıcıyı etkinleştir
smbpasswd -e kullanici_adi

# Mevcut Samba kullanıcılarını listele
pdbedit -L
pdbedit -Lv  # Detaylı bilgi

# Kullanıcı şifresini değiştir
smbpasswd kullanici_adi

# Kullanıcıyı devre dışı bırak
smbpasswd -d kullanici_adi

Sık yapılan hata: Linux şifresi ve Samba şifresi farklı. Birini değiştirdiğinizde diğeri değişmez. PAM entegrasyonu yapılmadıysa her ikisini ayrı ayrı güncellemeniz gerekir.

Samba Share İzin Sorunları

“Access Denied” hatalarının büyük çoğunluğu iki katmanlı bir izin sorununda gizlidir: Samba’nın kendi izinleri ve Linux dosya sistemi izinleri. İkisi birlikte doğru olmalı.

# Share dizin izinlerini kontrol et
ls -la /srv/samba/shared

# Doğru izinleri ayarla
chown -R root:sambashare /srv/samba/shared
chmod 2770 /srv/samba/shared

# Kullanıcıyı samba grubuna ekle
usermod -aG sambashare kullanici_adi

# SELinux bağlamını kontrol et (RHEL/CentOS)
ls -Z /srv/samba/shared
# SELinux bağlamını düzelt
setsebool -P samba_enable_home_dirs on
semanage fcontext -a -t samba_share_t "/srv/samba/shared(/.*)?"
restorecon -Rv /srv/samba/shared

SELinux’un Samba bağlantılarını engellediğini anlamanın en hızlı yolu ausearch -m avc -ts recent | grep samba komutunu çalıştırmaktır. Eğer SELinux denial mesajları görüyorsanız, sorunun kaynağı budur.

Samba Bağlantı Testi

# Linux client'tan Samba test bağlantısı
smbclient -L //192.168.1.20 -U kullanici_adi

# Belirli bir share'e bağlan
smbclient //192.168.1.20/shared -U kullanici_adi

# Bağlantıyı detaylı logla
smbclient //192.168.1.20/shared -U kullanici_adi -d 3

# Linux'ta CIFS mount
mount -t cifs //192.168.1.20/shared /mnt/samba 
  -o username=kullanici_adi,password=sifre,domain=WORKGROUP

# Credentials dosyası kullanarak (daha güvenli)
mount -t cifs //192.168.1.20/shared /mnt/samba 
  -o credentials=/etc/samba/.credentials,vers=3.0

Credentials dosyasının içeriği şöyle olmalı:

# /etc/samba/.credentials dosyası
username=kullanici_adi
password=gizli_sifre
domain=WORKGROUP

# Dosyayı sadece root okuyabilsin
chmod 600 /etc/samba/.credentials

Gerçek Dünya Senaryoları

Senaryo 1: NFS Mount Sonrası Performans Sorunu

Bir müşteride NFS mount bağlanıyor ama dosya kopyalama inanılmaz yavaş. İlk şüpheli her zaman ağ değil, mount seçenekleri.

# Mevcut mount seçeneklerini kontrol et
cat /proc/mounts | grep nfs

# Performans odaklı mount seçenekleri
mount -t nfs -o rw,async,noatime,nodiratime,rsize=131072,wsize=131072 
  192.168.1.10:/data/shared /mnt/nfs_share

# NFS istatistiklerini izle
nfsstat -c  # Client istatistikleri
nfsstat -s  # Sunucu istatistikleri

# Mount'tan sonra basit okuma/yazma testi
dd if=/dev/zero of=/mnt/nfs_share/test.bin bs=1M count=100 oflag=direct

rsize ve wsize değerlerini 131072 (128KB) yaparak okuma/yazma performansını ciddi ölçüde artırabilirsiniz. Varsayılan değer çoğu dağıtımda çok düşük kalır.

Senaryo 2: Windows 10 Samba’ya Bağlanamıyor

Bu senaryo son yıllarda çok sık karşılaştığım bir durum. Windows 10’un güvenlik güncellemeleriyle birlikte SMBv1 varsayılan olarak devre dışı bırakıldı. Eski Samba sunucularıyla uyumsuzluk yaşanıyor.

Sunucu tarafında /etc/samba/smb.conf dosyasına şunları ekleyin:

# smb.conf [global] bölümüne ekle
[global]
   workgroup = WORKGROUP
   server string = Samba Server
   min protocol = SMB2
   max protocol = SMB3
   ntlm auth = yes
   lanman auth = no
   
# Değişikliği uygula
systemctl restart smbd

# Windows'tan bağlantı testini logla
smbclient //192.168.1.20/shared -U kullanici_adi --debuglevel=5 2>&1 | head -50

Eğer Windows tarafında sorun devam ederse, Windows’ta şu registry ayarını kontrol edin: HKLMSYSTEMCurrentControlSetServicesLanmanWorkstationParameters altında AllowInsecureGuestAuth değerini kontrol edin. Ancak bunu production ortamında güvenlik riski oluşturacağından dikkatli kullanın.

Senaryo 3: NFS Bağlantısı Aralıklı Kesiliyor

Bu tür sorunlar en zor hata ayıklama vakalarından. Ağ kalitesini ve NFS parametrelerini birlikte incelemek gerekiyor.

# Ağ paket kaybını test et
ping -c 100 192.168.1.10 | tail -5

# NFS bağlantısını sürekli izle (monitoring scripti)
while true; do
  if ! stat /mnt/nfs_share > /dev/null 2>&1; then
    echo "$(date): NFS bağlantısı koptu!" >> /var/log/nfs_monitor.log
    umount -l /mnt/nfs_share
    mount -t nfs 192.168.1.10:/data/shared /mnt/nfs_share
    echo "$(date): Yeniden mount denendi" >> /var/log/nfs_monitor.log
  fi
  sleep 30
done

# tcpdump ile NFS trafiğini yakala
tcpdump -i eth0 -w /tmp/nfs_capture.pcap port 2049

Aralıklı kesinti sorunlarında genellikle ağ switch’indeki STP (Spanning Tree Protocol) yeniden hesaplaması veya NIC’in güç tasarruf moduna geçmesi suçlu oluyor.

Kapsamlı Hata Ayıklama Yaklaşımı

Hem NFS hem de Samba için sistematik bir sorun giderme yaklaşımı benimseyin. “Shotgun” yöntemiyle rastgele şeyler denemek zaman kaybettirir.

Katmanlı kontrol yaklaşımı:

  • Ağ katmanı: ping, traceroute, port kontrolü
  • Servis katmanı: systemctl status, rpcinfo, testparm
  • Konfigürasyon katmanı: exports, smb.conf, izinler
  • Güvenlik katmanı: firewall, SELinux/AppArmor, kullanıcı izinleri
  • Log katmanı: sistem logları, servis logları
# Hızlı NFS sağlık kontrolü scripti
#!/bin/bash
echo "=== NFS Sunucu Durumu ==="
systemctl is-active nfs-server && echo "OK" || echo "HATA: nfs-server çalışmıyor"
systemctl is-active rpcbind && echo "OK" || echo "HATA: rpcbind çalışmıyor"

echo "=== Export Listesi ==="
exportfs -v

echo "=== RPC Servisleri ==="
rpcinfo -p localhost | grep -E 'nfs|mount'

echo "=== Firewall NFS Kuralları ==="
firewall-cmd --list-services | grep nfs

echo "=== Son NFS Hataları ==="
journalctl -u nfs-server --since "1 hour ago" | grep -i error | tail -10

Bu scripti cron’a ekleyip düzenli aralıklarla çalıştırabilir veya sorun geldiğinde hızlı kontrol için kullanabilirsiniz.

Log Analizi

Loglar olmadan kör uçuş yaparsınız. NFS ve Samba sorunlarında logların doğru yerde ve doğru seviyede olması şart.

# NFS logları
journalctl -u nfs-server -f
journalctl -u rpcbind -f

# Samba log seviyesini geçici artır
smbcontrol smbd debug 5
tail -f /var/log/samba/log.smbd

# Samba log seviyesini normale döndür
smbcontrol smbd debug 1

# Sistem genelinde dosya paylaşım hatalarını ara
grep -i "nfs|samba|cifs|smb" /var/log/syslog | tail -20
dmesg | grep -i "nfs|cifs" | tail -20

Samba’da log seviyesini 3-5 arasına çekmek detaylı bilgi verir ama disk I/O artacağından bunu geçici kullanın. Normal operasyonda 1 veya 2 yeterli.

Otomatik Mount ile Yaşanan Sorunlar

/etc/fstab veya autofs ile otomatik mount yapıyorsanız, boot sırasında servis bağımlılıkları sorun çıkarabilir.

# /etc/fstab NFS kaydı (doğru seçeneklerle)
# 192.168.1.10:/data/shared /mnt/nfs_share nfs defaults,_netdev,auto,x-systemd.automount 0 0

# fstab değişikliğini test et (reboot etmeden)
mount -a

# Systemd automount birimi oluştur
systemctl daemon-reload
systemctl list-units --type=automount

# autofs kurulumu ve konfigürasyonu
apt install autofs  # Debian/Ubuntu
yum install autofs  # RHEL/CentOS

# /etc/auto.master dosyasına ekle
echo "/mnt/auto /etc/auto.nfs" >> /etc/auto.master

# /etc/auto.nfs dosyası
echo "shared -fstype=nfs,rw,soft 192.168.1.10:/data/shared" > /etc/auto.nfs

systemctl restart autofs

_netdev seçeneği kritik. Bu seçenek olmadan sistem, ağ hazır olmadan NFS mount etmeye çalışır ve boot takılı kalır. Başınıza bir kez geldi mi, bir daha unutmazsınız.

Sonuç

NFS ve Samba sorunları ilk bakışta karmaşık görünse de sistematik bir yaklaşımla büyük çoğunluğu çözülebilir. Şu ana noktaları aklınızda tutun:

  • Her şeyden önce ağ bağlantısını doğrulayın, karmaşık çözümlere geçmeden önce basit şeyleri kontrol edin
  • NFS için showmount -e ve rpcinfo, Samba için testparm ve smbclient vazgeçilmez araçlarınız
  • Firewall ve SELinux/AppArmor çoğu zaman sessiz sedasız her şeyi engeller, bunları kontrol etmeyi alışkanlık haline getirin
  • Log seviyesini geçici olarak artırmak sorunun kaynağını bulmayı çok kolaylaştırır
  • /etc/fstab ile otomatik mount yapıyorsanız _netdev seçeneğini asla atlamayın
  • Samba kullanıcılarını pdbedit -L ile düzenli kontrol edin, şifre uyumsuzlukları sinsi sorunlara yol açar

Bu sorunların çoğu çözüldükten sonra ortaya çıkan rahatlama duygusunu tarif etmek zor. Bir dahaki sefere NFS mount takıldığında veya Windows makineler Samba’ya bağlanamadığında bu yazıyı başucu rehberiniz olarak kullanabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir