# Ağ Dosya Sistemi
Ağ Dosya Sistemi (İngilizce Network File System, kısaca NFS), Network file system, yani ağ dosya sistemi diğer bilgisayarlardaki dosyalara erişilebilmesini sağlayan bir yerel ağ işletim sisteminin parçasıdır. Bilgisayarlarda kullanılan programların network makinalarında kullanılmasını sağlar. Sun Microsystems tarafından 1984 yılında geliştirilmiş, ağdaki bilgisayarların ortak bir dosya sistemine, yerel diskleri kadar kolay ulaşmasını sağlayan, RPC temelli dağıtık dosya sistemi yapısıdır.


## NFS.
NFS sayesinde kullanıcı kendi bilgisayarına ihtiyaç duymadan NFS yoluyla istediği makinadan kendi dizinine (home directory) erişebilir. NFS protokolünün bazı dezavantajları vardır onlardan biri belki de en büyüğü de modem bağlantısı üzerinde çok yavaş olduğu için yeterli bir protokol olamamasıdır. Ama yerel ağlar için tasarlanan (local network) NFS bir hayli esnektir ve hem kullanıcılar hem de sistem sorumluları (adminisrator) için birçok olasılık barındırır.


### NFS Dezantajları;.
  - İstenmeyen tarafların girmesini önlemek için bir NFS çalıştırmak için bir güvenlik duvarı gereklidir. Bu korumayı kullanmayan NFS'ler zarar görme riski altında olacaktır.
  - Birden fazla tarafın bir dosyaya aynı anda erişmesi zor olabilir, özellikle de dosya daha büyük ise
  - Bazı protokoller, her okuma veya yazma isteğinde 1 MB'a kadar verinin taşınmasına izin verir. Bugünün protokolleri muazzam miktarda talebi ele alabilse de, 1 MB standardı çok zayıf olabilir.
  - RPC'lere bağımlılık NFS'yi doğal olarak güvensiz hale getirir


### NFS Avantajları;.
  - Bir işletmede tüm çalışanların tek bilgisayar üzerinden aynı disk alanını paylaşmaları.
  - Aynı dosyaya birden fazla makineden erişim sağlanabilir NFS' in NIS'la birlikte kullanılması sayesinde. Bu yöntemle beraber kullanıcıların beraber bir dosya üzerinde çalışması sağlanmıştır.
  - Veri paylaşımı sayesinde alandan büyük bir şekilde tasarruf edilir. Çünkü tüm veriler ortak bir diskte ve sunucuda toplanır. Yani daha az yoğunluk daha çok tasarruf demektir.
  - Bir sunucuda yapılan değişiklik her sunucuda yapılmış gibi etkili olur. Yani bir sunucuya lazım olan bir dosya indirildiğinde bu dosya tüm sunuculara gidecektir. Hem zamandan hem işten tasarruf sağlar.
  - En önemli ve güzel özelliğiyse açık kaynak kodlu bir sistem olmasıdır bu sayede kullanıcılarda sistemi geliştirebilir.


## Sürümler ve Varyasyonlar.
Sun sürüm 1 ‘i sadece şirket içi amaçlar için kullandı.Geliştirme ekibi, NFS sürüm 1'e önemli değişiklikler ekleyip Sun'ın dışında yayınladığında, sürüm birlikte çalışması ve RPC sürüm yedeğinin test edilebilmesi için yeni sürümü v2 olarak yayınlamaya karar verdiler.


### NFSv2.
Protokolün 2. sürümü Mart 1989'da RFC 1094'te tanımlanmıştır. NFS sürüm 2'nin oluşturulmasında yer alan kişiler arasında Russel Sandberg, Bob Lyon, Bill Joy, Steve Kleiman ve diğerleri yer alır.
Başlangıçta yalnızca Kullanıcı Datagram Protokolü (UDP) üzerinden çalıştırılmıştır. Tasarımcıları, örneğin çekirdek protokolün dışında uygulanan kilitleme ile sunucu tarafını durum bilgisi olmadan(stateless) tutmayı amaçlıyordu. NFSv2, bir IP ağı (port 2049) üzerinden hem TCP hem de UDP protokolünü kullanabilir. Ancak, istemci ile sunucu arasında durum bilgisi olmayan(stateless) bir ağ bağlantısı sağlamak için bir IP ağı üzerinden çalışan UDP'yi kullanır. UDP durum bilgisizdir (stateless), sunucu beklenmedik şekilde çökerse, UDP istemcileri ağı sunucu istekleriyle doldurmaya devam eder. UDP ile bir çerçeve kaybolduğunda, tüm RPC isteğinin yeniden iletilmesi gerekir. Sanal Dosya Sistemi arabirimi, basit bir protokolde yansıtılan modüler bir uygulamaya izin verir. Şubat 1986'da, Eunice kullanılarak System V sürüm 2, DOS ve VAX/VMS gibi işletim sistemleri için uygulamalar gösterildi. NFSv2, 32 bitlik sınırlamalar nedeniyle bir dosyanın yalnızca ilk 2 GB'lık kısmının okunmasına izin verir. 
NFS sürüm 2 (NFSv2) diğer sürümlerden daha eskidir ve yaygın olarak desteklenmektedir. Ancak RHEL7'de desteklenmez.


### NFSv3.
NFSv3 Haziran 1995'te piyasaya sürüldü NFSv3, sunucunun verileri senkronize etmek için doğru politikaları dikte etmesine izin veren eşzamansız yazma işlemlerini destekler. Veriler, verileri yönetmeyi taahhüt etme komutu oluşturulmadan önce senkronize edilecektir. Tasarım, NFSv2 ile karşılaştırıldığında daha iyi bir tamponlama üretir.
RFC 1813'te belirtilen NFSv3, aşağıdaki yeni özellikleri ve güncellemeleri içeriyordu:
  - Dosya ofsetlerini 32-64 bit arasında genişletti ve bu da 4,2 GB maksimum dosya boyutu sınırını kaldırdı.
  - Daha büyük okuma ve yazma aktarımlarını sağlamak için 8 KB veri aktarımı sınırlama kuralını gevşetti.
  - TCP, NFSv3'te bir aktarım katmanı protokolü seçeneği olarak eklendi. TCP aktarımı, NFS'nin geniş alan ağı üzerinden kullanılmasını kolaylaştırır (WAN) ve okuma ve yazma aktarım özelliklerini geliştirir.
  - Sunucu, bir diske veya NVRAM'a senkronize etmeden NFSv3'te WRITE RPC'lere anında yanıt verir. Verilerin kararlı depolamada olduğundan emin olmak için, istemcinin yalnızca bir COMMIT RPC göndermesi gerekir.
  - NFSv4 ile birlikte çalışabilir, ancak daha sonraki sürümlerle sunulan yeni ve geliştirilmiş özelliklerin birçoğu için destekten yoksundur.
  - NFSv3'ün hala yaygın olarak kullanıldığı bildirilmektedir.


#### WebNFS.
Sun'dan NFS dağıtılmış dosya sisteminin bir Web sürümü. WebNFS özellikli sunucular ve tarayıcılar, Web sayfalarına standart HTTP protokolünden 10 kat daha hızlı erişim sağlar. Her küçük dosya yalnızca bir sonrakine yeniden bağlanmak için indirildikten sonra bağlantıyı bırakan HTTP'nin aksine, WebNFS tek bir bağlantıyla birden fazla dosya indirir. Ayrıca, orta akışta bağlantılarını kaybeden büyük indirmeler için hata toleransı sağlar.


### NFSv4.
Sürüm 4 (RFC 3010, Aralık 2000; RFC 3530, Nisan 2003'te ve tekrar RFC 7530, Mart 2015'te revize edilmiştir),Andrew Dosya Sistemi (AFS) ve Sunucu İleti Bloğundan (SMB, CIFS olarak da adlandırılır) etkilenir, performans iyileştirmeleri içerir, güçlü güvenliği zorunlu kılar ve durum bilgisi olan bir protokol sunar. Sürüm 4, Sun Microsystems'in NFS protokollerinin geliştirilmesini devretmesinin ardından İnternet Mühendisliği Görev Gücü (IETF) ile geliştirilen ilk sürüm oldu.
NFS sürüm 4.1 (RFC 5661, Ocak 2010; RFC 8881'de revize edilmiştir, Ağustos 2020), birden çok sunucu arasında dağıtılan dosyalara ölçeklenebilir paralel erişim sağlama yeteneği (pNFS uzantısı) dahil olmak üzere kümelenmiş sunucu dağıtımlarından yararlanmak için protokol desteği sağlamayı amaçlar.Sürüm 4.1, Oturum kanallama mekanizmasını (NFS Çoklu Yol olarak da bilinir) içerir ve bazı kurumsal çözümlerde VMware ESXi olarak bulunur.NFS Sürüm 4.2 (RFC 7862) Kasım 2016'da sunucu tarafı klon ve kopya, uygulama G/Ç tavsiye, seyrek dosyalar, uzay rezervasyonu, uygulama veri bloğu (ADB), Sec_Label ile etiketlenmiş yeni özelliklerle yayınlandı. Bu, herhangi bir MAC güvenlik sistemini ve PNF'ler (LayouterRor ve LayoutStats) için iki yeni işlemi barındırır.
NFSv4'ün öncüllerine göre en büyük avantajlarından biri, hizmeti çalıştırmak için yalnızca bir UDP veya TCP bağlantı noktası olan 2049'un kullanılmasıdır; bu, protokolü güvenlik duvarlarında kullanmayı basitleştirir.


### Diğer Uzantılar.
Sürüm 2 ve Sürüm 3'ün bir uzantısı olan WebNFS, NFS'nin Web tarayıcılarına daha kolay entegre olmasını ve güvenlik duvarları üzerinden çalışmayı etkinleştirmesini sağlar. 2007'de Sun Microsystems, istemci tarafı WebNFS uygulamalarını açık kaynaklı hale getirdi.


#### Çeşitli yan bant protokolleri NFS ile ilişkilendirilmiştir. Not;.
  - Bayt aralığı danışma Ağ Kilidi Yöneticisi (NLM) protokolü (UNIX System V dosya kilitleme API'lerini desteklemek için eklenmiştir)
  - NFS kullanıcılarının NFS sunucularındaki veri depolama kotalarını görüntülemelerine olanak tanıyan uzaktan kota raporlama (RQUOTAD) protokolü
  - RDMA üzerinden NFS, aktarım olarak uzak doğrudan bellek erişimini (RDMA) kullanan bir NFS uyarlaması
  - Kullanıcı alanında çalışan ve ilgili FSAL (Dosya Sistemi Soyutlama Katmanı) modülleri aracılığıyla GPFS/Spectrum Scale, CephFS gibi çeşitli dosya sistemlerini destekleyen bir NFS sunucusu olan NFS-Ganesha. libcephfs kullanılarak desteklenen CephFS FSA
  - Güvenilir NFS (TNFS)


## Platforms.
NFS genellikle Unix işletim sistemleri Apple macOS ve Unix benzeri işletim sistemleri ve Acorn gibi işletim sistemleri için de mevcuttur, Dosya Sunucusu, dosya sistemi olarak da adlandırılır.


### Tipik Uyarlamalar(Typical Implementation).
1) Sunucu varsayılan olarak nfs arka plan programı işlemlerini uygular ve verileri genel olarak müşteriler için kullanılabilir bir hale getirir
2) Sunucu yöneticisi (adminisrator) dizinleri kullanarak dizinlerin adlarını ve parametrelerini dışa aktararak neyin kullanılabilir olacağını belirler
3) Sunucu güvenik- yönetim, onaylanmış müşterilerin tanınmasını ve onaylanmasını sağlar
4) Sunucu ağ yapılandırılması, uygun istemcilerin herhangi bir kişi aracılığıyla onunla pazarlık yapmasını sağlar
5) İstemci makina, dışa aktarılan verilere NFS sunucusunun hangi bağlantısını kullandığını sorar
Her şey yolunda giderse, istemci makinedeki kullanıcılar izin verilen parametreler dahilinde sunucudaki monte edilmiş dosya sistemlerini görüntüleyebilir ve bunlarla etkileşime girebilir.


## NFS Protokolü Hakkında.
NFS olarak adlandırılan şey birbirinden farklı 4 protokolün birleşmesinden meydana gelmiştir.
Bu 4 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 programa erişim veren port numarasını almak için öncelikle sunucu 'portmap'iyle bağlantı kurulur.Ardından RPC paketleri ilgili portlara gönderilir.


## Protokol Geliştirme.
ONC protokolünün geliştirilmesi sırasında (o zaman SUNRPC olarak adlandırılır), sadece Apollo'nun Ağ Bilgi İşlem Sistemi (NCS) karşılaştırılabilir işlevsellik sundu. İki uzak prosedür çağrı sisteminde temel farklılıklar üzerinde iki rakip grup gelişti.Veri kodlama yöntemine odaklanan argümanlar-ONC'nin harici veri temsili (XDR), bağlantının her iki akranının da çok az-endian makine mimarileri olsa bile, tam sayıları her zaman büyük-endian sırasıyla oluşturdu, oysa NCS yöntemi bayt-SWAP'tankaçınmaya çalıştı İki akran, makine mimarilerinde ortak bir endianness paylaştığında.(Mart 1987) (nihayetinde başarısız olan) iki ağ bilgilendirme ortamını uzlaştırmaya çalışırken (Mart 1987) oluşturulan ağ bilgi işlem forumu olarak adlandırılan bir endüstri grubu.
1987'de Sun ve AT&T, AT & T'nin UNIX System V sürüm 4'ü birlikte geliştireceklerini açıkladılar. Bu, AT & T'nin diğer UNIX sistemi lisans sahiplerinin çoğunun Sun'ı avantajlı bir konuma getireceğinden endişe etmesine neden oldu ve sonuçta 1988'de Dijital Ekipman, HP, IBM ve diğerlerine yol açtı. İronik olarak, Sun Ve AT&T daha önce AT & T'nin Uzak Dosya Sistemine (RFS) karşı Sun'ınNFS'si üzerinde yarışmıştı ve NFS'nin Dijital Ekipman, HP, IBM ve diğer birçok bilgisayar satıcısı tarafından RFS üzerinden hızlı bir şekilde benimsenmesi, kullanıcıların çoğunu NFS lehine devirdi.NFS birlikte çalışabilirliğine, 1986'da başlayarak birbirleriyle satıcıya göre satıcının test edilmesine izin veren "Connectathons" adlı olaylar tarafından desteklendi.
OSF, Sun/ONC RPC ve NFS üzerinden dağıtılmış bilgi işlem ortamını (DCE) ve DCE dağıtılmış dosya sistemini (DFS) benimsedi. DFS, DCE'yi RPC olarak kullandı ve Andrew Dosya Sisteminden (AFS) türetilen DFS; DCE, Apollo'nun NCS ve Kerberos dahil olmak üzere bir dizi teknolojiden türetilmiştir.


### 1990'larda.
Sun Microsystems ve İnternet Derneği (ISOC), ISOC'nin Mühendislik Standartları Organı, İnternet Mühendisliği Görev Gücü (IETF), ONC RPC ile ilgili standart belgeleri (RFC'ler) yayınlayabilmesi için ONC RPC'nin "değişim kontrolünü" kurtarmak için bir anlaşmaya vardı Protokoller ve ONC RPC'yi genişletebilir. OSF, DCE RPC'yi bir IETF standardı yapmaya çalıştı, ancak sonuçta değişim kontrolünden vazgeçmek istemedi. Daha sonra, IETF, protokol standartlarının yeterli güvenliğe sahip olduğu gereksinimlerini karşılamak için Jenerik Güvenlik Hizmetleri Uygulama Program Arabirimi'ne (GSSAPI), RPCSEC GSS'ye dayalı yeni bir kimlik doğrulama aroması ekleyerek ONC RPC'yi genişletmeyi seçti. Daha sonra, Sun ve ISOC, NFS sürüm 2 ve sürüm 3'ü hariç tutmak için sözleşmeyi dikkatlice yazmakla birlikte, ISOC kontrolü NFS üzerinde değişim kontrolü vermek için benzer bir anlaşmaya varmıştır. 2003 yılında NFS sürüm 4 belirtilmesi.


### 2000'lerde.
21. yüzyıla gelindiğinde, ne DFS ne de AFS, SMB-CIFS veya NFS ile karşılaştırıldığında önemli bir ticari başarı elde etmemişti. Daha önce DFS ve AFS'nin birincil ticari satıcısı olan Transarc'ı satın almış olan IBM, 2000 yılında AFS kaynak kodunun çoğunu özgür yazılım topluluğuna bağışladı. OpenAFS projesi devam etmektedir. 2005'in başlarında IBM, AFS ve DFS satışlarının sona erdiğini duyurdu. Panasas, Ocak 2010'da Paralel NFS (pNFS) teknolojisine dayanan bir NFSv4.1 önerdi ve veri erişimi paralellik kabiliyetini iyileştirdiğini iddia etti. NFSv4.1 protokolü, dosya sistemi metaverilerini dosya verileri konumundan ayırma yöntemini tanımlar; verileri bir dizi veri sunucusu arasında ayırarak basit ad/veri ayrımının ötesine geçer. Bu, dosyaların adlarını ve verilerini sunucunun tek şemsiyesi altında tutan geleneksel NFS sunucusundan farklıdır. Bazı ürünler çok düğümlü NFS sunucularıdır, ancak istemcinin metaveri ve verilerin ayrılmasına katılımı sınırlıdır.NFSv4.1 pNFS sunucusu, bir dizi sunucu kaynağı veya bileşenidir; bunların metaveri sunucusu tarafından kontrol edildiği varsayılır.pNFS istemcisi, ad alanıyla geçiş veya etkileşim için bir metaveri sunucusuna erişmeye devam eder; İstemci verileri sunucuya taşıdığında ve sunucudan taşıdığında, pNFS sunucu koleksiyonuna ait veri sunucuları grubuyla doğrudan etkileşim kurabilir. NFSv4.1 istemcisi, dosya verilerinin tam konumunda doğrudan katılımcı olacak ve verileri taşırken bir NFS sunucusuyla yalnız etkileşimi önleyecek şekilde etkinleştirilebilir.


#### NFSv4.1, pNFS'ye ek olarak şunları sağlar;.
  - Oturumlar
  - Dizin Yetkilendirmesi ve bildirimler
  - Çoklu sunucu ad alanı
  - Erişim kontrol listeleri ve isteğe bağlı erişim kontrolü
  - Elde tutma nitelikleri
  - SECINFO_NO_NAME


## Ağ Üzerinde Paylaşım.
NFS'in çalışması, yerel bir diskin mount edilmesi kadar kolaydır. Örnek olarak NFS sunucusu olan aspendos makinesinde yer alan /home dizinini, yerel makinadaki /users dizinine yerleştirmek için: 
 # mount -t nfs aspendos:/home /users
 kullanılır. mount, karşı makinanın erişim izinleri doğru olduğunu teyit ettiği anda bu işlemi gerçekleştirir.
 Sunucu ile istemci arasındaki mesaj alış-verişini mountd programı üstlenir.
NFS kullanabilmek için çekirdekte NFS desteğiufd';lp'fdsl'; olması şarttır. Eğer aşağıdaki satırlarda nfs kelimesi geçmiyorsa çekirdeğe NFS desteği verilerek tekrar derlenmesi gerekir.
 $cat /proc/filesystems
 minix
 ext2
 msdos
 nodev proc
 nodev nfs
NFS için mount programının genel kullanımı şu şekildedir:
 mount -t nfs <sunucu-adresi:paylaşma-dizini> <yerel-dizin> -o <secenekler>
Sistem açılırken /etc/fstab dosyasında yer alan bilgilerle uzak makinanın diski otomatik olarak paylaştırılabilir. Mount programı bazı seçenekleri destekler. Bu seçenekler -o yardımıyla komut satırında verilebildiği gibi /etc/fstab içinde de belirtilebilir. Her iki durumda da birden fazla seçenek kullanılırsa bunlar birbirlerinden virgülle ayrılırlar.
Açılış sırasında news makinesindeki /usr/spool/news dosyasını yerel makinadaki /usr/spool/news dizini altına yerleştiren /etc/fstab satırı
 news:/usr/spool/news /usr/spool/news nfs timeo=20 
şeklinde yazılır.
NFS ile kullanılan timeo seçeneğinin karşısında yer alan sayı (saniyenin onda biri olarak), bağlantının kurulabilmesi için geçecek maksimum zamanı gösterir. Bu zamanın aşılması halinde sunucuyla bağlantı kesilir.