RAM tabanlı dosya sistemi nedir ve nerelerde kullanılır?
Bu flood’da Linux’ta sistem hafızası (RAM) üzerinde çalışan dosya sistemlerini ve kullanım alanlarını anlatacağım.
İşletim sistemleri, kendi dosyaları ve kullanıcı dosyalarının sabit diskte organize bir şekilde tutulması için dosya sistemleri (File System
) sunarlar. Kalıcı depolama sağlayan diskler ise SSD (Solid State Drive) adı verilen yeni nesil diskler de dahil olmak üzere bilgisayar sistemindeki en yavaş bileşenlerden biridir. Diskler sundukları kalıcı depolamanın yanı sıra bir performans penaltısı ile birlikte gelirler. Sistem hafızasından (RAM) yapılan okuma/yazma en hızlı SSD diskten yapılan okuma/yazmadan bile 5-10 kat daha hızlıdır.
Birçok durumda dosya sistemi üzerindeki dosyaların kalıcı olmasını istesek de dosyaların saklanmasının gerekli olmadığı durumlarda performans artışı sağlamak için veya dosyaların diskte saklanmasını direkt olarak istemediğimiz (güvenlik vb sebeplerle) durumlarda dosyaları RAM’de tutmak isteyebiliriz. Linux’ta tmpfs
ve ramfs
RAM üzerinde çalışan dosya sistemleridir. Bu iki dosya sisteminde yaratılan dosyalar bilgisayarın gücü kesildiğinde veya bilgisayar yeniden başlatıldığında RAM'de bulunan diğer bilgilerle birlikte kaybolurlar.
Bazı Linux dağıtımlarında /tmp
, tmpfs
dosya sistemi ile oluşturulan bir RAM diski kullanır. Sistemde çalıştırılan uygulamalar /tmp
klasörü altında geçici olarak kullanmak istedikleri dosyaları açar, yazar ve okurlar. Oluşturulan dosyalar en geç sistem kapandığında silinir. Yan not olarak, /tmp
klasörü bazı kurulumlarda RAM yerine kalıcı disk üzerinde bulunur. /tmp
altındaki dosyalar periyodik olarak temizlenir. Bu sayede /tmp
klasörünü kullanan uygulamalar yarattıkları dosyaların diski doldurması kaygısı olmadan diski kullanırlar.
tmpfs
dosya sistemi temel olarak RAM'i kullanmakla birlikte RAM'de yer kalmadığı zaman diski RAM olarak (swap
) kullanabilir. ramfs
, tmpfs
ile benzer işlevleri yerine getirir fakat ramfs
swap
kullanmaz. ramfs
ile oluşturulan diske toplam kapasitesinden daha fazla dosya yazıldığı zaman tmpfs
ve diğer dosya sistemlerinin aksine disk, sistemdeki RAM bitene kadar büyümeye devam eder. ramfs
içeriğini swap
yapmayıp sürekli RAM'de kalarak performans garantisi sunmasına rağmen kontrolsüz olarak büyümesi sistem stabilitesini tehlikeye atar.
Şimdi bu dosya sistemlerinin kullanım alanlarını inceleyelim. CI (Continuous Integration
) sırasında koşan entegrasyon ve uçtan uca testlerde veri tabanının sürekli olarak yeniden yaratılması ve migrate
edilmesi gerekebilir. Testler sırasında veri tabanının oluşturulduğu disk tmpfs
olarak seçilirse testler hızlandırılıp testlerin süresi kısaltılır. tmpfs
dosya sistemi ile oluşturulan ve birçok Linux dağıtımında bulunan /dev/shm
, prosesler arası iletişimde (IPC - Inter-Process Communication
) kullanılır.
Uygulamanın performans-kritik bölümlerindeki loglamanın uygulama performansını etkilememesi için logu kaybetme riski alınarak tmpfs
kullanılabilir. Log dosyaları belirli aralıklarla merkezi log sistemine (logstash
, vb ile) gönderilebilir ya da kalıcı diske taşınabilir.
Yukarıdaki kullanım senaryolarına ek olarak güvenlik amacı ile de tmpfs
kullanılabilir. Popüler konteyner çözümü Docker
, konteyner dosya sistemine trojan ve virüslerin enjekte edilmesini önlemek için konteynerlerin read-only
modda çalıştırılmasına izin vermektedir. read-only
modda başlatılan konteynerlerın işlevini yerine getirebilmesi için çalışma zamanında bazı dosyalar yaratması gerekebilir. Konteynerlerin yaratacağı dosyaların bulunduğu klasörler tmpfs
ile RAM'de oluşturularak trojanın restartlarda temizlenmesi sağlanabilir.
Yine konteynerlerde host ve konteyner dosya sistemine kaydedilmesi istenmeyen hassas bilgiler (şifre, token, vb) tmpfs
ile oluşturulan diske konarak konteynere iletilir, konteyner durdurulduğunda veya yeniden başlatıldığında bu hassas bilgiler otomatik olarak silinmiş olur.
tmpfs
'in performansını örneklemek amacıyla 2GB büyüklüğündeki tmpfs
'e 1MB büyüklüğünde 1500 dosya yazılmıştır. Aynı işlem sabit disk üzerinde bulunan dosya sisteminde tekrarlanarak performans karşılaştırılmış ve tmpfs
'in 5.6 kat daha hızlı olduğu gösterilmiştir.
Görüldüğü gibi tmpfs
sabit disklere göre yazma işlemlerinde yüksek performans göstermektedir. Aynı performans farkı okuma işlemleri için ise çoğunlukla geçerli değildir çünkü disk ve işletim sistemindeki cache'ler okuma performansını oldukça artırmaktadır.