UNIX Dosya Sistemleri Nasıl Çalışıyor?
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ı elbette 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, belgenin 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ı,
- Belge tipi, sahibinin ve sahip kümenin nasıl erişeceğini belirten belge modları,
- Inode’a bağlı olan “hard link” sayısı,
- Evrak sahibinin kullanıcı kimliği ve evrakın küme kimliği,
- Şayet evrak bir aygıtı temsil ediyorsa, aygıt kimliği,
- Belgenin byte olarak boyutu,
- UNIX saati (epoch) biçiminde belgenin 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 bilgileri 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 evrak sayısı da azalıyordu. Bu şekil evrak sistemlerinde her 2000 byte’ta bir inode ile yönetim ediliyordu. Aktüel belge sistemleri, B-ağacı yahut inode pointer yapısı üzere bilgi 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 belge sistemi tarafından atanıyor. Bu numaraların hepsi belgeye hastır ve değiştirilemez.
Bir belgenin inode bilgilerini UNIX sistemlerdeki stat() sistem daveti yardımıyla sistemden çekebiliriz. Bu davet, evraktan 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 belge sistemindeki MFT yapısının benzeştiğini söyleyebiliriz. MFT yapısı her belgeyi B-tree içinde fiyat ve her girdinin bir belge kimliği vardır. Inode ile metadata olarak tek farkının belge müsaadelerinin farklı bir API üzerinden alınması olduğunu söyleyebiliriz. Ayrıyeten NTFS sistemi UNIX evrak sistemlerine nazaran daha karmaşık disk yayılımına sahip, örneğin ~900 byte’tan düşük boyutlu belgeler klasör ile tıpkı 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
“Pointer” kavramına hakimseniz, hard link kavramı da sizlere yabancı gelmeyecektir. Hard link, bir belgenin inode’una direkt olarak bir referanstır. Hard link kullanarak bir belgeyi birebir kısımda tutmak kuralıyla istediğimiz klasöre atabiliriz yahut içeriğini değiştirebiliriz. Hatta bu süreçler sonucunda hard link hala istediğimiz belgeye bağlı kalacaktır, zira inode hala faal ve hard link dediğimiz yapı aslında 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.
Bir hard link oluşturalım ve farkı görelim.
“test_hardlink” evrakımızı değiştirelim. Sanki asıl belgemiz olan “test” belgemize tesir edecek mi?
Ve sonuç:
Bingo! Gördüğünüz üzere, hard link üzerine yaptığımız değişiklikler, asıl belgemizin da içeriğini değiştirmiş!
Sembolik link’lere geçmeden evvel, hard link’lerin belgeyi diğer bir yere kopyaladıktan sonra (cp) değişmediğini ama belgeyi kesip diğer bir yere yapıştırdıktan (mv) sonra değiştiğini dipnot olarak belirtelim. Zira kopyaladıktan sonra inode numarası değişmezken, kesip yapıştırdıktan sonra değişir.
Sembolik link (symlink)
Sembolik linkler, inode yerine belgenin direkt kendisine oluşturulan bir referanstır. Birebir hard link’te olduğu üzere symlink’te de yapılan bir değişiklik, belgenin kendisini değiştirir. Symlink ile referansı alınan bir belge rastgele bir kısımda, aygıtta yahut klasörde olabilir. Lakin symlink’in referans aldığı belgenin pozisyonu değişirse, symlink kırılacaktır.
Symlink oluşturmak için yeniden “ln” komutunu kullanacağız, ancak bu sefer “-s” parametresi ile.
Gördüğünüz üzere, “ls” komutumuz symlink’imizi farklı bir renk ile gösterdi. Bir de symlink’imizi açalım bakalım:
Gördüğünüz üzere, symlink’imizin içerisinden orjinal belgemizin içeriği çıktı, hem de symlink’te rastgele bir değişiklik yapmamamıza rağmen!
Bu yazımızda sizlere UNIX sistemlerdeki evrak sistemlerinin çalışma prensiplerini ve birkaç yardımcı kavramı açıkladık. Teklif ve görüşlerinizi yorumlarda belirtip, sorularınızı Technopat Toplumsal üzerinden sorabilirsiniz.