TEKNİK YAZI / Backend Sistemleri

fsck: Linux Dosya Sisteminin Doktoru

fsck ile Linux dosya sistemi tutarlılık kontrolünü, bağlı disk risklerini, güvenli kurtarma sırasını ve dosya sistemine özgü sınırları öğrenin.

fsck, Linux dosya sistemlerindeki tutarsızlıkları denetlemek ve desteklenen durumlarda onarmak için kullanılan araç ailesidir. Yanlış aygıtta veya bağlı bir dosya sisteminde çalıştırılması veri kaybı riskini artırabileceğinden, komuttan önce dosya sistemi türünü, aygıt yolunu ve yedek durumunu doğrulamak gerekir.

fsck Nedir? Ne İşe Yarar?

fsck, “File System Consistency Check” kelimelerinin kısaltması. Türkçesiyle dosya sistemi tutarlılık kontrolü. Windows’taki chkdsk’nın Linux karşılığı diyebiliriz. Ama çok daha güçlü!

Elektrik kesintisi, sistem çökmesi, donanım arızası veya hatalı sektörler dosya sistemi metadatasında tutarsızlık oluşturabilir. fsck ve dosya sistemine özgü alt araçlar bu yapıları denetler; onarım kapasitesi ve güvenli çalışma koşulları kullanılan dosya sistemine göre değişir.

Ne Zaman fsck Kullanmalıyız?

Otomatik çalıştığı durumlar:

Manuel çalıştırmanız gereken durumlar:

fsck’nin Çalışma Mantığı

fsck dosya sistemini katman katman kontrol ediyor:

Superblock kontrolü: Dosya sisteminin meta verilerini barındıran superblock’u kontrol eder. Bozuksa backup’tan restore eder.

Inode kontrolü: Her dosya ve dizinin inode’unu kontrol eder. Orphan inode’ları bulur, link count’ları düzeltir.

Block kontrolü: Used/free block’ları kontrol eder. Duplicate block’ları tespit eder, bad block’ları işaretler.

Directory structure: Dizin yapısını kontrol eder. Loop’ları tespit eder, kayıp dizinleri lost+found’a taşır.

Reference counting: Her dosyanın kaç yerden referans edildiğini kontrol eder.

Kritik Kural: Unmounted Filesystem!

ÇOK ÖNEMLİ: fsck’yi ASLA mounted bir filesystem’de çalıştırmayın! Veri kaybına yol açar. Root partition için single user mode veya live USB kullanın.

Basit Kullanım Örnekleri

İlk adım her zaman aygıtı ve dosya sistemi türünü doğrulamaktır. Yanlış aygıt seçmek bu araçla yapılabilecek en pahalı hatadır:

lsblk -f
sudo blkid /dev/sda1

Salt okunur denetim:

# Hiçbir değişiklik yazmaz, yalnızca rapor eder
sudo fsck -n /dev/sda1

# Ayrıntılı çıktı
sudo fsck -v /dev/sda1

-n seçeneği diske yazmaz, fakat bu onu her koşulda anlamlı kılmaz. Bağlı bir dosya sistemi denetim sürerken altından değişmeye devam eder; bu durumda üretilen hata raporu büyük ölçüde gerçeği yansıtmaz. Anlamlı bir sonuç için dosya sistemi ayrılmış olmalıdır.

Onarım seçenekleri:

# Boot'ta kullanılan mod: yalnızca güvenli kabul edilen onarımları uygular
sudo fsck -p /dev/sda1

# Tüm sorulara evet: etkisini bildiğinizde kullanın
sudo fsck -y /dev/sda1

# Temiz işaretli olsa bile denetlemeye zorla
sudo fsck -f /dev/sda1

-p (preen) ile -y arasındaki fark önemlidir: -p yalnızca tereddütsüz güvenli onarımları yapar ve karar gerektiren bir durumla karşılaşırsa durur, -y ise her soruya evet yanıtı vererek devam eder.

-c seçeneği ayrıca anılmayı hak eder, çünkü adı yanıltıcıdır. Bozuk sektörleri onarmaz; badblocks çalıştırıp bulduklarını kullanılmayacak şekilde işaretler. İşlem saatler sürebilir ve kendi içinde sektör yeniden eşleme yapan modern disklerde büyük ölçüde işlevini yitirmiştir. Fiziksel disk arızası şüphesinde doğru araç smartctl ile disk sağlığını okumaktır.

-A seçeneği /etc/fstab içindeki tüm dosya sistemlerini dener ve boot betikleri için tasarlanmıştır. Çalışan bir sistemde elle çağrılması bağlı dosya sistemlerini, kök dosya sistemi dâhil, hedef alır; bu nedenle günlük kullanımda önerilmez.

Dosya sistemine göre doğru araç

fsck tek başına bir denetleyici değil, bir arayüzdür: aygıtın dosya sistemi türünü belirler ve işi fsck.<tür> biçimindeki programa devreder. Bu devretme her dosya sisteminde gerçek bir denetim anlamına gelmez.

Bu ayrımın pratik sonucu önemlidir: XFS veya Btrfs bir aygıtta fsck çalıştırmak temiz bir çıktı ve sıfır çıkış kodu üretir, fakat hiçbir denetim yapılmamıştır. Çıktının temiz görünmesi dosya sisteminin denetlendiği anlamına gelmez. Bu yüzden aygıtın türünü lsblk -f ile doğrulamak ilk adımdır.

XFS için sıra şöyledir:

# Türü ve aygıtı doğrula
lsblk -f

# Dosya sistemini ayır
sudo umount /dev/sda1

# Önce salt okunur denetim
sudo xfs_repair -n /dev/sda1

# Gerekliyse onarım
sudo xfs_repair /dev/sda1

xfs_repair, journal’ın oynatılmış olmasını bekler. Kirli bir journal ile karşılaşırsa dosya sistemini bir kez mount edip yeniden ayırmak gerekir. -L seçeneği journal’ı sıfırlar; veri kaybına yol açabileceği için yalnızca başka yol kalmadığında kullanılır.

Btrfs için karşılığı sudo btrfs check /dev/sda1 komutudur; --repair eklenmeden önce yedek alınmalıdır.

Recovery Mode’da fsck

Kök dosya sistemi çalışan sistemde ayrılamaz; bu yüzden onarım her zaman sistemin dışından yapılır.

En güvenli yol live USB’dir. Sistemi harici bir ortamdan başlatın, hedef dosya sistemini hiç mount etmeden denetleyin:

lsblk -f                     # aygıtı ve türü belirle
sudo fsck -n /dev/sda2       # önce salt okunur
sudo fsck /dev/sda2          # gerekliyse onar

GRUB üzerinden recovery mode kullanılacaksa dikkat edilmesi gereken nokta şudur: recovery mode kök dosya sistemini genellikle bağlı hâlde bırakır ve salt okunur bağlanmış olması onarım için yeterli değildir. Bağlı bir dosya sisteminde onarım çalıştırmak çekirdeğin önbelleği ile aracın diskte gördüğü durumu ayrıştırır ve bozulmayı büyütebilir.

Recovery mode kullanmak zorundaysanız dosya sistemini önce gerçekten ayırın; kök dosya sistemi ayrılamıyorsa salt okunur bağlayıp yalnızca fsck -n ile durum tespiti yapın, onarımı live USB’ye bırakın:

sudo mount -o remount,ro /
sudo fsck -n /dev/sda2

fsck Exit Code’ları

fsck bittiğinde döndürdüğü kod önemli:

Birden fazla problem varsa, kodlar toplanır (bitwise OR).

lost+found Dizini

fsck, sahipsiz dosyaları lost+found dizinine koyar. Her partition’ın root’unda bir lost+found dizini vardır. İçinde garip isimli dosyalar bulursanız, bunlar fsck’nin kurtardığı dosyalardır. İnceleyip, gerekli olanları geri alabilirsiniz.

Proaktif Önlemler

Tune2fs ile kontrol ayarları:

Smart monitoring:

Düzenli backup:

Tehlikeli Durumlar

Force fsck dikkatli kullanın: -f flag’i clean görünen filesystem’i bile kontrol eder. Gereksiz yere kullanmayın.

Yanlış araç seçimi: Bir ext4 dosya sistemini fsck.ext2 ile denetlemeye zorlamak veri kaybına yol açabilir. Öte yandan “fsck otomatik seçer” kuralına körü körüne güvenmek de yanlıştır: XFS ve Btrfs’te otomatik seçilen program hiçbir denetim yapmaz. Önce lsblk -f ile türü doğrulayın, sonra o dosya sisteminin kendi aracını kullanın.

Interrupted fsck: fsck yarıda kesilirse, filesystem daha kötü duruma gelebilir. UPS kullanın!

Sonuç

fsck rutin bir performans aracı değil, dosya sistemi tutarlılığı için kontrollü bir kurtarma aracıdır. Önce yedek ve aygıt envanteri alın, mümkünse dosya sistemini ayırın, doğru dosya sistemine özgü aracı seçin ve otomatik onarım seçeneklerini ancak etkisini anladıktan sonra kullanın. Fiziksel disk arızası şüphesinde önce donanım sağlığını ve kopyalama stratejisini değerlendirmek daha güvenlidir.

Birincil kaynaklar