Raid, /dev/ram, ve ramfs'lerin ilginç kullanımları

ArticleCategory:

Kernel Corner

AuthorImage:

[Photo of the Author]

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]

[illustration]

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 :

  1. KÖTÜ: Bilgisayar açıldıktan sonra boyutu sabit kalır.
  2. İYİ: İstediğiniz gibi biçimlendirme yapabilirsiniz.
  3. 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.
  4. İYİ: Aynı zamanda birden fazla ramdiske sahip olabilirsiniz.
Yeni ramdisk "ramfs":
  1. KÖTÜ: VFS olarak ayarlanmiş (bunun ne olduğunu bilmiyorum) ve ben bunun disinda bir başka biçimde onu biçimlendiremedim.
  2. İYİ: Aynı zamanda birden fazla ramdiske sahip olabilirsiniz.
  3. İYİ: İstenildiğinde boyutunu komut satırından değiştirebilirsiniz.
  4. Ç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.
  5. 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:

  1. 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.
  2. 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.
  3. 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.
  1. 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.
  2. 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.
  3. Ç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.
  1. Ramfs ile tıkız tekeri raid olarak kullanıp kullanılamayacağını görmek istiyorum.
  2. Eğer, oluyorsa, okuma işlemlerini sadece ramfs üzerinden yapmayı deneyeceğim.
  3. 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 :
  4. 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

  1. kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
  2. http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
  3. Ufak veritabanlarını Linux altında hızlandırmak
  4. Linux altında RamDisk nasıl kullanılır
  5. 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