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

Adanali

Member
EXT2, EXT3, EXT4 ve UFS… UNIX gibisi sistemlerin birçoklarında kullanabileceğiniz yüzlerce evrak sisteminin yalnızca dördü. Bu belge sistemlerinin kendilerine has farklılıkları olağan olarak mevcut, ancak ortak olan noktalar daha fazla. Dilerseniz bu ortak noktaları çabucak incelemeye başlayalım.

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

  • Belgenin bulunduğu aygıtın ismi,
  • Evrak seri numarası,
  • Evrak tipi, sahibinin ve sahip kümenin nasıl erişeceğini belirten evrak modları,
  • Inode’a bağlı olan “hard link” sayısı,
  • Belge sahibinin kullanıcı kimliği ve belgenin küme kimliği,
  • Şayet belge bir aygıtı temsil ediyorsa, aygıt kimliği,
  • Evrakın byte olarak boyutu,
  • UNIX saati (epoch) biçiminde evrakın son modifiye edilme, değiştirilme ve erişilme tarihleri,
  • Tercih edilen G/Ç blok sayısı ve bu belgeye tahsis edilen blok sayısı üzere ayrıntıları barındırır.
Eski evrak sistemlerinin birçoklarında, azamî inode sayısı evrak sisteminin oluşturulma vaktinde kısıtlanıyordu. Bu yüzden, diskte tutulabilecek belge sayısı da azalıyordu. Bu usul evrak sistemlerinde her 2000 byte’ta bir inode ile yönetim ediliyordu. Yeni evrak sistemleri, B-ağacı yahut inode pointer yapısı üzere data yapılarının avantajını kullanarak kendilerini genişletebiliyorlar.

Her belgede, evrak isminin yanında inode’un kimliği denebilecek bir numara bulunuyor. Buna da inode numarası diyoruz. Inode numarası, evrakın oluşturma esnasında evrak sistemi tarafınca atanıyor. Bu numaraların hepsi evraka hastır ve değiştirilemez.

Bir belgenin inode ayrıntılarını UNIX sistemlerdeki stat() sistem daveti sayesinde sistemden çekebiliriz. Bu davet, belgeden inode numarasını alarak o numaraya karşılık gelen inode’u bulur ve inode hakkındaki bilgiyi döndürür. Bu sistem daveti hakkında daha fazla bilgi için bu siteyi referans alabilirsiniz.


Windows ve inode

Windows ile haşır neşirseniz, inode yapısı ile NTFS evrak sistemindeki MFT yapısının benzeştiğini söyleyebiliriz. MFT yapısı her belgeyi B-tree ortasında fiyat ve her girdinin bir evrak kimliği vardır. Inode ile metadata olarak tek farkının evrak müsaadelerinin farklı bir API üzerinden alınması olduğunu söyleyebiliriz. Ayrıyeten NTFS sistemi UNIX belge sistemlerine göre daha karmaşık disk yayılımına sahip, mesela ~900 byte’tan düşük boyutlu evraklar klasör ile birebir MFT girdisinde saklanıyor. NTFS’te ayrıyeten FAT’a kıyasla en büyük farklardan biri de hard link oluşturabilmesi.

Hard link ve sembolik link farkı.

Hard link

“Pointer” kavramına hakimseniz, hard link kavramı da sizlere yabancı gelmeyecektir. Hard link, bir evrakın inode’una direkt olarak bir referanstır. Hard link kullanarak bir belgeyi birebir kısımda tutmak kaidesiyle istediğimiz klasöre atabiliriz yahut içeriğini değiştirebiliriz. Hatta bu süreçler kararında hard link hala istediğimiz evraka bağlı kalacaktır, zira inode hala etkin ve hard link dediğimiz yapı aslına bakarsan inode’un referansıdır aslında.

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

Klasörümüzün birinci hali.

Bir hard link oluşturalım ve farkı bakılırsalim.

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

“test_hardlink” evrakımızı değiştirelim. Sanki asıl belgemiz olan “test” belgemize tesir edecek mi?

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

Ve sonuç:

Değişmiş!

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

Sembolik link’lere geçmedilk evvel, hard link’lerin belgeyi öbür bir yere kopyaladıktan daha sonra (cp) değişmediğini ancak belgeyi kesip diğer bir yere yapıştırdıktan (mv) daha sonra değiştiğini dipnot olarak belirtelim. Zira kopyaladıktan daha sonra inode numarası değişmezken, kesip yapıştırdıktan daha sonra değişir.

Sembolik link (symlink)

Sembolik linkler, inode yerine evrakın direkt kendisine oluşturulan bir referanstır. Tıpkı hard link’te olduğu üzere symlink’te de yapılan bir değişiklik, evrakın kendisini değiştirir. Symlink ile referansı alınan bir evrak rastgele bir kısımda, aygıtta yahut klasörde olabilir. Ancak symlink’in referans aldığı belgenin pozisyonu değişirse, symlink kırılacaktır.

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

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

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

Symlink’imizin ortasındaki sürpriz!

Gördüğünüz üzere, symlink’imizin içerisinden özgün evrakımızın içeriği çıktı, birebir vakitte symlink’te rastgele bir değişiklik yapmamamıza rağmen!

Bu yazımızda sizlere UNIX sistemlerdeki belge sistemlerinin çalışma prensiplerini ve birkaç yardımcı kavramı deklare ettik. Teklif ve görüşlerinizi yorumlarda belirtip, sorularınızı Technopat Toplumsal üzerinden sorabilirsiniz.