Anasayfa Makale Linux Dosya Sistemlerini Anlamak: Ext4 Ve Ötesi

Linux Dosya Sistemlerini Anlamak: Ext4 Ve Ötesi

Linux platformlarında kullanılan ext4 dosya sisteminin özelliklerini, ext3 dosya sistemi ile farklarını, daha önce kullanılmış dosya sistemlerini ve dosya sistemlerinin geleceğini bu yazımızda bulabilirsiniz.

Modern Linux dağıtımlarının çoğu varsayılan olarak ext4 dosya sistemi ile birlikte geliyor. Geçmişte varsayılan olarak kullanılan dosya sistemleri ise ext3, ext2 ve çok daha geçmişe gidilirse ext idi.

Linux platformu ya da dosya sistemleri konusunda bilgi edinmeye henüz başladıysanız ext4 dosya sisteminin ext3 dosya sistemine göre ne yenilikler getirdiğini merak edebilirsiniz. Ayrıca ext4’ün halen geliştirilip geliştirilmediğini ya da btrfs, XFS, ZFS gibi alternatif dosya sistemlerini de merak ediyor olabilirsiniz.

Dosya sistemleri ile ilgili her şeyi tek bir yazının içinde toplamak mümkün değil. Ancak bu yazıda sizlere olabildiğince Linux dosya sistemlerinin gelişimini, şu an nerede olduğumuzu ve gelecekte neler olabileceği konusunda bilgi vereceğiz.

Ext Dosya Sisteminin Geçmişi

MINIX Dosya Sistemi

Ext dosya sisteminden önce MINIX dosya sistemi vardı. MINIX aynı zamanda IBM PC/AT mikro bilgisayarları için geliştirilen UNIX benzeri küçük bir işletim sistemiydi. Andrew Tannenbaum tarafından eğitim amacıyla geliştirilen bu dosya sisteminin kaynak kodu yazılı haliyle 1987 yılında paylaşıldı.

1980’li yılların ortalarında kullanılan IBM PC/AT, MBlairMartin, CC BY-SA 4.0

O zaman MINIX kaynak kodlarına ulaşmak mümkün olsa da, işletim sistemi aslında ücretsiz değildi. Tannebaum’un kitabının yayıncıları MINIX işletim sisteminin çalıştırılması için 69$ lisans ücreti istiyorlardı ve bu ücret kitabın ücretine dahildi.

MINIX işletim istemine dönüşüm hızlı gerçekleşti ve Tannenbaum’un asıl amacı olan işletim sistemlerinin kodlanmasını öğretmeyi de aştı. 1990’lı yıllara kadar ve hatta sonrasında dünyadaki birçok üniversitede bu işletim sistemini bulabilmeniz mümkündü. Linux’un ardındaki deha olan Linus Torvalds da ilk olarak 1991 yılında duyurulan ve 1992’de özgür yazılım lisansı altında yayımlanan orijinal Linux kernelini, MINIX işletim sistemini kullanarak geliştirdi.

MINIX dosya sisteminden biraz daha bahsedecek olursak, ilk Linux sürümlerinde de bu dosya sistemi kullanıldı. Bu dosya sistemi sadece 14 karaktere kadar olan dosya isimlerini destekliyor ve sadece 64 MB adresleyebiliyordu. 1991 yılında ise standart sabit diskler 40-140 MB kapasitesindeydi. Linux’un daha iyi bir dosya sistemine ihtiyaç duyduğu açıktı.

Ext

Linus Torvalds henüz yeni olan Linux kerneli üzerinde uğraşırken, Rémy Card ilk ext dosya sistemi üzerinde çalıştı. Linux’un duyurulmasından yalnızca 1 yıl sonra, 1992’de ext dosya sistemi MINIX dosya sisteminin en büyük problemlerini çözdü.

1992’deki ext dosya sistemi Linux kernelindeki yeni sanal dosya sistemi katmanını kullandı. Ext dosya sistemi 2 GB’a kadar adresleme yapabiliyor ve 255 karakterlik dosya isimlerini destekliyordu.

Ext dosya sisteminin saltanatı çok üzün sürmedi. İlkel zaman damgalama desteğine sahip bu dosya sistemi dosya başına sadece bir zaman damgası destekliyordu. Günümüz dosya sistemlerinde ise dosya başına 3 zaman damgası (dosya oluşturma, erişim, düzenleme) damgası yer alıyor. Rémy Card, ext dosya sistemindeki eksikleri fark etti ve ext2 dosya sistemini 1 yıl sonra ortaya çıkardı.

Ext2

Ext2 dosya sistemi, ext dosya sisteminin aksine, BSD’nin Berkeley Fast File System dosya sistemi gibi ticari düzeyde tasarlandı. Ext2 maksimum dosya boyutu olarak gigabayt ve dosya sistemi olarak da terabayt düzeyine çıktı. Bu özellikleri nedeniyle hızlı bir şekilde sahiplenildi. Linux kerneli ve MINIX ile birlikte, hatta üçüncü parti modüller ile birlikte MacOS ve Windows’ta da kullanıma uygun hale geldi.

Ext2 dosya sisteminin de çözmesi gereken sorunları vardı. 1990’lardaki diğer dosya sistemleri gibi ext2 de eğer sistem çökerse ya da diske veri yazılırken güç kesintisi olursa sistemi kararsız durumda bırakıyordu. Kaydedilen dosyalarla ilgili olmayan onlarca dosyada da hasar oluşuyor, hatta tüm dosya sisteminin kullanımı tehlikeye giriyordu. Ayrıca disk parçalanması (Tek bir dosyanın disk üzerinde birden fazla alanda bulunması) yüzünden ciddi performans kayıpları yaşanıyordu.

Ext3

1998’de Stephen Tweedie, ext2 dosya sistemini belirgin şekilde geliştirmek için çalıştığını duyurdu. Bu yeni dosya sistemi ext3 oldu ve 2001’de Linux 2.4.15 kerneli ile kullanıma başladı.

Ext3 ve 1990’ların sonlarına doğru ortaya çıkan diğer dosya sistemleri, (Microsoft’un NTFS dosya sistemi gibi) ext2 için bahsettiğimiz yazma sırasında oluşan güç kaybı ile birlikte ortaya çıkan ciddi veri kaybının önüne geçmek için günlükleme (journaling) sistemini kullanmaya başladı. Günlük, yazma geçişleri sırasında verilerin depolandı disk üzerindeki özel bir bölümdür. Diske yazma işlemi bittiğinde, verinin günlük kısmındaki yeri dosya sisteminin kendisine tahsis edilir.

Eğer bu tahsis etme işleminden önce sistem çökerse, bilgisayar yeniden başlatıldığında sistem bunu tamamlanmamış bir geçiş olarak kabul eder ve yapılan değişiklikleri hiç olmamış gibi geri alır. Bu sayede üzerinde çalışılan veri kaybolsa bile, dosya sisteminin kendisi sağlam olarak kalıyor ve diğer veriler de güvende oluyor.

Ext3 dosya sistemi Linux kerneline kodlanırken 3 düzeyde kullanıma sunuldu; journal, ordered ve writeback.

  • Journal, en düşük disk modu olarak tanımlıdır. Hem veri, hem de üst veri, dosya sistemine işlenmeden önce journal bölümüne yazılır. Bu yazılan dosyanın bütünlüğünü ve dosya sisteminin tamamını garanti altına alsa da, performansı ciddi ölçüde azaltıyordu.
  • Ordered, birçok Linux dağıtımında varsayılan olarak kullanılan moddur. Bu modda üst veri journal bölümüne yazılır ancak veri doğrudan dosya sistemine bağlanır. İsminden de anlaşılacağı gibi bu işlemler sabit bir sıra ile gerçekleşir. Önce üst veri journal’e yazılır, ardından veri dosya sistemine yazılır ve bu veriyle ilişkili üst veri en son dosya sistemine bağlanır. Bu sayede çökme anında tamamlanmamış yazma işlemi ile ilgili üst veri journal kısmında kalır. Dosya sistemi journal’e geri döndüğü zaman bu tamamlanmamış yazmayı temizler. Böylelikle çökme anında aktif olarak yazılan veri ya da veriler bozulsa da, dosya sisteminin kendisi ve aktif olarak yazılmayan dosyalar garanti altına alınır.
  • Writeback, üçüncü ve en güvensiz journal modudur. Bu modda veri günlüklenmez, sadece üst veri günlüklenir. Ordered moddan farklı olarak üst veri ya da veri maksimum performansı alacak sıraya göre yazılır ve sabit bir düzen yoktur. Bu sayede belirgin performans artışı sağlansa da veriler daha az güvende oluyor. Dosya sisteminin güvenliği halen korunsa da, çökme sırasında ya da öncesinde yazılan veriler kayba ve bozulmaya açık hale geliyor.

Ext2 dosya sisteminde olduğu gibi ext3 dosya sistemi de 32-bit iç adresleme özelliğini kullanıyor. Bu sayede 4 KiB’lık bir blok boyutuyla, 2 tebibayt maksimum dosya boyutu ve 16 tebibayt maksimum dosya sistemi boyutunu destekliyor.

Ext4

Daha sonra ext3 projesinin baş geliştiricisi olan Theodore Ts’o, 2006 yılında ext4 dosya sistemini duyurdu. 2 yıl sonra da Linux kernelinin 2.6.28 sürümüyle birlikte kullanıma sunuldu. Ts’o, ext4’ü geçici bir yenilik olarak tanımladı. Ext3’e göre bazı yenilikler katsa da halen eski bir teknolojiyi kullanılıyor. Ts’o, bu dosya sisteminin yeni nesil bir dosya sistemiyle değiştirilmesini bekliyor.

Ext4 ve ext3 Dosya Sistemleri Arasındaki Farklar

Geri Uyumluluk

Ext4 dosya sistemi, ext3 dosya sistemi ile mümkün olduğunca geri uyumlu şekilde tasarlandı. Bu sayede Ext3 dosya sisteminde ext4 dosya sistemine direkt yükseltme mümkün hale geldi ve ext4 sürücüsünün Ext3 dosya sistemini ext3 modunda otomatik olarak bağlamasına olanak sağladı. Bu sayede iki ayrı sürücü bulundurma zorunluluğu ortaya çıkmadı.

Daha Büyük Dosya Sistemi Desteği

Ext3 dosya sistemi bahsettiğimiz gibi 32-bit adresleme kullanıyor ve 2 tebibayt maksimum dosya boyutu, 16 tebibayt maksimum dosya sistemi boyutunu destekliyor. Ancak bu 4 KiB blok boyutuyla mümkün ve bazı ext3 dosya sistemleri daha küçük blok boyutları kullanıyor ve bu yüzden maksimum kapasite daha da sınırlanıyor.

Ext4 dosya sistemi ise 48-bit iç adresleme kullanıyor. Bu sayede teorik olarak 16 tebibayt maksimum dosya boyutu ve 1,000,000 tebibayt (1 EiB) dosya sistemini destekliyor. Ext4 dosya sisteminin ilk uyarlamaları başta 16 TiB maksimum dosya sistemine sınırlanmış olsa da 2011 yılında e2fsprogs direkt olarak bu boyuttan büyük ext4 dosya sistemlerinin oluşturulmasına destek sağladı. Örnek olarak Red Hat Enterprise Linux resmi olarak 50 TiB’a kadar dosya sistemlerine destek sağlıyor ve 100 TiB’dan büyük bölümlerinin oluşturulmasını önermiyor.

Alan Tahsisi Geliştirmeleri

Ext4 dosya sistemi depolama bloklarının diske yazılmadan önce tahsisiyle ilgili geliştirmeleri getirdi. Bu sayede hem okuma, hem de yazma performansı belirgin şekilde arttı.

  • Extents: Bu özellik ile 128 MiB’a kadar bitişik fiziksel bloklar tanımlandı. Bu bloklar kullanıldığında dosya ile ilgili düğümlerin sayısı azalıyor. Böylelikle parçalanmalar azalıyor ve büyük dosyalar yazılırken performans artıyor.
  • Çoklu Blok Tahsisi: Ext3 dosya sisteminde her yeni blok tahsisinde bir tahsisleyici kullanılıyordu. Bu yüzden aynı anda birden fazla yazma işlemi gerçekleştiğinde parçalanma daha çok ortaya çıkıyordu. Ext4’de ise gecikmiş tahsis mekanizması kullanarak birlikte yazmalara daha iyi uyum gösteriyor ve yazma işlemi gerçekleşmeden önce blokların tahsisiyle ilgili daha iyi karar veriyor.
  • Sürekli Ön Tahsis: Çoğu dosya sistemi bir dosya için disk alanını ön tahsis etmek için bloklar oluşturulduğu zaman 0’lar yazmak zorunda. Ext4 dosya sistemi ise fallocate() komutunu kullanarak daha önce yazma işlemine gerek kalmadan gerekli alanın varlığını garanti ediyor. Bu sayede performans hem yazmada, hem de yazılan verinin daha sonra okunmasında belirgin şekilde artıyor.
  • Gecikmiş Tahsis: Çoklu blok tahsisi kısmında da bahsettiğimiz gibi ön bellekteki verilerin birikmesi beklenerek blokların tahsisi ile ilgili daha akıllı çözümler üretilmesini sağlıyor. Ancak fsync() komutunun özellikle kullanılmadığı durumlarda veri kaybı riskini arttırıyor.

Sınırsız Alt Dizinler

Ext3 dosya sistemi toplam 32,000 alt dizin desteği ile sınırlıydı. Ex4 dosya sistemi ise bunu sınırsız hale getiriyor. 2.6.23 kerneliyle birlikte ext4 HTree sistemini kullanarak çok sayıdaki alt dizinin işlenmesi sırasında ortaya çıkan performans kaybını azaltıyor.

Günlük Sağlaması

Ext3 dosya sisteminde günlüklerin sağlaması mümkün değildi. Bu özellikle kernelin direkt kontrolünün olmadığı, cihazlara ya da kontrolcülere ait ön belleklerde sorun çıkarabiliyordu. Günlüklerin sağlamasının yapılmasıyla birlikte dosya sistemi herhangi bir çökmeden sonra geçersiz ya da kontrol dışına çıkmış girişleri tanıyabiliyor. Bu sayede dosya sistemi için oluşabilecek ek hasarın önüne geçiliyor.

Hızlı Dosya Sistemi Kontrolü

Ext3 dosya sisteminde, fsck komutu çalıştırıldığında tüm dosya sistemi (silinmiş ya da boş dosyalar dahil) kontrolden geçiriliyordu. Ext4 dosya sisteminde ise tahsis edilmemiş blokların ve bölümlerin atlanmasına olanak sağlanıyor.

Geliştirilmiş Zaman Damgaları

Ext3 ile birlikte saniyeler düzeyinde zaman damgaları kullanıyordu. Bu çoğu kullanım için yeterli olsa da kritik görevleri yürüten uygulamalar için yetersiz kalabiliyordu. Ext4 dosya sistemi nanosaniyeler düzeyinde zaman damgaları desteği sunuyor. Ayrıca Ext3 dosya sistemi 18 Ocak 2038’den sonraki tarihler için yeterli veri depolamıyor, ancak Ext4 dosya sistemi 2446 yılına kadar destek sunuyor.

Disk Bağlıyken Birleştirme Seçeneği

Ext2 ve ext3 dosya sistemleri disk bağlıyken disk birleştirme yapılmasına izin vermiyordu. Bu sistemlerde buna yönelik çözümler getirilmeye çalışılsa da bunlar pek başarılı olamadı. Ext4 dosya sistemi ise yeni e4defrag modülü ile disk bağlıyken birleştirmeye olanak sağlayan, kernel destekli, dosya sistem farkındalığı olan bir birleştirme desteği getirdi.

Devam Eden ext4 Geliştirme Çalışmaları

Ext4, her ne kadar geliştiricisi tarafından geçici bir çözüm olarak ortaya konulsa da bu dosya sisteminin yerini alacak yeni nesil sistemler henüz hazır olmadığı için varlığını korumaya önemli bir süre devam edecek. Bu yüzden ext4’ün olası yeni sürümlerinde bazı yenilikler üzerinde çalışılıyor.

Üst Veri Sağlaması

Ext4 dosya sistemi superblock adı verilen ve dosya sisteminin üst verisi olarak adlandırılan bir bölüme sahip. Bu superblock’da dosya sistemindeki blok sayısı, boş blokların sayısı, bağlanma zamanı, yazma zamanı ve daha birçok bilgi yer alıyor. Bu veriler önemli olduğu için ilk kopyası primer superblock olarak adlandırılır ve dosya sistemi bağlandığı zaman okunur. Ayrıca her blok grubunda bu superblock’ın bir yedeği bulunur.

Ama bu primer superblock bozulur ve yerine yedeği konulması gerektiğinde bunu kullanıcıların fark edip düzeltmesi mümkün olmuyor. BTRFS ve ZFS gibi yeni nesil dosya sistemlerinde block başına sağlama gibi yeni yöntemler getirilmiş olsa da ext4 dosya sisteminde “hiç yoktan iyidir” mantığıyla üst veri sağlaması getirilmesi üzerinde çalışılıyor.

Gelişmiş Kota Desteği

Ext2 dosya sisteminden itibaren kullanıcıların disk kaynaklarını kullanımına kısıtlama getirebilen kota özelliği mevcuttu. Ancak bu kota desteğinin performans odaklı ve daha doğru şekilde yapılıp kernel destekli hale getirilmesi üzerinde çalışılıyor.

Büyük Tahsis Blokları

Ext4 dosya sistemi şu an 4K veri bloğu ile sınırlı. Özellikle bazı yeni SSD’lerle birlikte 8K donanımsal veri bloklarının ortaya çıkmasıyla bu sınırlama çok daha belirgin hale geldi. Daha büyük veri blokları parçalanmayı azaltabilir ve performansı artırabilir. Tabii ki bu artış bloklarda boş kalan alanın artmasından feragat edilerek yapılabilir.

Ext4 Dosya Sisteminin Pratikteki Sınırları

Ext4 sağlam ve stabil bir işletim sistemi. Bu yüzden çok sayıda kullanıcı tarafından kök dizini için bile kullanılmaya başladı. Ancak ext4 dosya sistemin de sınırları mevcut ve bu dosya sisteminden beklemememiz gereken bazı şeyler var.

Ext4 teorik olarak 1,000,000 TiB boyutunda veri adresleyebilse de 50-100 TiB üzerinde problemler ortaya çıkmakta ve dosya sisteminin kullanılabilirliği azalmaktadır.

Ext4 verilerinizin sağlamlığını garanti edemez. Her ne kadar günlükleme sistemi ext3 dosya sisteminden beri büyük gelişme kat edilmesini sağlasa da, veri kaybına sebep olabilecek temel sebepler konusunda bu dosya sisteminin de yapabileceği bir şey yok. (Hatalı donanım, ışınların etkisi, zamanla ortaya çıkan hasarlar gibi.)

Bu iki durum göz önünde bulundurulursa, ext4’ü saf bir dosya sistemi olarak tanımlamak daha doğru olur. Ext4 bir depolama birimi kontrolcüsü değildir. Birbirinin aynısı iki tane disk elimizde olsa bile ext4 dosya sisteminin bozuk verileri diğer diskten alıp bunu kullanabilmesi mümkün değil.

Teorik olarak dosya sistemini ve depolama birimi kontrol sistemini farklı katmanlara ayırmak ve tamir ve hasar tespit mekanizmalarını korumak mümkün olsa da, günümüz depolama sistemleri bu şekilde tasarlanmıyor ve yeni tasarımlar için engel oluşturuyor.

Alternatif Dosya Sistemleri

Bu kısıma başlamadan önce bir uyarıda bulunmak gerek. Alternatif dosya sistemleri, Linux dağıtımının temel kerneli içinde doğrudan desteklenmeyip yer alamayabilir.

Bir dosya sistemi güvenli olsa bile, kök dosya sisteminde kullanıldığında kernel yükseltmesi sırasında oluşabilecek herhangi bir durum ciddi sıkıntılara sebep olabilir. Eğer oluşabilecek herhangi bir sorunla boğuşma fikri hoşunuza gitmiyor ve yeterince tecrübeniz yoksa, kök dizininde alternatif dosya sistemlerini kullanmamanız gerekir.

Linux dağıtımınızın desteklemediği alternatif dosya sistemlerini kullanmanız için güzel sebepleriniz olabilir. Ama bu birimleri sistem çalışır ve kullanılır hale gördükten sonra bağlamanız şiddetle tavsiye edilir. Örnek olarak ext4 kök dosya sistemine sahip olup diğer verilerinizi zfs ya da btrfs havuzunda toplamak isteyebilirsiniz.

XFS

XFS, Linux platformu altında kullanılan ext-olmayan dosya sistemlerinin başını çekiyor. 64-bit ve günlükleme özelliklerini sahip bu dosya sistemi 2001 yılından itibaren Linux kerneli içinde yer almaya başlamıştır. Çok sayıda yazmanın olduğu ve büyük dosya sistemlerinde yüksek performans sunmaktadır.

Red Hat Enterprise Linux’da RHEL 7 örneğinde olduğu gibi varsayılan dosya sistemi XFS haline gelmeye başlamıştır. Ev ve küçük işletmeler için dezavantajları mevcuttur. Örneğin var olan XFS dosya sistemini yeniden boyutlandırmak oldukça zordur. Hatta çoğu durumda yeni bir tane oluşturup verilerinizi oraya kopyalamak daha mantıklı olabilir.

XFS dosya sistemi performanslı ve stabil olmasına rağmen, son kullanıcılar tarafından ext4 yerine kullanılması için yeterli bir fark ortaya çıkarmıyor. 50 TiB üzerinde verilerle uğraşıyorsanız durum farklı olabilir.

XFS, yeni nesil dosya sistemi olarak tarif edilemez. Ext4 örneğinde olduğu gibi, daha iyi bir şey ortaya konana kadar ortaya çıkarılmış geçici bir iyileştirmedir.

ZFS

ZFS, Sun Microsystems tarafından geliştirildi ve zettabayttan (1 trilyon gigabayt) dolayı bu ismi aldı. Teorik olarak bu dosya sisteminin bu kadar büyük bir veriyi adreslemesi mümkün.

Yeni nesil dosya sistemi olarak tariflenebilecek ZFS, birim yönetimi özelliği de sunuyor. Yani aynı dosya sistemi altındaki birden fazla depolama cihazını adreslemesi mümkün. Bunun dışında çok yüksek tutarlılıkta hasar tespitine olanak sağlayan blok düzeyli kriptografik sağlama, otomatik hasar düzeltme, yüksek hızlı cloud kopyalama, dahili sıkıştırma ve daha birçok özelliğe sahip.

ZFS’nin Linux açısından en büyük problemi lisans konusu. Linux’un GPL lisansı ile bazı konularda çatışan yarı izinli CDDL lisansı kullanan ZFS’nin Linux kerneli içinde kullanılmasına yönelik farklı görüşler ve düşünceler mevcut. Ancak 2016 yılından beri Canonical (Ubuntu’nun arkasındaki şirket) ZFS koduna kernelinde yer veriyor ve şu ana kadar herhangi bir yasal sıkıntıyla karşılaşmadı.

Btrfs

Btrfs dosya sistemi Chris Mason tarafından 2007 yılında duyuruldu. Btrfs genel olarak ZFS ile aynı hedefleri taşıyor ve benzer özellikleri sunuyor.

2018 itibariyle btrfs tek diskli dosya sistemlerinde standart olarak kullanılabilecek kadar pratik bir hale geldi, ancak birim yöneticisi olarak güvenilir olmaktan uzak. Ext4, XFS, ZFS ile kıyaslandığında performans problemleri mevcut. Aynı zamanda sahip olduğu yeni nesil özellikler bazen hatalara yol açabiliyor ve bu durumun ciddi anlamda azalmış performanstan veri kayıplarına kadar giden bir yelpazede sonuçları oluyor.

Btrfs’nin gelecek durumu belirsiz. SUSE Enterprise Linux 2015’te varsayılan dosya sistemi olarak kullanmaya başlansa da, Red Hat 2017’de RHEL 7.4’ten itibaren btrfs desteği sunmayacağını açıkladı. Zaten bu sürümden önce sunduğu destek de tek diske sahip kullanımlar içindi.

Bu yazı Understanding Linux filesystems: ext4 and beyond, CC BY-SA 4.0 makalesi temel alınarak hazırlanmıştır.