From: A.Murat EREN (meren@comu.edu.tr)
Date: Fri 30 Jan 2004 - 07:30:39 EST
Tekrar Merhabalar,
> benim bu buyuk dosyalari yazmaya calistigim yer /dev/sda1 olarak mount
> edilmis usb baslantili bir harici disk. sda1 olarak tanimli bir yerin
> dosya sistemi nasil olur?
Herhangi bir dosya sistemi olabilir, hangi dosya sistemi ile
formatladiginizi hatirlamiyor musunuz? /dev/sda1 adli diskinizin dosya
sisteminin ne oldugunu
]$ mount | awk '/sda1/ {print $5}'
komutu yardimi ile ogrenebilirsiniz. Daha sonrada,
]# dumpe2fs -h /dev/sda1
komutu ile o diskinizdeki dosya sistemi ile ilgili cesitli bilgileri
goruntuleyebilirsiniz. Bu bilgiler icerisinde Block Size degerine de
rastlayacaksiniz (]# dumpe2fs -h /dev/hda5 | grep "Block size" komutu ile
ciktidan kolayca cekebilirsiniz).
> bir de 512byte'i nasil hesaplayip 2GB diyebiliyoruz?
Bu aslinda bir miktar karisik bir mevzu. Ext2'nin inode veri yapisini
iyi tanimak gerekli, aciklamaya calisayim.
Ext2 dosya sisteminde her bir inode, bir dosyayi, bir dizini, dosya
sistemi uzerinde bulunabilecek atomik bir varligi ifade etmek icin
kullanilir (dosya, dizin, karakter aygiti, soket, sembolik link, boru,
blok aygiti; hepsine birden dosya diyelim). Ve her bir dosya sadece ve
yanlizca bir unique inode ile ifade edilir, zaten dosyalara inode'larin
index numaralari ile ulasildigindan bunlarin unique olmasi gerekliligi
aciktir.
Her bir inode kendi veriyapisi icerisinde dosyanin kendi özlük
bilgilerini icerir elbette; dosyanin kullanicisi, grubu, özellikleri,
olusturma tarihi, degistirilme tarihi, son erisim tarihi, silinme tarihi
gibi. Bunun yaninda inode, dosyanin sahip oldugu meta bilgilerin disinda,
dosyayi olusturan verilerinin diskteki adreslerini de saklayabilmelidir
tabi. Bu verilerin diskteki yerlerini saklamada biraz degisik ve guzel
bir yol izliyor inode. Assagiya veriyapisini cizip ondan sonra aciklamaya
calisayim, bizim icin onemli kisimlar I, II, III ve IV ile isaretledigim
veri alanlari, cunku sizin diske en fazla ne kadar buyuklukte bir dosya
yazabileceginiz sinirlamasi onlarla ilgili (aslinda veri yapisinin 18
civari alani var fakat ben basitlestirecegim):
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Attribute (Dosya tipi ve erisim haklari) |
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Sahiplik Bilgisi (Sahibi, Grubu) |
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Boyut (byte cinsinden dosya uzunlugu) |
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Timestampler (Olusturma, degistirme, son erisim) |
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Dogrudan Bloklar (12 tane) | I.
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Dogrudan olmayan Blok (1. seviye, 1 tane) | II.
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Dogrudan olmayan Blok (2. seviye, 1 tane) | III.
- - - - - - - - - - - - - - - - - - - - - - - - - --
| Dogrudan olmayan Blok (3. seviye, 1 tane) | IV.
- - - - - - - - - - - - - - - - - - - - - - - - - --
I. alan 12 tane Block'tan olusuyor, herhangi bir adres tutmuyor sadece
sizin dosya sistemini formatlarken karar verdiginiz (block boyutu * 12)
byte veri saklayabiliyorular. Eger sizin dosyaniz, bu veri miktarindan
kucukse ve sadece ilk 12 alan ile ifade edilebiliyorsa, indirect
adreslere hic gecilmiyor. Dogrudan ifade edilebilen veri miktari
12*(block boyutu) byte.
II. alandan sonrasi biraz karisik. Eger veri 12*blockboyutu byte'dan
büyük ise, dogrudan olmayan 1. seviye blok'a geciliyor. Bu da aslinda bir
blok, fakat dogrudan verileri adreslemiyor da, diger bloklari adresliyor.
Yani kendi icerigi verinin kendisi degil, indirect blok adresleri oluyor.
Her bir blokun adresi 32 bit yani 4 byte olabildigi icin (32 bitlik
mimari üstünde calistigimizi varsayarak) bu bir blok icerisinde (block
size)/4 tane block adresi saklanabiliyor. Bu adreslerin gosterdigi
bloklarin her birinde de 1*(block size) byte veri oldugunu düsünürsek, 1.
indirect blok ile ifade edilebilecek toplam blok sayisi: ((block
boyutu)/4); toplam veri boyutu ((block boyutu)/4)*(block boyutu); block
boyutuna bundan sonra BB diyelim, ilki ile toplarsak (12 + (BB/4))*BB
byte veri etti.
III. alanin da double indirect adresleme icin kullaniliyor. eger ilk iki
alan verinin tamamini ifade etmeye yetmemis ise devreye burasi giriyor.
Bu sefer de, II. de verilere ulastigimiz noktada yine karsimiza her bir
veri yerine BB/4 tane yeni adres dizisi cikiyor. 2. seviyeden indirect
bloklar ile ifade edilebilen maximum veri miktari ((BB/4)^2)*BB byte
oluyor.
IV. alan da III. bir adim sonrasi tahmin ettiginiz gibi, burada da 3 kat
adres dolasiyoruz veriye ulasmak icin. Cizince aslinda cok guzel
anlasiliyor fakat e-posta oldugu icin biraz karisik oldu kusura bakmayin
(http://cs.senecac.on.ca/~lczegel/UNX511/lectures/Lecture12.html
adresinde cizmeye calistigim seyin bir resmi var, isterseniz bir goz
atabilirsiniz). Bu alanda yapilan adreslemeler yardimi ile ifade
edilebilen veri miktarida ((BB/4)^3)*BB byte oluyor.
En nihayetinde bizim blok boyutumuz 512 byte ise nasil hesaplayip 2Gb
maximum dosya boyutu diyebildigimize geliyoruz.. Maximum dosya, bu veri
yapisinin ifade edebilecegi en yuksek miktar oluyor tabi, bunun disina
ciktigi zaman herhangi bir dosyanin boyutu dosya sistemi o dosyayi ifade
edemez hale geliyor. Cunku basta soyledigimiz gibi her bir dosya sadece
bir inode tarafindna ifade edilebilir. BB blok boyutu icin bizim Ext2'nin
ifade edebilecegi maximum dosya boyutu su oluyor yukardakilerden sonra:
(12 + (BB/4) + (BB/4)^2 + (BB/4)^3) * BB
Blok boyutunun maximum dosya boyutu üzerine ne kadar polinomik bir
etkisi oldugu da burdan rahatca gorulebilir. Blok boyutu 4K oldugu zaman,
3. seviyeden indirect bloklar yaklasik 2 terabyte'i ifade edebiliyorlar.
Umarim biraz da olsa fikir verebilmisimdir blok boyutu - dosya boyutu
arasindaki iliskiye dair, eger siz baktiginizda dosya sisteminizin vfat
oldugunu gorurseniz bunlarin hepsini bosa yazmis olacagim :) olsun ama
mantik onda da buna yakin.
Iyi calismalar.
--
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
A. Murat Eren
meren@comu.edu.tr
http://zion.comu.edu.tr/~evreniz/
- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
--- linux-baslangic listesinden cikmak ve tum listeci islemleri icin http://liste.linux.org.tr/ adresini kullanabilirisniz. Bu listeden cikmak icin <a href="mailto:linux-baslangic-request@liste.linux.org.tr?Subject=unsubscribe"> tiklayiniz</a>