Satın
aldığınız bir sabit diski veya USB flash belleği kullanabilmek
için üzerinde bir dosya sistemi oluşturulması gerekir. Donanım
üreticileri özellikle de USB flash diskleri genellikle Windows
işletim sistemi ailesi ile kullanılmak üzere hazır olarak
sunarlar. Bu diskler genellikle FAT16, FAT32 bazen de NTFS olarak
sunulur. MAc OS kullanıcıları için kutuların üzerinde her zaman
sabit diskin nasıl formatlanacağına dair kısa bir açıklama
bulunur. Mac OS kullanıcılarını bu diskleri doğrudan
bilgisayarlarına takıp kullanabilmeleri olanaklı değildir. Benzer
olarak da UNIX/BSD kullanıcısı iseniz disk üzerinde UNIX/BSD
sisteminizin erişebileceği, okuyup yazabileceği bir dosya sistemi
oluşturmanız zorunludur.
USB
üzerinden bilgisayara bağlanan sabit diskler için yapacağınız
işlemleri fabrikadan çıkıp size kadar gelen sabit diskler içinde
yapmanız gereklidir. Fabrika çıkışında sabit disk “low-level
format” olarak adlandırılan bir işlem uygulanmış olarak size
ulaşır. “low-lewel format” işlemi ile sabit disk üzerinde iz
(track) ve sektör (sectors) hazırlar. İz ve sektörün kesişimi
ile de depolama birimleri ortaya çıkar. Bu depolama birimleri 512
byte büyüklüğündedir.
Sabit
diskin low-level format işlemine tutulmuş hali ile kullanılması
söz konusu olmadığından üzerinde bir dosya sisteminin
oluşturulması gereklidir. Bu dosya sistemi oluşturma işlemine
high-level format veya DOS'tan dilimize yerleşen tabiri ile
formatlama işleminin yapılması zorunludur. Bir UNIX/BSD sistemde
bu işlem newfs ile ile gerçekleştirilir. Formatlama işlemi ile
oluşturulan dosya sistemi NTFS, HPFS veya UFS/FFS vs olabilir ancak
tüm dosya sistemlerinin temel de işlevleri aynı olduğu için şu
özellikleri ortaktır:
- Depola birimi içerisindeki dosyaların kayıtlarını tutan bir kayıt tablosuna sahip olmak
- Diskte saklanan verinin okuma/yazma performansını iyileştirecek bir mantıksal depolama adresi sistemine sahip olmak
Bir
dosya sistemin veriyi çabuk bir şekilde yazıp okurken sabit diskin
fiziksel özelliklerinden kaynaklanan kısıtlamalar ile karşı
karşıya kalacaktır. Sabit disk üzerinde iz ve sektörlerin
kesişimi ile ortaya çıkan bloklardan oluşan silindirler
bulunmaktadır. Silindirlerin her birisini 255 adet yatay (iz) ve 63
adet düşey (sektör) çizgi kesmektedir. Bunların kesiştikleri
noktalarda 512 byte büyüklüğünde bir depolama birimi
bulunmaktadır. Bu durumda basit bir hesapla bir silindirin 255x63 =
16065 depolama birimine sahip olacağı görülür.
Eğer
her bir depolama birimine bir dosya koyacak olursak bir silindirde
16065 adet dosya saklayabiliriz. Bu dosyaların her birinin erişimini
kolaylaştırmak ve arandığında daha kolay bulunabilmesini
sağlamak için her birisine 1'den başlayarak 16065'e dek bir numara
verebileceğimiz bir kayıt tablosu hazırlayabiliriz. Böylelikle
bir dosyayı sildiğimizde kayıt tablosundan adını kaldırarak
işlemi gerçekleştirebiliriz. Bir dosyayı başka bir yere taşımak
için ise yapılması gerek sadece dosyanın yeni konumunu kayıt
tablosunda güncellemek olacaktır. Bu şekilde dosyaların
silinmesi, oluşturulması veya taşınması gibi işlemler için
doyanın konumunu bildiren tabloda düzenlemeler yapmak dosyayı
fiziksel olarak silmek, taşımak vb göre daha kolaydır.
Bu
dosya kayıtlarını tutulmakta olduğunu dosya sistemini UNIX/BSD
sistemde oluşturulduğunda dosya kayıtlarını sakladığımız
tabloya inode – index node ablosu adını alır. Türkçe
kaynaklarda inode için düğüm karşılığı verilmektedir.
Dosya
sisteminin bu basit yapısı beraberinde disk alanının kullanımını
verimsizleştirmektedir. 512 btye'lık depolma birimleri her bir
dosyanın 512 byte büyüklüğünde olması durumuna mükemmel bir
çözüm olacaktır. Ancak gerçek dünyada durum bunun tersidir.
Dosya boyutları bir kaç byte olabileceği gibi 512 byte'ten daha
büyük de olabilmektedir.
Örneğin
10 byte büyüklüğünde bir dosyayı sabit disk kayıt edecek
olursak kullanılmayan 502 byte depolama alanı atıl halde
kalacaktır. Benzer biçimde bir çok küçük dosya kayıt etmeniz
durumunda depolama alanınız verimsiz bir şekilde kullanılmış
olacaktır. Tersine olarak tek bir 16065 byte büyüklünde bir dosya
kayıt ettiğinizde de tek bir dosya tüm depolama alanını
tüketecektir. Aslında diskin depolama kapasitesi bundan fazla
olmakla birlikte tek bir dosya ile bir tek silindirdeki inode
tamamını tüketmiş olunacaktır. Bu da istenmeyen bir durumdur.
Dosya
sisteminde küçüklü büyüklü bir çok dosya saklanacağı için
depolama alanının daha etkin ve verimli kullanılması zorunludur.
Bu nedenle tek bir fiziksel depolama biriminin yani bir 512 byte
büyüklüğündeki blokun tek bir dosya ile tüketilmemesi için
faklı bir çözüme gereksinim vardır. Depolama birimine bir tek
değilde bir çok küçük dosya saklanabilir. Örneğin 512 byte
depolama biriminde bir çok farklı boyutta dosya bulunurken bunların
içerisinden 12 byte uzunluğundaki bir dosyayı siler ve yerine daha
küçük olan 7 byte büyüklüğündeki bir dosyayı koyarsak boşta
kalan 5 byte alanı nasıl adresleyebiliriz? Bu çözüm ise
beraberinde bir depolama biriminde saklanan dosyaların kayıtlarının
nasıl tutulacağı sorununu getirir.
Bu
yaklaşım sorunları çözmeyip, tersine daha başka sorunlar
yaratmaktadır. Bu sorunu çözmek için bir çok dosya sistemi
“fragment – parçalanma” kavramınından yararlanır. Bir parça
bir 512 byte büyüklüğündeki blokun daha küçük parçalara
ayrılmasıdır. Böylelikle her bir parçaya bir adres verilerek
dosya sisteminde tabloda yer alır. Dosya sistemi bir bloku dört
parçaya bölebilir. Bu durumda blok büyüklüğü dörtte bir
küçülürken depolama alanı dört kat artar. 16065 blok böylelikle
64260 bloka dönüşürken blok boyutu da 128 byte büyüklüğüne
iner. Bu küçük parçalar bağımsız bir blok gibi işlenir ve
tanımlanır. Böylelikle indeks numaraları tablosu – index node
yani inode sayısı 64260 adete çıkar. Dosya boyutlarından
kaynaklanan kayıt sorunu mantıksal parçalar sayesinde ortadan
kalkmış olur.
Öte
yandan saklanacak olan dosyanın boyutlarının mantıksal veya
fiziksel blok büyüklüğünden büyük olması durumunda başka
problemler ortaya çıkmaktadır. Kayıt edilecek olan dosyanın
boyutu 1000 byte ise fiziksel blok olarak 2 tane 512 byte
büyüklüğünde blok kullanılacaktır. Dosyanın ilk 512 byte
büyüklüğündeki kısmı bir blok üzerinde saklanırken, geri
kalanı izleyen blok üzerinde saklanacaktır. Buna ek olarak her bir
blok içeriğini sakladığını index numarası tablosunda da bu
bilginin saklanırken nasıl tanımlanacağı sorunu ortaya çıkar.
Dosya sistemi 4 adet fragment/parçalanmayı kullanıyorsa bu durumda
1000 byte büyüklüğündeki dosya için en az 8 adet kayıt
kullanılması gerekir. Ayrıca bu sekiz kaydın doğru sıra ile
saklanması da zorunludur.
Dosya
sistemi için bilginin saklanabilmesi için kayıt edilmesi öncelikli
olarak çözülmesi gereken problemdir. Kayıt işlemi kadar diğer
önemli olan diğer problem de kayıt edilmiş bilginin
erişilebilmesi yani okunabilmesidir. Kullanıcı tarafından
oluşturulan ve kayıt edilmesindeki amaç öncelikli olarak
gerektiğinde kullanıcı tarafından yeniden erişilebilir
olmasıdır. Dosya sisteminin bunu yapabilmesi için dosyanın hangi
blok veya bloklarda olduğunu bilmesi gereklidir. Bu bilgi ile dosya
sistemi dosyayı sabit diskten okuyup RAM'a aktarabilir.
Bir
dosya sisteminin dosya okuma performansını iyileştirebilmek için
bir çok seçeneği vardır. İlk olarak mantıksal blok büyüklüğünü
arttırabilir. Böylelikle bir çok fiziksel blok bir araya gelerek
gruplandırılarak tek bir sanal bloka dönüştürülebilir.
Böylelikle dosya bir sefere tek bir sanal bloktan okunarak RAM
aktarılabilir. Böylelikle birde çok blokun sabit diskten RAM'a ve
tekrar RAM'dan sabit diske aktarılması kolaylaşır, tek seferde
gerçekleşir.
Bu
görevlerin yerine getirilebilmesi için dosya sisteminin
oluşturulmasını sağlayan araç UNIX/BSD sistemlerde newfs
aracıdır. Kılavuz sayfasına bakacak olursak dosya sisteminin
işleyişi hakkında daha fazla bilgi edinebiliriz. Aşağıdaki
seçenekler FreeBSD 8.2 AMD64 ve OpenBSD 5.0 AMD64 kılavuz
sayfalarından yararlanılarak hazırlanmıştır. newfs(8) kılavuz
sayfasına man 8 newfs ile ulaşabilirsiniz.
-b
block-size Dosya sisteminin blok büyüklüğüdür. FreeBSD ve
OpenBSD için varsayılan değeri 16 KB – 16384 byte'tır. Değer
her zaman için 2'nin katları olarak belirlenir. Fragmanet/block
size – parçalanma/blok büyüklüğü oranı her iki sistem içinde
8:1'dir. OpenBSD 16 KB veya parçalanma boyutunun 8 katı olarak
tanımlanmadıysa otomatik olarak bu iki değerden küçük olanı
seçer.
-f
frag-size parçaların büyülüğünü tanımlar. FreeBSD ve
OpenBSD için varsayılan değer 2048 byte'tır. FreeBSD bu değeri
blok büyüklüğü/8 veya blok büyüklüğü kadar belirler.
OpenBSD için bu eğer bsdlabel(8) ile önceden tanımlanır ve
newfs(8) tarafından okunur.
-i
bytes dosya sistemindeki indeks numarası tablosunun – index
node/inode – yoğunluğunu belirler. FreeBSD ve OpenBSD için bu
değer parça/fragment sayısının dört katı olacak şekilde
otomatik olarak belirler. Ancak sistem yöneticisi tarafından bu
seçenek ile bir sayısal değer verilirse newfs(8) bu değeri
kullanacaktır. Gereksinimlere göre bu sayı daha küçük seçilerek
daha fazla indeks numarası elde edilebilir. Sayı daha büyük
seçilirse tersi yani daha az sayıda indeks numarası elde edilir.
Bunların
yanında dosya sisteminin okuma/yazma performansı üzerinde etkili
olan iki seçeneğe daha göz atmakta yarar var.
-m
free-space (%) Normal kullanıcılar için gerekli olan serbest disk
alanının yüzdesidir. Bir diğer deyişle eşik değeridir. FreeBSD
için bu değer %8 ve OpenBSD için ise bu değer %5'tir. FreeBSD ve
OpenBSD için söz konusu değerler src/sys/ufs/ffs/fs.h dosyasında
tanımlıdır. tunefs(8) kılavuz sayfasında bu değerin nasıl
belirlenebileceğine ilişkin bilgi bulabilirsiniz.
Boş
disk alanı yüzdesinin önemi boş blok sayısının büyüklüğünü
belirlemesidir. Dosya sistemleri genel olarak bir dosyası ilk boş
bloktan başlamak üzere ardışık bloklara yazmayı tercih eder. Bu
durum boş blok sayısının azalması durumunda gerçekleşmez ve
dosya sistemi dosyayı disk üzerindeki boş bloklara atamak
durumunda kalır. Özellikle de dosya sisteminin doluluğu %90
civarına ulaştığında performansında büyük değişimler
gözlenir. FreeBSD sistemde doluluk oranı %92 ve OpenBSD sistemde
aynı şekilde doluluk oranı %95'e ulaştığında dosyaların kayıt
edilmesine izin verilmez. Süper kullanıcı – root – bu durumdan
bağışıktır. Kullanıcılar doluluk oranı eşik değerden aşağı
indiğinde dosyalarını kayıt edebilir. Dolayısıyla dosya
sisteminin çabuk dolması olasılığı var ise sistem hizmete
konulmadan önce gereken önlemlerin alınması gereklidir.
-o
optimization optimizasyon Dosya sistemininde -m seçeneği ile belirtilen eşik
değerin büyüklüğüne göre dosya sistemi ya okuma/yazma süresini
veya disk üzerindeki boşlukları/parçaları optimize edecek
şekilde davranacaktır. Eşik değer – FreeBSD için %8 ve OpenBSD
için %5 – ve daha büyük büyük bir değer seçilirse
okuma/yazma performansını iyileştirecek şekilde davranacaktır.
Tersi durumda ise disk alnını en etkin ve verimli şekilde
kullanacak şekilde davranır. Bu değişken tunefs(8) ile
yapılandırılabilir.
Dosya
sistemlerinin büyük bir bölümünde hangi dosyaların hangi
bloklarda saklanacağını belirleyen algoritmalar kullanılır. Bu
seçenek dosya sistemine hangi algoritmanın kullanılarak dosya
sisteminin nasıl optimize edileceğini belirtilmesini sağlar. Dosya
sisteminin serbest alan eşik değerine yaklaştığında veya
aştığında boş blokların bulunabilmesi okuma/yazma
performansından daha çok önemli olacaktır.
Dosya
sistemine ait olan seçeneklerin ön tanımlı değerlerine
bakıldığında hızın – okuma/yazma performansının –
öncelikle dikkate alındığı kolaylıkla görülebilir.
Okuma/yazma performansı önemli olmakla birlikte dosyaların
saklanması için yeterince inode oluşturulmaktadır. Standart bir
kurulum için dosya sisteminin ön tanımlı ayarları fazlasıyla
yeterli olmaktadır. Gerektiğinde özelleştirilmiş kurulumlar için
dosya sistemi farklı seçenekler ile oluşturulabilir.
Hiç yorum yok:
Yorum Gönder