Linux sistemlerde depolama yönetimi denince akla ilk gelen şeylerden biri dosya sistemi oluşturmaktır. Yeni bir disk eklediğinizde, bir bölüm oluşturduğunuzda ya da bir LVM mantıksal birimi hazırladığınızda, üzerine bir dosya sistemi kurmanız gerekir. Bu noktada ext4, Linux dünyasının en köklü ve güvenilir seçeneklerinden biri olarak öne çıkar. Bugün ext4 dosya sistemi oluşturmayı, ince ayarlarını ve gerçek dünya senaryolarındaki kullanımını ele alacağız.
ext4 Nedir ve Neden Hala Tercih Edilir
ext4, “Fourth Extended Filesystem” yani dördüncü genişletilmiş dosya sistemi anlamına gelir. 2008 yılında Linux çekirdeğine dahil edilmiş ve o günden bu yana pek çok Linux dağıtımının varsayılan dosya sistemi olmuştur. Ubuntu, Debian, CentOS, RHEL gibi kurumsal ve bireysel kullanım odaklı dağıtımların büyük çoğunluğu kurulum sihirbazlarında ext4’ü varsayılan olarak sunar.
Neden hala ext4? diye sorabilirsiniz. Sonuçta btrfs, xfs, zfs gibi daha modern alternatifler de var. Cevap şu: ext4 olgun, kararlı ve son derece iyi belgelenmiş bir dosya sistemidir. Üretim ortamlarında yıllarca sorunsuz çalışır. Araç desteği muazzamdır; fsck, debugfs, tune2fs gibi güçlü yönetim araçları mevcuttur. Veri kurtarma konusunda deneyimli sysadminler ext4 ile çok daha rahat hareket eder.
Öte yandan şunu da belirtelim: ext4 mükemmel değildir. Anlık görüntü (snapshot) desteği yoktur, satır içi sıkıştırma sunmaz. Ama temel dosya sistemi görevlerini güvenilir biçimde yerine getirir.
Ön Hazırlık: Diski Tanıyalım
Sisteme yeni bir disk eklediğinizi varsayalım. Önce mevcut durumu görmemiz lazım.
# Tüm blok aygıtlarını listele
lsblk
# Daha ayrıntılı disk bilgisi
fdisk -l
# Disk UUID ve dosya sistemi bilgisi
blkid
lsblk çıktısında yeni diskinizi göreceksiniz. Genellikle /dev/sdb, /dev/sdc gibi isimler alır. NVMe diskler ise /dev/nvme0n1, /dev/nvme1n1 şeklinde görünür.
Diyelim ki yeni diskimiz /dev/sdb olarak göründü ve üzerinde henüz hiçbir bölüm yok.
Bölümleme: fdisk ve parted
Dosya sistemi oluşturmadan önce diski bölümlemeniz gerekir. İki popüler araç var: fdisk ve parted. Büyük diskler için (2 TB üzeri) GPT bölümleme tablosu zorunlu olduğundan parted daha uygun olur.
# fdisk ile interaktif bölümleme (MBR/GPT)
fdisk /dev/sdb
# parted ile GPT bölümleme tablosu oluşturma
parted /dev/sdb mklabel gpt
# parted ile bölüm oluşturma (tüm diski tek bölüm yap)
parted /dev/sdb mkpart primary ext4 0% 100%
fdisk interaktif modda çalışır. n ile yeni bölüm, p ile birincil bölüm seçer, sektor aralığını belirler ve w ile değişiklikleri diske yazarsınız. Yeni sysadminler için fdisk‘in interaktif yapısı biraz kafa karıştırıcı olabilir ama alışınca oldukça hızlı bir araçtır.
Bölümleme sonrasında çekirdeğin yeni bölüm tablosunu tanıması için:
partprobe /dev/sdb
# ya da
udevadm settle
ext4 Dosya Sistemi Oluşturma: mkfs.ext4
İşte asıl konu burada başlıyor. mkfs.ext4 komutu, belirtilen bölüme ya da blok aygıtına ext4 dosya sistemi yazar. En basit kullanımı şu şekilde:
# Temel kullanım
mkfs.ext4 /dev/sdb1
# Etiket ekleyerek oluşturma (önerilir)
mkfs.ext4 -L "veri-diski" /dev/sdb1
Etiket eklemek neden önerilir? Çünkü /etc/fstab dosyasında diski etiketle tanımlamak, disk sırası değiştiğinde bile sistemin doğru diski bulmasını sağlar. /dev/sdb bugün bir disk iken yarın farklı bir disk olabilir; ama LABEL=veri-diski her zaman doğru yeri işaret eder.
Önemli mkfs.ext4 Parametreleri
- -L etiket: Dosya sistemine isim etiket atar
- -m yüzde: Kök kullanıcı için ayrılan alan yüzdesini belirler (varsayılan %5)
- -b blok-boyutu: Blok boyutunu ayarlar (1024, 2048 veya 4096)
- -i inode-oranı: Her kaç byte’ta bir inode oluşturulacağını belirler
- -N inode-sayisi: Toplam inode sayısını elle belirler
- -E ayarlar: Genişletilmiş seçenekler (stride, stripe-width gibi)
- -j: Harici journal oluşturur
- -O özellikler: Belirli ext4 özelliklerini açar ya da kapatır
- -v: Ayrıntılı çıktı gösterir
- -n: Gerçekte yazmadan simülasyon yapar (ne oluşturulacağını göster)
Gerçek Dünya Senaryosu 1: Veritabanı Sunucusu için Disk Hazırlama
MySQL veya PostgreSQL gibi veritabanları çalıştıran bir sunucuda disk optimizasyonu kritik öneme sahiptir. Veritabanı sunucuları çok sayıda küçük dosya yazmak yerine büyük dosyalar üzerinde çalışır. Bu durumda inode sayısını azaltıp blok boyutunu artırmak performans açısından avantaj sağlar.
# Veritabanı için optimize edilmiş ext4 oluşturma
mkfs.ext4
-L "mysql-veri"
-b 4096
-m 1
-i 16384
-E lazy_itable_init=0,lazy_journal_init=0
/dev/sdb1
Burada ne yaptık:
- -b 4096: 4KB blok boyutu, veritabanı I/O yapısına uygundur
- -m 1: Rezerve alanı %5’ten %1’e düşürdük, veritabanı sunucusunda kök kullanıcı için bu kadar yeterlidir
- -i 16384: Her 16KB’da bir inode, küçük dosya sayısı az olduğundan inode sayısını düşürdük
- lazy_itable_init=0,lazy_journal_init=0: İlk başlatmayı yavaşlatır ama sonrasında sürprizlerle karşılaşmazsınız; üretim sisteminde tercih edilir
Gerçek Dünya Senaryosu 2: Mail Sunucusu için Küçük Dosya Optimizasyonu
Postfix, Dovecot gibi mail sunucuları binlerce küçük dosyayla (her e-posta ayrı dosya) çalışır. Bu durumda inode sayısının yüksek olması gerekir.
# Mail sunucusu için yüksek inode sayılı ext4
mkfs.ext4
-L "mail-depo"
-b 1024
-m 2
-i 2048
/dev/sdc1
Burada -i 2048 ile her 2KB’da bir inode oluşturduk. Bu sayede dosya sistemi çok sayıda küçük dosyayı barındırabilir. Blok boyutunu da 1024 byte’a düşürdük; küçük dosyalar için daha verimli alan kullanımı sağlar.
tune2fs ile Sonradan Ayar Değiştirme
Dosya sistemi oluşturulduktan sonra bazı parametreleri değiştirmek ister misiniz? tune2fs tam da bunun için var.
# Mevcut dosya sistemi bilgilerini görüntüle
tune2fs -l /dev/sdb1
# Rezerve alan yüzdesini değiştir
tune2fs -m 2 /dev/sdb1
# Etiket değiştir
tune2fs -L "yeni-etiket" /dev/sdb1
# Otomatik fsck aralığını devre dışı bırak (üretim sistemlerinde)
tune2fs -c 0 -i 0 /dev/sdb1
# Hata durumunda davranışı değiştir (remount-ro, continue, panic)
tune2fs -e remount-ro /dev/sdb1
tune2fs -l komutu, dosya sisteminin tüm süperblok bilgilerini döker. Oluşturulma tarihi, son bağlama tarihi, toplam blok sayısı, boş blok sayısı, inode bilgileri… Bir diski devraldığınızda ya da sorun giderirken bu çıktıya çok başvuracaksınız.
Bağlama Noktası Oluşturma ve Mount Etme
Dosya sistemi hazır, şimdi onu bağlamamız lazım.
# Bağlama noktası oluştur
mkdir -p /mnt/veri-diski
# Geçici olarak bağla
mount /dev/sdb1 /mnt/veri-diski
# Etiketle bağlama
mount -L "veri-diski" /mnt/veri-diski
# UUID ile bağlama
UUID=$(blkid -s UUID -o value /dev/sdb1)
mount UUID="$UUID" /mnt/veri-diski
# Bağlı dosya sistemlerini kontrol et
df -hT
mount | grep sdb1
/etc/fstab ile Kalıcı Bağlama
Sunucu yeniden başladığında diskin otomatik bağlanması için /etc/fstab dosyasını düzenlememiz gerekir. UUID kullanmak en güvenli yaklaşımdır.
# Önce UUID'yi öğren
blkid /dev/sdb1
# UUID'yi fstab'a ekle
echo "UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/veri-diski ext4 defaults,noatime 0 2" >> /etc/fstab
# fstab'ı test et (sistemi yeniden başlatmadan)
mount -a
# Hata yoksa kontrol et
df -hT | grep veri-diski
fstab satırındaki noatime seçeneği önemlidir. Varsayılan olarak Linux, bir dosyaya her erişildiğinde erişim zamanını günceller. Bu durum, özellikle yoğun okuma yapılan sistemlerde gereksiz yazma işlemine yol açar. noatime bu davranışı devre dışı bırakır ve disk performansını artırır.
Diğer faydalı mount seçenekleri:
- defaults: rw, suid, dev, exec, auto, nouser, async seçeneklerini kapsar
- noatime: Erişim zamanı güncellemesini kapatır
- nodiratime: Dizin erişim zamanı güncellemesini kapatır
- relatime: Erişim zamanını yalnızca değiştirilme zamanından önceyse günceller
- errors=remount-ro: Hata durumunda salt okunur olarak yeniden bağlar
- discard: SSD’ler için TRIM desteği etkinleştirir
- data=ordered: Varsayılan journal modu, veri bütünlüğü sağlar
- data=writeback: Daha hızlı ama daha az güvenli journal modu
Gerçek Dünya Senaryosu 3: LVM Üzerinde ext4
Büyük sistemlerde diskleri doğrudan kullanmak yerine LVM (Logical Volume Manager) üzerinde çalışmak çok daha esnek bir yönetim sunar. Disk alanı dolduğunda anında genişletebilirsiniz.
# LVM physical volume oluştur
pvcreate /dev/sdb /dev/sdc
# Volume group oluştur
vgcreate vg-depo /dev/sdb /dev/sdc
# Logical volume oluştur (200GB)
lvcreate -L 200G -n lv-veri vg-depo
# LVM birimi üzerine ext4 oluştur
mkfs.ext4 -L "lvm-veri" /dev/vg-depo/lv-veri
# Bağla
mkdir -p /mnt/lvm-veri
mount /dev/vg-depo/lv-veri /mnt/lvm-veri
# Sonradan boyutu artır (online genişletme)
lvextend -L +50G /dev/vg-depo/lv-veri
resize2fs /dev/vg-depo/lv-veri
resize2fs komutu, ext4 dosya sistemini bağlıyken dahi genişletebilir. Bu özellik üretim sistemlerinde çok değerlidir; servis kesintisi olmadan disk alanı ekleyebilirsiniz.
Dosya Sistemi Sağlık Kontrolü: fsck
fsck (file system check), ext4 dosya sistemlerindeki tutarsızlıkları tespit edip düzelten araçtır. Disk üzerindeyken çalıştırmak tehlikelidir; önce diski unmount etmek gerekir.
# Disk bağlantısını kes
umount /mnt/veri-diski
# Temel sağlık kontrolü
fsck.ext4 /dev/sdb1
# Otomatik düzeltme modu (interaktif soru sormadan)
fsck.ext4 -y /dev/sdb1
# Ayrıntılı çıktıyla kontrol
fsck.ext4 -v /dev/sdb1
# Gerçekten yazmadan simülasyon (ne düzelteceğini göster)
fsck.ext4 -n /dev/sdb1
Canlı sistemde kök dosya sistemi kontrol edilmek istendiğinde sistem tek kullanıcı moduna alınmalı ya da bir canlı USB ile boot edilmelidir. /etc/fstab‘daki son sütundaki rakam, boot sırasında fsck kontrolü için kullanılır: 0 kontrol etme, 1 kök dosya sistemi, 2 diğer dosya sistemleri.
debugfs ile İleri Düzey İnceleme
debugfs, ext4 dosya sisteminin iç yapısını interaktif olarak incelemenize ve hatta kısmen bozulmuş dosya sistemlerinden veri kurtarmanıza imkan tanır.
# debugfs interaktif mod
debugfs /dev/sdb1
# debugfs içinde kullanılabilecek bazı komutlar:
# ls / -> kök dizin içeriği
# stat dosya -> dosya istatistikleri
# lsdel -> silinmiş dosyaları listele
# dump inode hedef -> inode içeriğini dışa aktar
# quit -> çıkış
Yanlışlıkla silinen bir dosyayı kurtarmaya çalışıyorsanız debugfs ile lsdel komutunu kullanıp silinmiş inode’ları bulabilir, ardından dump ile dosyayı kurtarmaya çalışabilirsiniz. Garanti değil ama çoğu zaman işe yarar.
ext4 Özelliklerini Yönetme
ext4, açılıp kapatılabilen çeşitli özellikler sunar. tune2fs -O ile bu özellikleri yönetirsiniz.
# Mevcut özellikleri gör
tune2fs -l /dev/sdb1 | grep "Filesystem features"
# extent özelliğini etkinleştir (büyük dosyalar için daha verimli)
tune2fs -O extents /dev/sdb1
# dir_index özelliği (büyük dizinler için htree indeksi)
tune2fs -O dir_index /dev/sdb1
# sparse_super (süperblok kopyalarını azalt, büyük dosya sistemleri için)
tune2fs -O sparse_super /dev/sdb1
Bir özelliği devre dışı bırakmak için başına ^ koyarsınız: tune2fs -O ^has_journal /dev/sdb1. Ancak journal’ı devre dışı bırakmak güvenlik açısından tehlikelidir; sadece performansın kritik olduğu geçici depolama alanlarında düşünebilirsiniz.
Performans İzleme
Dosya sistemi oluşturduktan sonra performansı ölçmek iyi bir pratiktir. Böylece sorun çıktığında karşılaştırma yapacak temel veriniz olur.
# Temel disk yazma hızı testi
dd if=/dev/zero of=/mnt/veri-diski/test.img bs=1G count=1 oflag=direct
# Okuma hızı testi
dd if=/mnt/veri-diski/test.img of=/dev/null bs=1G count=1 iflag=direct
# Dosya sistemi istatistikleri
tune2fs -l /dev/sdb1 | grep -E "Block count|Free blocks|Inode count|Free inodes"
# Gerçek zamanlı I/O izleme
iostat -xz 1 /dev/sdb
dd testlerindeki oflag=direct ve iflag=direct parametreleri, önbelleği devre dışı bırakarak gerçek disk hızını ölçmenizi sağlar. Önbellekli testler her zaman daha yüksek sonuç verir ama gerçeği yansıtmaz.
Sık Yapılan Hatalar ve Çözümleri
Hata 1: “Structure needs cleaning” Bu hata, dosya sisteminde tutarsızlık olduğunu gösterir. Çözüm: fsck.ext4 -y /dev/sdb1 çalıştırın.
Hata 2: “No space left on device” ama df boş alan gösteriyor Büyük olasılıkla inode’lar dolmuştur. Kontrol: df -i /mnt/veri-diski. Çözüm: Küçük dosyaları temizleyin ya da yeni dosya sistemi oluştururken daha yüksek inode oranı belirleyin.
Hata 3: “Read-only file system” Dosya sistemi hata nedeniyle salt okunur moda geçmiştir. dmesg | tail -50 ile hata mesajını bulun, ardından unmount edip fsck çalıştırın.
Hata 4: UUID çakışması Bir diski kopyaladığınızda UUID aynı kalır, bu çakışmaya neden olur. Çözüm: tune2fs -U random /dev/sdb1 ile yeni UUID atayın.
Sonuç
ext4, sysadmin hayatının ayrılmaz bir parçası olmaya devam edecek. Belki btrfs ya da ZFS gibi modern dosya sistemleri daha fazla özellik sunuyor, ama ext4’ün olgunluğu, araç ekosistemi ve topluluk desteği onu hala ilk tercih haline getiriyor.
Bu yazıda ele aldıklarımızı kısaca özetleyelim: mkfs.ext4 ile temel ve gelişmiş dosya sistemi oluşturma, veritabanı ve mail sunucuları için özel optimizasyonlar, tune2fs ile sonradan parametre değiştirme, LVM üzerinde ext4 kullanımı, fsck ile sağlık kontrolü ve debugfs ile ileri düzey inceleme.
Üretim ortamında her zaman yeni bir diski bağlamadan önce tune2fs -l çıktısını kaydedin, fstab değişikliklerini mount -a ile test edin ve kritik veriler için düzenli yedekleme planı oluşturun. ext4 sağlam bir araçtır ama hiçbir dosya sistemi yedeklemenin yerini tutmaz.
Bir sonraki yazıda ext4 ile LVM snapshot yönetimini ya da btrfs’e geçiş senaryolarını ele alabiliriz. Sorularınızı yorumlarda bırakın!