NFS (Network File System) Nedir?

Kadriye Aksakal
4 min readNov 19, 2020

NFS(Network File System), ağ dosya sistemi anlamına gelmektedir. Sun Microsystems tarafından 1984 yılında geliştirilmiştir. UNIX/Linux işletim sistemlerin depolama aygıtlarını paylaşmaya yarayan çok kararlı ve güçlü bir dosya sistemidir. NFS sayesinde; aynı dosyalara birden fazla bilgisayardan erişilebilir. Bu sayede bir kullanıcının sadece özel bir bilgisayardan ağa oturum açması gerekmez. NFS yoluyla herhangi bir makinadan kendi dizinine(home directory) erişebilir.

NFS çok yeterli bir protokol olmayıp, modem bağlantısı üzerinde çok yavaştır da. Yerel ağlar(local network) için tasarlanan NFS hayli esnektir ve hem kullanıcılar hemde sistem sorumluları (adminisrator) için birçok olasılık sunmaktadır.

Bu sistem dikkatli bir kullanım gerektirir. Herkesin ağ üzerinde veri girişine izin vermek doğru bir yönetim planı olmayabilir. Birkaç gerekli önlem riski azaltacaktır.

NFS Protokolü

NFS birbirinden farklı 4 protokolün birleşmesinden meydana gelmiştir. Bu protokolde RPC (Remote Procedure Calls) ve portmap (rpc.portmap) portmapper, RPC program numaralarını port numaralarına çevirir. RPC sunucusu çalışmaya başladığında portmap’e hangi kapının kullanılacağını ve yönetilen RPC program numarasını söyler. Bir kullanıcı bir program numarasına bir RPC isteği göndermek istediğinde; istenen program erişim veren port numarasını almak için öncelikle sunucu portmap’iyle bağlantı kurulur. Ardından RPC paketleri ilgili portlara gönderilir.

NFS’nin çalışmasını sağlayan 4 yardımcı şunlardır:

KURULUM

Sunucu

Öncelikle yapılması gereken, NFS protokolünü çalıştırmaktır. NFS başlatılmadan önce konfigürasyon ayarları yapılmalıdır. Sadece bir konfigürasyon dosyası vardır ve /etc/exports olarak anılır. Her satır ihraç yerini ve erişime sahip istemcilerin listesini işaret etmektedir. Her istemci adının sonuna parametre eklemek mümkündür. ‘man exports’ sayfası istemci adları ve parametreler için söz dizimini açıklamaktadır.

Kurulum seçeneklerinin en önemlileri şunlardır:

  • rw (read write) : istemci ihraç edilen dosyayı okuyabilir ve ona yazabilir.
  • ro (read only) : istemci ihraç edilen dosyayı sadece okuyabilir.
  • Root_squash : Bir kullanıcının ‘root’ olarak ‘root’ izniyle yazmaması tercih edilir. Bunu önlemek için UID/GID i (örn: ‘root’ olan) ‘nobody’ kullanıcısına çevrilir. Bu seçenek başlangıçta etkindir fakat no_root_squash kullanılarak önüne geçilebilir.
  • all_squash : ihraç edilen sisteme erişen tüm kullanıcılar ‘nobody’ kullanıcısına ait UID/GID i kullanırlar.
  • anonuid, anongid : ‘nobody’ kullanıcısı bu seçeneklerle tanımlanan UID ve GID yi kullanır.

NFS sunucusunda başlamak için şimdi rpc-mountd ve rpc.nfc aracılarına başlamalıyız. Rpcinfo komutuyla her şeyin çalıştığını kontrol ederiz. Hatta, sunucuyu nsm ve nlm protokolleri(rpc.statd ve rpc.lockd) ile başlatabiliriz. Bunlar bir NFS sunucusunu çalıştırmak için gerekli değildir fakat bir makinanın bozulması, reboot etmesi vb. durumlara karşı şiddetle tavsiye edilir.

Sistem açılışından sonra önemli bilgileri içeren dosyalar şunlardır:

  • /var/lib/nfs/rmtab : Her satır istemcinin adını ve bu sunucudan alınan dosyaları gösterir.
  • /var/lib/nfs/etab : /etc/exports dosyası sadece isteklerin listesini içerir. etab, exports tarafından yaratılır. Her satırında sadece bir kullanıcıya doğru, bir dosya dizgesi ihraç edilirken kullanılan seçenekler hakkında ayrıntılı bilgi vardır. Çalıştırıldığında rpc.mountd tarafından kullanılan başvuru(referans) dosyasıdır.
  • /proc/fs/nfs/exports : istemcilerin listesini çekirdekçe bildiği şekilde tutar.
  • /var/lib/nfs/xtab : istemci adlarını ve makina adlarını wilcardlarla tuttuğu zaman kesinlik açısından kullanılır. Bu dosya sadece açık makina adlarını tutar.

İstemci

NFS tarafından yüklenen bir dosya dizgesine erişim doğruca kernel tarafından yönetilmektedir. NFS destekli derlenmek zorundadır. /proc/filesystems dosyası kernel tarafından doğruca desteklenen tüm dosya dizgelerini listeler. Daha sonra NFS tarafından ihraç edilmiş bir sisteme erişmek istediğini kernele söylemek zorundasınızdır.

mount komutu farklı ndosya dizgelerine erişmeye izin verir. Yeni dosyaların uygun olup olmadığını kernele bildirir. -t parametresi kullanılan dosyaların tipini belirtmek için kullanılır. NFS için -t nfs yazarız.

ahmet adlı bir makinanın NFS sunucusuna sahip olduğunu ve onu /usr/local klasöründe tuttuğunu varsayalım. /usr/local mehmet adlı makinadan ona erişmek istendiği zaman, ahmet’ten mehmet’e ihraç edilen klasörü kurmak zorundasınız.

root@mehmet >> mount -t nfs -o nosuid, hard, intr

ahmet: /usr/local /usr/local

Komut nosuid, hard ve intr parametreleri ile bir NFS dosya dizgesi kurduğunuzu gösterir. Son iki parametrenin birincisi kurulacak olan parçayı belirtir. NFS için klasör ve parçaları belirttiğimiz yerdeki normal mount komutundan farklı bir yazım biçimine (syntax) sahiptir. Burada sunucuyu belirtiriz: ihraç edilmiş klasör (parçanın yerine). İkinci ve son olan parametre ise istemcide dosya dizgesinin yerini belirtir. Sadece ahmet in /usr/local ini mehmet ile paylaşırız ve bir defadan fazla /usr/local de programları kurmaktan sakınabiliriz. Bu ayarı sürekli hale getirmek için mehmet deki etc/fstab dosyasında onu belirtebiliriz. fstab dosyası açılışta çalışan bütün programları barındırır. /etc/fstab için kullanımı(syntax):

# device mount point file system options dump fsckorder

ahmet: /usr/local /usr/local nfs nosuid, hard, intr 0 0

NFS KOMUTLARI

NFS KULLANIMININ AVANTAJLARI

NFS sayesinde; Aynı dosyalara birden fazla bilgisayardan erişilebilir. Veri depolamada ucuzluk sağlar. Her uygulama için lokal diske kurulum yapmak yerine, uygulamaların paylaştırılması sağlanabilir. Açık kaynak kodludur.

Örneğin; Yerel bir işletmede tüm kullanıcılar tek bilgisayar üzerindeki aynı disk alanını paylaşabilir. NFS’nin NIS ile birlikte kullanımı sayesinde bir kullanıcı herhangi bir makinaya girip diğer kullanıcılarla birlikte aynı dosya yapısı ile çalışabilir. Paylaşım sayesinde büyük disk alanı isteyen programlar tek bir sunucuda toplanabilir ve bu sayede önemli miktarda diskten tasarruf sağlanır. Bir makine üzerinde yapılan değişiklik, her makinada yapılmış gibi olur. Böylece bir yazılımı örneğin 10 bilgisayara yüklemek zorunda olmazsınız.

--

--