Linux Sistemlerde RAM Disk Oluşturulması
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY5MNq7A' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Sistem memorysinin bir kısmının sisteme disk partisyonu olarak mount edilmesiyle oluşturulan ramdiskler zaman zaman disk I/O ile alakalı bazı konularda sistem performansını arttırmak üzere kullanılabilecek güzel bir alternatif olabilmektedir. Ram üzerinde dosya sistemi oluşturulmasına ve bu alan içerisinde dosya barındırılmasına olanak sağlayan ramdiskler özellikle veri güvenliğinin önplanda olmadığı cache vs. gibi işlemler için tercih edilebilirler. Örneğin daha önce ramdisk kullanılarak yapılan bir reverse proxy uygulamasından bahsetmiştim. Bu yazıda ise linux sistemlerde ramdisk oluşturulmasından ve otomatik olarak mount edilmesine değineceğim.
İçerik İndexi
Ramdisk vs tmpfs
Herşeyden önce olası karışıklıkları önlemek için Ramdisk ve tmpfs arasındaki farklardan bahsetmek istiyorum. Bildiğiniz gibi linux sistemlerde tmpfs ismi ile /dev/shm dizinine mount edilmiş olan bir paylaşımlı hafıza (shared memory) alanı bulunur. Bu alan da sonuç olarak memory üzerinde yer kaplar ve mantıken ramdisk olarak adlandırılabilir. Ancak bizim bahsettiğimiz ramdisk'lerden farklı olarak tmpfs, memory'de dinamik olarak yer işgal eder ve ancak kullanımda olmayan (available) memory'nin yarısı kadar yer kaplayabilir. Ayrıca alanın idareli kullanılması için en az kullanılan sayfalar (pages) swap alanına taşınır. Oysa burada bahsedilen ramdisk mantığında, memory'den belirli bir alan, partisyon olarak sisteme mount edilmek üzere atanır. Örnek olarak sisteminizde 8GB ram bulunuyorsa, bunun 4'ünü ramdisk olarak tanımlayabilirsiniz. Böylece sabit büyüklükte bir disk bölümü elde edebilirsiniz. Ayrıca tmpfs'deki gibi swap ile doğrudan bir ilişkisi yoktur. İkisinin kullanım alanlarına örnek vermek gerekirse, tmpfs sistem ve süreçlerle ilgili geçici bilgilerin tutulduğu /var/run ya da /var/lock dizinler için kullanışlı olabilecekken ramdisk ise bir siteye ait imaj gibi statik dosyaların barındırılması ve bu dosyaların disk I/O problemlerinden etkilenmeden performanslı bir şeklilde sunulmaları açısından idealdir.
Ramdisk Yapılandırması
İlk olarak memory'nin ne kadarının ramdisk olarak atanabileceğini belirtmek üzere grub'a küçük bir ekleme yapılması gerekiyor. Ben örnek olarak 512MB'lik bir tanımlama yapacağım; siz rakamı ihtiyacınıza göre düzenleyebilirsiniz.
Bu işlem için /etc/grub/menu.lst dosyasını açıyoruz:
# vi /boot/grub/menu.lst
Dosya içerisinde bulunan kernel satırına ramdisk_size=[KByte cinsinden değer] parametresi eklenmelidir. RHEL/CentOS ve Debian/Ubuntu sistemler için bu işlem aşağıda görüldüğü şekilde olmalıdır.
RHEL/CentOS
Aşağıdakine benzer satırları bulun:
title CentOS (2.6.18-194.32.1.el5) root (hd0,0) kernel /vmlinuz-2.6.18-194.32.1.el5 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-194.32.1.el5.img
ve aşağıda kırmızı ile belirilen ramdisk_size=[KByte cinsinden değer] eklemesini yapıyoruz:
title CentOS (2.6.18-194.32.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.32.1.el5 ro root=/dev/VolGroup00/LogVol00 ramdisk_size=524288
initrd /initrd-2.6.18-194.32.1.el5.img
Bu şekilde 512MB'a kadar ramdisk tanımlamak mümkün olacak. Ancak değişikliklerin devreye girebilmesi için dosyaya eklemeyi yaptıktan sonra sistemin reboot edilmesi gerekiyor.
Debian/Ubuntu
Debian ve Ubuntu sistemlerde dosya içeriği şu şekilde görünmektedir.
title Debian GNU/linux, kernel 2.6.26-2-686 root (hd0,0) kernel /vmlinuz-2.6.26-2-686 root=/dev/mapper/Lab03--Debian-root ro quiet initrd /initrd.img-2.6.26-2-686
kernel satırına aşağıdaki şekilde ekleme yapıyoruz:
title Debian GNU/Linux, kernel 2.6.26-2-686
root (hd0,0)
kernel /vmlinuz-2.6.26-2-686 root=/dev/mapper/Lab03--Debian-root ro quiet ramdisk_size=524288
initrd /initrd.img-2.6.26-2-686
Dosyayı kaydettikten sonra, değişikliklerin devreye girmesi için sistemi reboot ediyoruz.
Dosya Sisteminin Oluşturulması
Ramdisk kullanımında veri güvenliği önplanda olmadığı için journaling'e ihtiyaç bulunmuyor dolayısı ile ram üzerinde oluşturulacak dosya sistemin ext2 olması yeterli. Hem CentOS hem de Debian sistemlerde işlem aynıdır. Aşağıdaki şekilde kolayca oluşturulabilir:
# mke2fs -m 0 /dev/ram0
Ayrıca, -m 0 parametresi ile kullanılabilir alan üzerinde rezervasyon yapılmamasını sağlıyoruz. (Normalde alanın %5'lik bölümü rezerve edilir.)
Mount İşlemi
Dosya sisteminin oluşturulmasından sonra, ilgili alanı sisteme mount edelim. Ben bu işlem için /ramdisk isimli bir dizin oluşturuyorum ve ram0'ı bu dizine bağlıyorum:
# mkdir /ramdisk # mount /dev/ram0 /ramdisk
Böylece ramdisk isimli 512MB'lik bir partisyon elde etmiş oluyoruz. df ile bakarsınız ilgili bölümü görebilirsiniz.
[root@Lab02CentOS ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 7.2G 1.3G 5.6G 19% / /dev/sda1 99M 19M 76M 20% /boot tmpfs 125M 0 125M 0% /dev/shm /dev/ram0 497M 1.6M 496M 0% /ramdisk
Bildiğiniz gibi sisteminizi reboot etmeniz durumunda ramdisk uçacaktır. Dolayısı ile sistem açılışlarından sonra dosya sisteminin yeniden oluşturularak mount edilmesi gerekir. Bu işlem bir init script ile otomatize edilebilir.
Automount Init Scripti
Şimdi, /etc/init.d/ dizini altında makeramdisk isimli bir script oluşturalım ve sistem açılışlarında çalışıp ramdisk oluşturarak sisteme mount etmesi için scripti servis olarak startup'a ekleyelim.
Bu işlem CentOS ve Debian sistemler için küçük farklılıklar içermektedir. Dolayısı ile konuya ilgili sistemler için ayrı başlıklar altında değineceğim.
RHEL/CentOS
/etc/init.d dizini altında makeramdisk isimli bir dosya açıyoruz:
# vi /etc/init.d/makeramdisk
Dosya içerisine aşağıdaki satırları giriyoruz:
#!/bin/sh # # chkconfig: 345 99 10 # description: Ramdisk Olusturur # description: Ramdisk Olusturur # # processname: # pidfile: # config: mke2fs -m 0 /dev/ram0 [ ! -d /ramdisk ] && mkdir -p /ramdisk mount /dev/ram0 /ramdisk
Dosyadan kaydederek çıktan sonra, çalıştırılabilir olarak set ediyoruz.
# chmod 755 /etc/init.d/makeramdisk
Şimdi de açılışlarda otomatik olarak çalışması için sisteme ekliyoruz:
# chkconfig --add makeramdisk # chkconfig --level 345 makeramdisk on
Böylece işlem tamamlanmış oluyor.
Debian/Ubuntu
Debian tabanlı sistemlerde de aynı şekilde /etc/init.d/ altında makeramdisk isimli bir dosya açıyoruz:
# vi /etc/init.d/makeramdisk
Dosyaya aşağıdaki satırları ekliyoruz:
#!/bin/sh # Ramdisk Olusturur # ### BEGIN INIT INFO # Provides: makeramdisk # Required-Start: # Required-Stop: # Default-Start: 3 4 5 # Default-Stop: 1 # Short-Description: Ramdisk Olusturur. # Description: Ramdisk olusturup /ramdisk dizinine mount eden shell script. # ### END INIT INFO mke2fs -m 0 /dev/ram0 [ ! -d /ramdisk ] && mkdir -p /ramdisk mount /dev/ram0 /ramdisk
Çalıştırma izni veriyoruz:
# chmod 755 /etc/init.d/makeramdisk
Son olarak da startup'a ekliyoruz:
update-rc.d makeramdisk defaults
Böylece sistem açılışlarında ramdisk oluşturulacak ve /ramdisk dizinine mount edilecektir.
Bu yazılar da ilginizi çekebilir:
- FreeBSD Sistemlerde RamDisk Oluşturulması
- CentOS NFS Server ve Client Yapılandırması
- iotop İle Disk Aktivitesini Görüntülemek | I/O Monitoring
- Debian Tabanlı Sistemlerde Paket Sorgulama İşlemleri
- Linux Sistemlerde Gereksiz Servislerin Tespiti ve Kapatılması
/boot/grub/menu.lst yok içinde işletim sisteminin
[Cevapla]
acık sade anlasılır,işime yaradı .teşekurler
[Cevapla]