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.