Anasayfa Makale UNIX Dosya Sistemleri Nasıl Çalışıyor?

UNIX Dosya Sistemleri Nasıl Çalışıyor?

UNIX Sistemlerde Dosya Sistemleri Nasıl Çalışıyor?

UNIX sistemlerde dosya sistemlerinin çalışma prensiplerini ve alakalı terimlerin anlamlarını açıklıyoruz.

EXT2, EXT3, EXT4 ve UFS…  UNIX benzeri sistemlerin çoğunda kullanabileceğiniz yüzlerce dosya sisteminin sadece dördü. Bu dosya sistemlerinin kendilerine has farklılıkları elbette mevcut, fakat ortak olan noktalar daha fazla. Dilerseniz bu ortak noktaları hemen incelemeye başlayalım.

Nedir bu “inode” kavramı?

Öncelikle en temel noktadan, inode’dan başlayalım. Inode, dosyanın metadata bilgisini tutan en küçük yapı taşıdır. Bu metadata’nın içeriğinde:

  • Dosyanın bulunduğu cihazın adı,
  • Dosya seri numarası,
  • Dosya tipi, sahibinin ve sahip grubun nasıl erişeceğini belirten dosya modları,
  • Inode’a bağlı olan “hard link” sayısı,
  • Dosya sahibinin kullanıcı kimliği ve dosyanın grup kimliği,
  • Eğer dosya bir cihazı temsil ediyorsa, cihaz kimliği,
  • Dosyanın byte olarak boyutu,
  • UNIX saati (epoch) biçiminde dosyanın son modifiye edilme, değiştirilme ve erişilme tarihleri,
  • Tercih edilen G/Ç blok sayısı ve bu dosyaya tahsis edilen blok sayısı gibi bilgileri barındırır.

Eski dosya sistemlerinin çoğunda, maksimum inode sayısı dosya sisteminin oluşturulma zamanında kısıtlanıyordu. Bu yüzden, diskte tutulabilecek dosya sayısı da azalıyordu. Bu tarz dosya sistemlerinde her 2000 byte’ta bir inode ile idare ediliyordu. Güncel dosya sistemleri, B-ağacı veya inode pointer yapısı gibi veri yapılarının avantajını kullanarak kendilerini genişletebiliyorlar.

Her dosyada, dosya isminin yanında inode’un kimliği denebilecek bir numara bulunuyor. Buna da inode numarası diyoruz. Inode numarası, dosyanın oluşturma esnasında dosya sistemi tarafından atanıyor. Bu numaraların hepsi dosyaya özgüdür ve değiştirilemez.

Bir dosyanın inode bilgilerini UNIX sistemlerdeki stat() sistem çağrısı yardımıyla sistemden çekebiliriz. Bu çağrı, dosyadan inode numarasını alarak o numaraya karşılık gelen inode’u bulur ve inode hakkındaki bilgiyi döndürür. Bu sistem çağrısı hakkında daha fazla bilgi için bu siteyi referans alabilirsiniz.

UNIX Sistemlerde Dosya Sistemleri Nasıl Çalışıyor?

Windows ve inode

Windows ile haşır neşirseniz, inode yapısı ile NTFS dosya sistemindeki MFT yapısının benzeştiğini söyleyebiliriz. MFT yapısı her dosyayı B-tree içinde tutar ve her girdinin bir dosya kimliği vardır. Inode ile metadata olarak tek farkının dosya izinlerinin farklı bir API üzerinden alınması olduğunu söyleyebiliriz. Ayrıca NTFS sistemi UNIX dosya sistemlerine göre daha karmaşık disk yayılımına sahip, örneğin ~900 byte’tan düşük boyutlu dosyalar klasör ile aynı MFT girdisinde saklanıyor. NTFS’te ayrıca FAT’a kıyasla en büyük farklardan biri de hard link oluşturabilmesi.

UNIX Sistemlerde Dosya Sistemleri Nasıl Çalışıyor?
Hard link ve sembolik link farkı.

Hard link

“Pointer” kavramına hakimseniz, hard link kavramı da sizlere yabancı gelmeyecektir. Hard link, bir dosyanın inode’una direkt olarak bir referanstır. Hard link kullanarak bir dosyayı aynı bölümde tutmak şartıyla istediğimiz klasöre atabiliriz veya içeriğini değiştirebiliriz. Hatta bu işlemler sonucunda hard link hala istediğimiz dosyaya bağlı kalacaktır, çünkü inode hala aktif ve hard link dediğimiz yapı zaten inode’un referansıdır aslında.

Hard link oluşturmak için “ln” komutunu kullanabiliriz. Öncelikle klasörümüzde sadece “test” isimli dosya olduğunu belirtelim.

Hard link
Klasörümüzün ilk hali.

Bir hard link oluşturalım ve farkı görelim.

Hard link
Hard link oluştuktan sonra klasörümüz.

“test_hardlink” dosyamızı değiştirelim. Acaba asıl dosyamız olan “test” dosyamıza etki edecek mi?

Hard link
Hard link’teki içeriğimizi değiştiriyoruz.

Ve sonuç:

Hard link
Değişmiş!

Bingo! Gördüğünüz gibi, hard link üzerine yaptığımız değişiklikler, asıl dosyamızın da içeriğini değiştirmiş!

Sembolik link’lere geçmeden önce, hard link’lerin dosyayı başka bir yere kopyaladıktan sonra (cp) değişmediğini fakat dosyayı kesip başka bir yere yapıştırdıktan (mv) sonra değiştiğini dipnot olarak belirtelim. Çünkü kopyaladıktan sonra inode numarası değişmezken, kesip yapıştırdıktan sonra değişir.

Sembolik link (symlink)

Sembolik linkler, inode yerine dosyanın direkt kendisine oluşturulan bir referanstır. Aynı hard link’te olduğu gibi symlink’te de yapılan bir değişiklik, dosyanın kendisini değiştirir. Symlink ile referansı alınan bir dosya herhangi bir bölümde, cihazda veya klasörde olabilir. Fakat symlink’in referans aldığı dosyanın konumu değişirse, symlink kırılacaktır.

Symlink oluşturmak için yine “ln” komutunu kullanacağız, fakat bu sefer “-s” parametresi ile.

Symlink
Sembolik link (symlink) oluşturduk, ve “ls” komutumuz symlink’imizi farklı bir renkte gösterdi.

Gördüğünüz gibi, “ls” komutumuz symlink’imizi farklı bir renk ile gösterdi. Bir de symlink’imizi açalım bakalım:

Symlink
Symlink’imizin içindeki sürpriz!

Gördüğünüz üzere, symlink’imizin içerisinden orijinal dosyamızın içeriği çıktı, hem de symlink’te herhangi bir değişiklik yapmamamıza rağmen!

Bu yazımızda sizlere UNIX sistemlerdeki dosya sistemlerinin çalışma prensiplerini ve birkaç yardımcı kavramı açıkladık. Öneri ve görüşlerinizi yorumlarda belirtip, sorularınızı Technopat Sosyal üzerinden sorabilirsiniz.