Raid, /dev/ram, ve ramfs'lerin ilginç kullanımları
ArticleCategory:
Kernel Corner
AuthorImage:
TranslationInfo:[Author and translation history]
original in en Mark
Nielsen
en to tr Erdal MUTLU
AboutTheAuthor:
Mark bağımsız danaışman olarak çalışmaktadır. Zamanını GNUJobs.com, makale yazımı,
serbest yazılım yazımı ve eastmont.net'de gönüllü çalışarak geçirmektedir.
Abstract:
RamFs ilginç yönleri olan basit bir dosya sistemidir. 2.4 çekirdek sürümü ile birlikte gelen yeni bir şeydir.
ArticleIllustration:[This is the title picture for your
article]
ArticleBody:
RamDisk'e giriş
Eski ramdisk ile ilgili lütfen Linux Focus'un November1999/article124.html
makalesine bakınız. Ramdisk ile ilgili eski bilgilere bu makalede yer vermeyeceğim.
RamDisk nedir? RamDisk, geçici belleğin bir kısmını oluşturmaktadır ve normal bölme (partition)
olarak kullanılabilir. Başka bir deyişle, geçici belleğiniz bir kısmını alıyorsunuz ve sanki tıkız teker gibi kullanıyorsunuz, yani mount ediyor,
dosya yaratıyor, dosya siliyor vs.
Burada sözünü edeceğimiz iki tip ramdisk vardır. İlki, biçimlendirebileceğiniz (format) ve
mount edebileceğiniz ramdisktir. İkincisi ise,
formatlama yapılamayan, fakat ilginç özellikleri olan ramdisktir. Özetle :
Eski /dev/ram1 yaklaşımına göre :
- KÖTÜ: Bilgisayar açıldıktan sonra boyutu sabit kalır.
- İYİ: İstediğiniz gibi biçimlendirme yapabilirsiniz.
- KÖTÜ: Biçimlendirildikten sonra (Buna inanamiyorum, onu mount etmeniz gerek.) geçici belleğinizin bir kısmını
almaktadır. Bu kısmı geri nasıl verilir onu bilmiyorum.
- İYİ: Aynı zamanda birden fazla ramdiske sahip olabilirsiniz.
Yeni ramdisk "ramfs":
- KÖTÜ: VFS olarak ayarlanmiş (bunun ne olduğunu bilmiyorum) ve ben bunun disinda bir
başka biçimde onu biçimlendiremedim.
- İYİ: Aynı zamanda birden fazla ramdiske sahip olabilirsiniz.
- İYİ: İstenildiğinde boyutunu komut satırından değiştirebilirsiniz.
- ÇOK İYİ: Gereksinim duyduğu kadar bellek kullanmaktadır. Başka bir
deyişle, 64 MB olarak ayarladığınız zaman ve üzerinde sadece 2KB'lik dosya varsa, o zaman 2KB'lik kısmı
dişinda kalan belleği bilgisayar geçici bellek olarak kullanabilmektedir. Herhangi bir dosyayı sildiğiniz anda
bilgisayarınızın daha fazla geçici belleğe sahip olmaktadır.
- KÖTÜ: Tamam, belkide bu onun hatası değildir. İki tane ramfs ramdiskinizi doldurma gafletine düşmeyin,
yoksa tüm geçici belleğinizden olabilirsiniz. Bu konuyu ileride açıklayacağım.
Eskiden RamDisk nasıl kullanılırdı
Bunun için lütfen Linux altında RamDisk nasıl kullanılır
yazısını okuyunuz..
2.0 ve 2.2 çekirdekler ile birlikte kullanmak için aşağıdaki komutları root kullanıcısı olarak çalıştırınız :
mkfs -t ext2 /dev/ram1
mkdir -p /RAM1
mount /dev/ram1 /RAM1
ve işlem tamam. Birçok sistemde ramdiskin boyutu 4 MB ile sınırlıdır. Bunu çekirdeğinizi yeniden derleyerek
veya bilgisayarınızın açılışında değiştirebilirsiniz. Ayrıca, bir tane daha yaratmak isterseniz :
mkfs -t ext2 /dev/ram2
mkdir -p /RAM2
mount /dev/ram2 /RAM2
Ramfs'li RamDisk'i 2.4 çekirdek sürümü ile bilrikte nasıl kullanırsınız
Herşeyden önce, ramfs destekli bir 2.4 çekirdeği çalıştırdığınız kabul ediyorum.
2.4 çekirdek sürümünü kullanan birçok Linux dağıtımı, ramfs desteğini çekirdeklerinde vermektedirler.
Bu makalenin yazımı sırasında ben Red Hat 7.1 kullanıyordum.
Çok basit bir örnek. Bir dizin yaratın ve ramfs'i oraya mount edin.
mkdir -p /RAM1
mount -t ramfs none /RAM1
İkinci bir taneye gereksinim duyarsanız, aynı şekilde bir dizin yaratın ve ramfs'i oraya mount edin.
mkdir -p /RAM2
mount -t ramfs none /RAM2
Ramdiskin boyutunun değiştirilmesi ve diğer seçenekler.
10 MB'lik bir ramdisk yaratan örnek.
mkdir -p /RAM1
mount -t ramfs none /RAM1 -o maxsize=10000
Aşağıdaki yazı
http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
dan alınmıştır (çevirilerek tabii).
+ ramfs - Otomatik olarak boyutu değiştirilebilen dosya sistemi.
+
+ Ramfs dosyalarını RAM (geçici bellek) da tutan bir dosya sistemidir.
+ Ramfs üzerinde okuma ve yazma işlemleri yapmanız mümkündür.
+ RamDisk 'lerin aksine boyutunu ramfs'in bouyutunu
+ büyütebilirsiniz ve içerdiği dosya
+ buyutu kadar geçici belleiği kullanmaktadır.
+
+ Ramfs'i mount etmek için:
+ mount -t ramfs none /mnt/wherever
+
+ Bundan sonra üzerinde dosya yaratabilirsiniz.
+ Dosya sistemini umount ettiğnizde üzerinde bulunan tüm bilgileri kaybedersiniz.
+
+ NOT! Bu dosya sistemi daha çok gerçek bir dosya sistemi olarak değil
+ de sanal bir dosya sistemi nasıl
+ yazılır şeklinde bir örnek olarak kullanılabilir.
+
+ Kaynak sınırlamaları:
+
+ Benimsenmiş değer olarak dosyalarını saklamak için ramfs, geçici
+ belleğin yarısı, eğer metadata
+ bilgisi de eklenirse yarısından biraz daha fazla alan ile sınırlandırılmıştır.
+ Ramfs'in kaynak sınırlandırılmasını mount komutuna verilen
+ aşağıdaki seçenekler ile denetleyebilirsiniz :
+
+ maxsize=NNN
+ Dosya sisteminin (ramfs) kullanabileceği en fazla boyutu NNN KB olarak
+ ayarlamaktadır. Bu değer sisteminizin page (sayfa) boyutunun katı
+ şeklinde aşağıya yuvarlama yapılarak
+ ayarlanacaktır. Benimseniş değer geçici belleğin yarısıdır. Diğer
+ sınırlamalar gibi, boyutu sıfır yaparak
+ sınırsız anlamına gelmemektedir. Gerçekte sıfır yapmakla, sıfır
+ sistem sayfası boyutuna getirmektesiniz.
+ Belkide bunu değişik durumlarda kullanmak mümkün olabilir.
+
+ maxfilesize=NNN
+ Dosya sistemi üzerindeki herhagi bir dosyanın boyutunun en
+ fazla olabileceği boyutu NNN KB
+ olarak ayarlamaktadır. Bu değer sisteminizin page (sayfa) boyutunun katı
+ şeklinde aşağıya
+ yuvarlama yapılarak ayarlanacaktır. Eğer, NNN=0 ise, sınırlama
+ yok anlamı taşımaktadır.
+ Benimsenmiş değer sınırlamanın olmadığı değerdir.
+
+ maxdentries=NNN
+ Dosya sisteminde oluşturulabilecek en fazla dizin (hard link) sayısını
+ NNN olarak ayarlamaktadır.
+ Eğer, NNN=0 ise, sınırlama yoktur. Benimsenmiş değeri maxsize/4 tür.
+
+ maxinodes=NNN
+ Dosya sistemindeki en fazla inode (farklı dosya sayısı) sayısını NNN
+ olarak ayarlamaktadır.
+ Benimsenmiş değer sınırlamanın olmadğı değerdir. Ancak, dentries
+ değerinden fazla inode olmaz.
+
RamDisk'te Süreçler (Programlar) çalıştırmak
Benim bir fikrim. Dikkatle dinleyin. Süreçlerinizi (sanaldoku(web) sunucusu,
dns sunucusu veya
veritabanı sunucusu gibi) ramdisk üzerinde çalıştırmak sizce şık olmaz mı?
Genellikle sıradan bir sanaldoku veya DNS sunucusunda çok fazla sayıda veya büyük dosya
bulunmamaktadır. Hatta, geçici bilgileri tutmak üzere veritabanı sunucunuzu bile ramdisk'e koyabilirsiniz.
Bu günlerde RAM'lerin fiyatları oldukşa ucuz. Geçenlerde 128 MB'lik
geçici belleği 120 dolara satın aldım. Fiyatların daha da düşeceğini hayal
ediyorum. 128 MB'lik bir yere sanaldoku sunucularımı rahatlıkla sığdırabilirim.
Eğer, sanaldoku sunucum büyük dosyalara gereksinim duyarsa, httpd.conf
dosyasından başka bir dizine bakmasını ayarlayabilirim. Benim DNS sunucum
çok küçük. En büyük veritabanım 28 MB. 1 GB'lik geçici belleğe çok ucuza sahip
olabileceğiniz gerçeği göz önünde bulundurursak, sahip olduğum herşeyi
geçici bellekte çalıştırabilirim. Veritabanı sunucusu ile ilgili bir püf nokta var tabii.
O da geçici belleğe yazmadan önce, başka bir veritabanına yazmak gerektiğidir.
Bu yavaş bir işlemdir. Ancak, bir veritabanı sunucusunda yazmaktan çok okuma işleminin
yapıldığı düşünülürse performans artışı yaşanması gerekecektir.
Belkide geçici belleği (ramfs) tıkız tekere (hard disk) mirior (ayna görüntüsü)
yapabilseydik.
Bu konuyu daha önce açıklamada bulunduğum:
http://www.gnujobs.com/mark/articles/Ramdisk.html#Example.
yazıyı okuyunuz.
### Ramdisk bölmelerini oluşturunuz
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2
### Ramdisk'leri ilgili yerlere mount ediniz
mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html
aşağıdaki komutlara boyutlarını yükseltin ( 10 MB yeterince iyi değil:) )
mount -t ramfs none /home/httpd/cgi-bin -o maxsize=10000
mount -t ramfs none /home/httpd/icons -o maxsize=10000
mount -t ramfs none /home/httpd/html -o maxsize=10000
Ramdisk ve Raid
Ramdisk ve tıkız tekerinizi neden raid olarak birleştirmek isteyeceksiniz ki?
Bilmiyorum. Belki ileride kullanışlı olabilir. Akıllı işletim sistemleri
birşeye şu anda gereksinim olmadığından veya doğrudan bir fayda sağlamıyor
diye ondan vazgeçmezler. Bu yüzden ticari işletim sistemleri popülerliğini kaybediyor
ve bu yüzden kafalarında teknoloji değil sadece para olan bir takim kişilerin yazdığı programlar
yerini serbest yazılımlar alıyor.
Ramdisk ile tıkız tekeri birleştirmede üç sorun ortaya çıkmaktadır:
- Bu işin /dev/ram ile nasıl yapılacağını biliyorum, fakat
Ramfs ile nasıl yapıldığını bilmiyorum. Belkide tıkız tekerde
yer alan bir bölmeyi ramfs olarak bölümlendirmek mümkündür. Ramfs VFS
katmanı diye birşey kullanıyor ve ben bunun hakkında hiç bir şey bilmiyorum.
Belkide bu konuda daha sonra biraz okumam gerekecek.
- Eğer, raid olarak ayarlanmış tıkız teker ve ramdisk paralel olarak çalışıyorsa,
o zaman fazladan bir hıza ulaşmamız sözkonusu olmayacaktır. Bilmiyorum, eğer,
okuma işlemini sadece ramdisk üzerinden yapabilirsem, bu durumda fayda sağlayabilirm.
- Bilgisayarın her yeni açılışında ramdisk'inizi yeniden oluşturmanız gerekecektir.
Raid oluşturmak için /etc/raidtab dosyasını
raiddev /dev/md3
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 4
persistent-superblock 1
device /dev/hdb6
raid-disk 1
device /dev/ram3
raid-disk 0
olarak düzenledim ve
mkraid /dev/md3
mkfs -t ext2 /dev/md3
mkdir -p /RAID1
mount /dev/md3 /RAID1
komutlarını çalıştırdım. Ancak, bilgisayarı yeniden açtığımda ramdisk'teki bilgiler karıştı.
Bunun düzeltmek için yeniden açma sırasında,
raidstart /dev/md3
raidhotadd /dev/md3 /dev/ram3
mount /dev/md3 /RAID1
komutlarını çalıştırmak gerekti. Unutmamak gerekir ki eski tip ramdisk
kullanıyorsanız ve boyutunda ayarlama yapmadıysanız 4 MB'nin üzerinde
bir tıkız teker bölmesi kullanmanızın bir anlamı olmayacaktır.
Nasıl yapıldığını bilmiyorum, ancak, 2 bölmesi tıkız tekerden ve bir bölme ramdiskten
oluşacak şekilde 3 bölmeli bir raid oluşturup, raid'in okuma
komutlarını sadece ramdisk üzerinden yapacağı bir ayarlama
yapılabilse ne şık olurdu değil mi?
Düşünceler
Bu belkide makalenin en önemli bölümü. Linux'u seviyorum, çünkü onun sayesinde
kendinizi topuklarınızda vurabiliyorsunuz. Öğrenmenizi sağlayan acı gibisi yoktur.
- Ramfs'in benimsenmiş boyutu geçici belleğinizin (buna swap alanı dahil değil) yarısı kadardır.
Eğer, iki adet ramfs yaratır ve onları doldurursanız, tıpkı bende olduğu gibi bilgisayarınız kilitlenecektir.
LÜTFEN ramdisk'inizin boyutlarını yukarıda anlatıldığı gibi kendiniz belirtiniz.
- Benim düşünceme göre, ramfs kendi başına bir dosya sistemidir ve
ext2 dosya sistemi değildir. Bu yüzden eğer, ramfs'le ext2 dosya sistemleri arasında
rsync veya tar ile dosya kopyalayacak olursanız, dosya boyutların aynı olmayacağını
tahmin edebilirsiniz. Bu dosyaların kullanımı sırasında bir faklılık görmeyebilirsiniz,
ancak dosya sistemi farklı olduğundan, bazı özellikler çeşitli kademelerde farklılık gösterebilir.
- Çekirdek ile birlikte gelen kaynakları okuduğumda, ramfs'in kullanımını gerçek bir dosya sistemi olarak
düşünülmediğini fark ediyorum. Ancak, neden olduğunu anlamış değilim, çünkü istediğim gibi çalışıyor.
Ramdisk'ler ile işim henüz bitmiş değil.
- Ramfs ile tıkız tekeri raid olarak kullanıp kullanılamayacağını görmek istiyorum.
- Eğer, oluyorsa, okuma işlemlerini sadece ramfs üzerinden yapmayı deneyeceğim.
- Sanaldoku sunucusu gibi bir sunucuyu ramdisk ve raid üzerinden çalıştırmak.
Raid kullanılmasınıdaki püf nokta, herhangi bir değişiklik olduğunda, onu kaybetmeyeceğinizdir.
Bu yüzden raid benim için hayati önem taşımaktadır. Böylece, istediğim sunucuları ramdisk üzerinden
çalıştırabilecek ve geçici belleğin tıkız tekere olan hız fakrından yararlanmış olacağım eğer :
- Okuma işlemlerinin sadece ramdisk üzerinden yapılacak bir raid'e sahip olabilirsem.
- Tıkız tekerden ilk defa okunan dosyalar geçici bellekte tutuluyorlar (cach). Ancak, geçici bellekten
alındıktan sonra veya dosya değişime uğradığı zaman hız farkını hisedebilirsiniz. Ayrıca, ramdisk'te bulunan
bir dosya ilk defa okunduğunda tıkız tekere göre daha hızlı olacaktır.
- Çekirdek ile birlikte gelen sanaldoku sunucusunu da kullanmak mümkündür.
Bu şekilde de hız kazanmak mümkündür. Belkide çekirdeğin sanaldoku sunucusunu
ramdisk ile birliştirmek fikri hiç de fena olmaz, öyle değil mi?
- Cdrom'dan açılacak bir bilgisayar yapılandırmak, istenilen bir sunucuyu çalıştırmak
ve gerekirse değişiklikleri ağ üzerinden edinmek, tıkız teker kullanmadan, şık olmaz mıydı?
Sadece cdrom ve geçici belleğin olduğu, tıkız tekere gereksinim olmadan bir sanaldoku
sunucusuna sahip olunabilir. Eğer, geçici belleğinizi 1 GB'a çıkartırsanız, tüm sisteminizi
sadece cdrom üzerinden çalıştırmamak için bir neden göremiyorum.
Bu güvenlik için de iyi olabilir. Güvenlik problemi olduğu zaman, gövenlik açığını kapattıktan sonra,
bilgisayarı yeniden çalıştırmanız yeterli olacaktır. Sanaldoku sunucusu yerel bilgisayar hiçbirşey
kaydetmeyecektir. Gerekirse, ağ üzerinden ve güvenliği sağlanmış bir başka bilgisayara bilgi
aktarabilir. Ağ üzerinden cdrom ile çalışan bilgisayarlar daha önce yapılandırmıştım. Belki de
önceki projemi bu iş için kullanabilirim.
Kaynaklar
-
kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
- http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
- Ufak veritabanlarını Linux altında hızlandırmak
- Linux altında RamDisk nasıl kullanılır
- Eğer, bu makale değişirse, değişikliği bu adreste bulabilirsiniz : http://www.gnujobs.com/Articles/21/Ramdisk2.html
Bazı yardımlarından dolayı Katja teşekkür ederim!
Haklar © 4/2001 Mark Nielsen
Makale Sürüm Numarası 1.3 : En son Sat May 19 06:04:06 2001 değiştirildi