4.7. Dosya Sistemleri

4.7.1. Dosya sistemleri nedir?

Dosya sistemi disk üzerindeki dosyaları hiyerarşik bir düzende yerleştirebilmeyi sağlar. Bir işletim sisteminin bir disk veya bölümleri üzerindeki dosyalarının yerlerini bulmak için kullandığı yapıya dosya sistemi (filesystem) denir. Ayrıca dosya sistemi terimi, dosyaların veya dosya sistemlerinin depolandığı bir disk veya disk üzerindeki bir bölümü tanımlamak için de kullanılabilir. Bu nedenle birisi "ben iki adet dosya sistemine sahibim" derken; aslında disk üzerinde her birinde dosyaların tutulduğu, iki adet bölüme veya ek bir disk bölümüne sahip olduğu anlaşılmalıdır.

Bir disk veya disk bölümü ile dosya sistemi arasındaki fark önemlidir. Çok az uygulama işlenmemiş disk veya bölüm yüzeyinde işlem yapabilir. Buna dosya sistem yapabilen uygulamalar da dahildir. Şayet orada bir dosya sistemi var ise bu uygulamaların kullanılması sonucu ya silinir veya büyük ölçüde hasar görür. Pek çok uygulama ise dosya sistemleri üzerinde çalışır; olmayan veya yanlış girdiler içeren bölümler üzerinde çalışamazlar. Genelde dosya sistemi olmayan bir disk yüzeyinde bir uygulama çalışmaz. Uygulamaların çalışması için bir dosya sistemine ihtiyaç vardır; dosya sistemlerinin olabilmesi için de bir disk veya disk bölümüne ihtiyaç duyulur.

Bir disk veya disk bölümü dosya sistemi olarak kullanılmadan önce, disk yüzeyi ilk haline döndürülmeli ve gerekli bilgiler diske yazılmalıdır. Bu işlem dosya sistemi oluşturma olarak adlandırılır.

Pek çok Unix dosya sistemi küçük farklılıklar dışında benzer bir genel yapıya sahiptir. Genel kavramlar olarak süper blok, dosya düğümü (inode), veri bloğu ve dolaylı blok sayılabilir. Süper blok, dosya sisteminin bütünü hakkında bilgi içerir. Aslında bu dosya sistemlerine göre değişiklik gösterebilir. Dosya sisteminin boyutu gibi bilgiler burada yer alır. Dosya düğümü ise bir dosya hakkında, ismi hariç, bütün bilgileri ihtiva eder. Dosya ismi dizin içinde dosya düğümünün numarası ile birlikte yer alır. Bir dizin girişi; dosya ismine ve bu dosyanın yer aldığı dosya düğümünün numarasına bağlıdır. Dosya düğümü; dosyalardaki bilgileri depolamak için kullanılan veri bloklarının numaralarını içerir. Dosya düğümü içinde birkaç tane veri bloğu numarası için yer vardır. Bununla beraber daha fazla yere ihtiyaç olursa dinamik bir yapıyla bu yeni yer ayrılır. Bu dinamik yerleştirilmiş bloklar dolaylı bloklardır. Bu veri bloklarını bulmak için önce dolaylı veri bloklarının numaralarını bulmamız gerekir.

Unix dosya sistemleri genellikle lseek(2) sistem çağrısı vasıtası ile bir dosya içerisinde delik oluşturulmasına izin verir. Burada dosya sistemi, dosya içerisindeki özel bir alanda sanki sıfır byte varmış gibi davranır. Aslında dosya içerisinde bunun için ayrılmış bir disk sektörü yoktur (disk üzerinde daha az yer kaplanmış olur). Bu olay genellikle küçük çalıştırılabilir dosyalar, paylaşılmış Linux kütüphaneleri, bazı veri tabanları ve bazı özel durumlarda sık sık ortaya çıkar. Delikler dolaylı bloklardaki veya dosya düğümü içindeki veri bloklarının adresleri gibi özel değerler verilerek kullanılır. Bu özel adresler, dosyanın bahsi geçen bölümü için her hangi bir veri bloğunun ayrılamamış olduğunu, orada bir delik bulunduğunu gösterir.

4.7.2. Dosya sistemi bolluğu

Linux çok çeşitli dosya sistemlerini desteklemektedir. En önemlileri aşağıda tanıtılmıştır:

minix

En eski, en güvenli olarak kabul edilen ama kısıtlı yeteneklere ve özelliklere sahip olan dosya sistemidir. (En fazla 64 MB lık dosya sistemi, en çok 30 karakterlik dosya isimleri, ara sıra kaybolan tarih zaman damgaları gibi...

xia

Dosya isimleri ve dosya sistemi boyutlarının sınırlarını kaldıran ama bundan başka pek bir yenilik getirmeyen, sadece minix dosya sisteminin yenilenmiş halidir. Çok popüler değildir ama oldukça iyi çalıştığı rapor edilmektedir.

ext3/ext4

ext3 dosya sistemi, ext2'nin bütün özelliklerine sahip bir dosya sistemidir. Aradaki temel fark, günlükleme özelliğinin eklenmiş olmasıdır. Böylece, herhangi bir sistem çökmesi esnasında, geri kurtarma zamanı kısaltılır ve başarım artışı sağlanır.

ext2

En yetenekli Linux dosya sistemidir. İleriye dönük kolay geliştirilebilen bir dosya sistemi olarak tasarlanmıştır. Dolayısıyla yeni sürümü, dosya sistemi kodlarını, kurulu bir sisteme uygulamak için yeni ayarlar yapmayı gerektirmez.

ext

Ext2'nin geliştirilmeye uygun olmayan eski sürümüdür. Pek çok insan ext2 dosya sistemine yönelmiştir.

reiserfs

Çok sağlam bir dosya sistemidir. Veri kayıplarını en aza indirmek için günlükleme (journalling) yöntemi kullanılır. Günlükleme; yapılmış veya yapılan işlemlerin kayıtlarının tutulması mekanizmasıdır. Bu sayede dosya sistemi meydana gelmiş olan hasarları son derece kolay bir biçimde onarabilir.

Uyarı

reiserfs dosya sisteminin geliştiricisi kalmadığından Linux 5.18 sürümünden beri kullanımı önerilmemekte olup muhtemelen 2025'te çekirdek desteği sonlandırılacaktır (Kaynak: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/ ?id=eb103a51640ee32ab01c51e13bf8fca211f25f61).

Bunlara ek olarak, çok sayıda yabancı dosya sistemine destek bulunmaktadır. Böylece işletim sistemleri arasında dosyaları değişmek kolaylaştırılmıştır. Bu yabancı dosya sistemleri, makine üzerinde doğal Linux dosya sistemleri gibi çalışabilir. Ama Unix'in bazı özelliklerinden faydalanamazlar, bazı kısıtlamalara tabidir veya bazı acayiplikler sergiler.

msdos

MS-DOS FAT dosya sistemleri (OS/2 ve Windows NT) ile uyumlu bir dosya sistemidir.

umsdos

Msdos dosya sistemi sürücülerine, Linux altında daha uzun dosya isimleri, sahipler, izinler, bağlar ve aygıt dosyaları erişimi sağlar. Bu sistem; normal bir MSDOS dosya sisteminin sanki Linux dosya sistemiymiş gibi kullanılmasını sağlar ve böylece Linux için bağımsız bir bölüm oluşturulması zorunluluğunu ortadan kaldırır.

vfat

FAT32 olarak bilinen dosya sisteminin bir uzantısıdır. Pek çok MS Windows diski vfat'tır. FAT'tan daha büyük disk alanlarını destekler.

iso9660

CD ROM'lar için standart dosya sistemleridir. Daha uzun dosya isimlerine izin veren Rock Ridge uzantısı otomatik olarak desteklenir.

nfs

Bir ağ dosya sistemidir. Dosya sisteminin pek çok bilgisayar tarafından paylaşılmasını sağlar.

smbfs

MS Windows bilgisayarlarla paylaşım sağlayan bir ağ dosya sistemidir. Windows dosya paylaşım protokolleri ile uyumludur.

hpfs

OS/2 dosya sistemi.

sysv

SystemV/386, Coherent ve Xenix dosya sistemleri.

Dosya sistemi seçimi duruma göre değişir. Uyumluluk ve diğer sebepler doğal olmayan dosya sistemlerinin kullanılması mecburiyetini getirebilir. Şayet özgürce seçebilseydik, en mantıklısı ext3 dosya sistemi olurdu çünkü hem ext2'nin bütün özelliklerine sahiptir, hem de günlükleme yapabilmektedir.

Ayrıca bir de "proc" dosya sistemi vardır. /proc dizini altından ulaşılabilen bu dosya sistemi aslında bir dosya sistemi değildir. Proc dosya sistemi bazı çekirdek yapı bilgilerine (süreç listesi gibi) ulaşımı kolaylaştırır. Böylece bu veri yapılarının bir dosya sistemi gibi görünmesini sağlar ve dosya sisteminin sağlamış olduğu bütün olanakları kullanıma açar. Örneğin bütün süreçlerin listesini alabilmek için şu komutu kullanabiliriz.

$ ls -l /proc
toplam 525256
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 1
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 11
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 111
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 112
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 14
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 1563
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 21
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 3
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 4
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 5
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 6
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 7
dr-xr-xr-x    3 xfs      xfs             0 Oca 13 04:41 747
dr-xr-xr-x    3 apache   apache          0 Oca 13 04:41 766
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 8
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 9
-r--r--r--    1 root     root            0 Oca 13 04:41 apm
dr-xr-xr-x    6 root     root            0 Oca 13 04:41 bus
-r--r--r--    1 root     root            0 Oca 13 04:41 cmdline
-r--r--r--    1 root     root            0 Oca 13 04:41 cpuinfo
-r--r--r--    1 root     root            0 Oca 13 04:41 devices
-r--r--r--    1 root     root            0 Oca 13 04:41 dma
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 driver
-r--r--r--    1 root     root            0 Oca 13 04:41 execdomains
-r--r--r--    1 root     root            0 Oca 13 04:41 fb
-r--r--r--    1 root     root            0 Oca 13 04:41 filesystems
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 fs
dr-xr-xr-x    4 root     root            0 Oca 13 04:41 ide
-r--r--r--    1 root     root            0 Oca 13 04:41 interrupts
-r--r--r--    1 root     root            0 Oca 13 04:41 iomem
-r--r--r--    1 root     root            0 Oca 13 04:41 ioports
dr-xr-xr-x   18 root     root            0 Oca 13 04:41 irq
-rw-r--r--    1 root     root            0 Oca 13 04:41 isapnp
-r--------    1 root     root     536809472 Oca 13 04:41 kcore
-r--------    1 root     root            0 Oca 12 14:31 kmsg
-r--r--r--    1 root     root            0 Oca 13 04:41 ksyms
-r--r--r--    1 root     root            0 Oca 13 04:41 loadavg
-r--r--r--    1 root     root            0 Oca 13 04:41 locks
-r--r--r--    1 root     root            0 Oca 13 04:41 mdstat
-r--r--r--    1 root     root            0 Oca 13 04:41 meminfo
-r--r--r--    1 root     root            0 Oca 13 04:41 misc
-r--r--r--    1 root     root            0 Oca 13 04:41 modules
-r--r--r--    1 root     root            0 Oca 13 04:41 mounts
-rw-r--r--    1 root     root          208 Oca 13 04:41 mtrr
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 net
dr-xr-xr-x    2 root     root            0 Oca 13 04:41 nv
-r--r--r--    1 root     root            0 Oca 13 04:41 partitions
-r--r--r--    1 root     root            0 Oca 13 04:41 pci
lrwxrwxrwx    1 root     root           64 Oca 12 14:31 self -> 1563
-rw-r--r--    1 root     root            0 Oca 13 04:41 slabinfo
-r--r--r--    1 root     root            0 Oca 13 04:41 stat
-r--r--r--    1 root     root            0 Oca 13 04:41 swaps
dr-xr-xr-x   11 root     root            0 Oca 13 04:41 sys
dr-xr-xr-x    2 root     root            0 Oca 13 04:41 sysvipc
dr-xr-xr-x    4 root     root            0 Oca 13 04:41 tty
-r--r--r--    1 root     root            0 Oca 13 04:41 uptime
-r--r--r--    1 root     root            0 Oca 13 04:41 version
dr-xr-xr-x    3 root     root            0 Oca 13 04:41 video
$

(Yukarıdaki örnek kısaltılmıştır. Birkaç tane daha süreç ismi listelenebilir.)

Her ne kadar bir dosya sistemi diye adlandırılsa bile proc dosya sistemi sadece çekirdeğin bir hayalidir. Diskte yer kaplamaz. Proc dosya sisteminin her hangi bir bölümüne bakmak istediğimiz zaman, çekirdek sanki bu bölüm varmış gibi davranır ki aslında böyle bir bölüm yoktur. Öyle ki, disk üzerinde yer kaplamayan çok-megabytelık bir /proc/kcore dosyası vardır.

4.7.3. Hangi dosya sistemi kullanılmalı?

Pek çok değişik dosya sistemi arasında genellikle küçük farklılıklar vardır. Kesinlikle ext4 en popüler dosya sistemidir. Çünkü günlükleme yapabilmektedir. Günlüklemenin aşırı yük getiren yapısından, verimlilikten, güvenilirlikten, uyumdan ve pek çok diğer sebeplerden dolayı; başka bir dosya sistemi kullanmak daha uygun olabilir. Dosya sistemi seçimi kişilere ve ihtiyaçlarına göre değişiklik gösterir.

Günlükleme yapma yeteneğine sahip dosya sistemleri, aynı zamanda, günlüklü dosya sistemleri diye de adlandırılır. Günlüklemeli bir dosya sistemi, sistemde olan bitenin kaydını veya günlüğünü tutar. Bir sistem çökmesi durumunda ya da benim iki yaşındaki oğlumun yapmayı çok sevdiği gibi, bilgisayarın fişinin aniden çıkarılması durumunda; günlükleme sistemi kaydedilmemiş veya zarar görmüş verilerin kurtarılmasını sağlar. Böylece, veri kayıpları oldukça aşağıya çekilmiş olur. Bu nedenle, muhtemelen gelecek Linux dağıtımlarında, bu özellik standart hale gelecektir. Bununla birlikte, günlüklemenin, sizde boş bir güven duygusu yaratmasına izin vermeyin. Acil durumlarda kullanabilmek için, verilerinizin yedeğini almayı asla ihmal etmeyin.

4.7.4. Bir dosya sisteminin oluşturulması

Dosya sistemleri mkfs(8) komutu ile oluşturulurdu. mkfs, dosya sistemine özel mkfs.ds-türü araçları lehine kullanımdan kaldırılmıştır. Yani her dosya sistemi türü için ayrı bir komut kullanılır. Örneğin mkfs.ext2 (aslında mke2fs(8) çalışır.) için genel ve en önemli seçenekler aşağıda belirtilmiştir. Ayrıntılı bilgi için komutun kılavuz sayfasına bakılabilir.

-c

Dosya sistemi oluşturulmadan önce aygıtta bozuk bloklar aranır.

-l DOSYA

İsmi DOSYA ile belirtilen bozuk blokların listesini içeren dosyayı okur.

4.7.5. Dosya sistemlerinin bağlanması ve ayrılması

Bir dosya sistemi kullanılmadan önce mutlaka bağlanmalıdır. Daha sonra işletim sistemi her şeyin doğru bir şekilde çalıştığından emin olmak için çeşitli muhasebe işlemleri yapar. Unix altında bütün dosya sistemleri tek bir dizin ağacı altında gözüktüğü için, işletim sistemi yeni bağlanan dosya sistemlerini eskiden bağlanmış olan dosya sistemlerinin alt dizinleriymiş gibi gösterir ve bu şekilde işlem yapar.

Aşağıda Şekil 4.3'de kendi kök dizinleri altında bulunan birbirinden bağımsız üç dosya sistemi gösterilmektedir. Son iki dosya sistemi sırayla, birincinin /home ve /usr dizinleri altına bağlanırsa Şekil 4.4'deki gibi tek bir dizin ağacı elde ederiz.

Şekil 4.3. Üç ayrı dosya sistemi
Üç ayrı dosya sistemi

Şekil 4.4. /home ve /usr bağlı.
/home ve /usr bağlı.

Aşağıdaki örnekte gösterildiği şekilde bu bağlama işlemleri yapılabilir.

# mount /dev/hda2 /home
# mount /dev/hda3 /usr
#

mount komutu iki argüman alır. Birincisi diske uygun bir aygıt dosyası veya dosya sistemini içeren bir disk bölümüdür. İkincisi ise bağlandığı dizindir. Bu işlemler yapıldıktan sonra bu iki aygıtın içerikleri sanki disk üzerindeki /home ve /usr dizinlerinin içerikleriymiş gibi kullanılabilir. Şayet bağlama işlemi başka bir dizin altına yapılmış olsaydı, aygıtların içeriklerini görebilmek için o dizinlerin altına bakmamız gerekecekti. Ayrıca aygıt dosyası ve bağlanılan dizin arasındaki farkı mutlaka göz önünde bulundurmalıyız. Unutmayın ki aygıt dosyası, (/dev/hda2) diskin ham içeriğini verir. Bağlandığı dizin ise (/home) disk üzerindeki dosyalara ulaşım imkanı verir. Disk bölümünün bağlandığı dizine bağlama noktası adı verilir.

Linux pek çok dosya sistemini destekler. mount dosya sisteminin türünü tahmin etmeye çalışır. İsterseniz -t fstype seçeneğini dosya sisteminin türünü belirtmek için kullanabiliriz. Bazı zamanlar bu gerekli olmaktadır, mount komutu dosya sistemini tanımlayamayabilir.

Bağlantı dizini mutlaka sistemde var olmalıdır ve içi boş değilse dosya sistemi bağlı olduğu sürece o içerik erişilmez olacaktır (hali hazırda açılmış dosyalar ve başka bir dizinden sabit bağ verilmiş olan dosyalar hala ulaşılabilir durumdadır). Örneğin; bazı kişiler /tmp ve /var/tmp dizinlerini eş anlamlı olarak kullanır ve /tmp dizinini /var/tmp dizinine sembolik bağ olarak atar. Sistem açılırken, /tmp dosya sistemi bağlanmadan önce kök dosya sisteminde bulunan /var/tmp dizini onun yerine kullanılır. /var dizini bağlandığı zaman, bu kök dosya sistemi altındaki /var/tmp dizinini ulaşılmaz kılar. Şayet /var/tmp dizini kök dosya sistemde yok ise, /var dizinini bağlamadan geçici dosyaları kullanmak imkansız olacaktır.

Dosya sistemine her hangi bir şey yazmaya niyetiniz yok ise bağlama işlemi sırasında bu bağlantının salt okunur olmasını sağlayacak -r seçeneğini kullanabilirsiniz. Bu çekirdeğin her hangi bir yazım girişiminde bulunmasını ve dosya düğümleri içindeki erişim zamanlarının güncellenmesini engeller. Üzerine yazılamayan ortamları (örn; CDROM) bağlarken bu seçenek gereklidir.

Uyanık okuyucular küçük bir mantıksal sorunu fark etmiştir. Birinci dosya sistemi (burada kök dosya sistemi oluyor) nasıl bağlanmıştır? Kök dosya sistemi açılış esnasında sihirli bir şekilde bağlanmıştır ve kullanıcı bunun her açılışta tekrar olacağına güvenmelidir. Şayet kök dosya sistemi bağlanmazsa açılış yapılamaz. Sihirli bir biçimde kök dosya sistemini bağlayan dosya sisteminin adı çekirdek içinde derlenmiştir veya LILO ya da rdev kullanılarak ayarlanmıştır.

Kök dosya sistemi ilk olarak salt okunabilir şekilde bağlanır. Daha sonra başlayan betikler onun geçerliliğini kanıtlamak için fsck çalıştırır. Şayet bir sorun çıkmaz ise oku-yaz olarak tekrar bağlanır. Böylece yazma işlemlerine olanak sağlanır. fsck, oku-yaz bağlı bir dosya sistemi üzerinde yapılmamalıdır. Çünkü dosya sisteminde meydana gelen her değişiklik fsck'nın çalışmasını etkileyecek ve çalışması esnasında sorunlar ortaya çıkmasına sebep olacaktır. Kök dosya sistemi, denetlenirken salt okunur şekilde bağlanmış olduğu için fsck herhangi bir sorunu sıkıntıya girmeden giderebilir. Dosya sisteminin bellekte tuttuğu bütün bilgiler yeniden bağlama işlemi esnasında silinecektir.

Pek çok sistemde açılış esnasında otomatik olarak bağlanması gereken dosya sistemleri mevcuttur. Bunlar /etc/fstab dosyası içinde belirtilmişlerdir. Ayrıntılı bilgi fstab kılavuz sayfasında mevcuttur. Açılış esnasında bağlanılacak dosya sistemlerinin özellikleri çok çeşitli faktörlere dayanır ve bu sistem yöneticisinin şahsi ihtiyaç ve görüşlerine göre değişiklik gösterebilir. Daha ayrıntılı bilgi Açılışlar ve Kapanışlar bölümünde mevcuttur.

Bir dosya sisteminin daha fazla bağlı durumda kalması gerekmiyorsa umount komutu ile dosya sistemi sistemden ayrılmalıdır.[52] umount argüman olarak aygıt dosyası ismini veya bağlama noktası dizininin adını kullanır. Bu işlem aşağıdaki şekillerden birisi ile gerçekleştirilir:

# umount /dev/hda2
# umount /usr
#

Sadece root kullanıcı dosya istemlerini bağlayabilir ve ayırabilir. Şayet her kullanıcı istediği bir dizine bir disk bağlarsa, sonuçta /bin/sh dizini gibi görünen bir truva atı yaratmak çok kolay hale gelirdi. Bununla beraber kullanıcılara disk bağlama izni vermek kaçınılmazdır. Bunun çeşitli yolları vardır:

  • Kullanıcılara root parolasını vermek. En kolay fakat en az güvenli seçenektir. Ağa bağlı olmayan kişisel sistemler için en uygun çözümdür.

  • Kullanıcıların dosya sistemi bağlama işlemlerini yapabilmesine izin vermek için sudo kullanabilirsiniz. Bu hala az güvenli bir seçenektir, sadece süper kullanıcı yetkileri herkese doğrudan verilmemiş olur.[53]

  • /etc/fstab dosyası içinde bağlanması olası dizin ve aygıt dosyası adlarını uygun seçeneklerle tanımlayın.

Birinci sütundan itibaren, bağlanacak aygıt dosyası, bağlantı dizini, dosya sistemi, seçenekler, yedekleme yapma sıklığını (dump tarafından kullanılır) ve açılış esnasında hangi dosya sistemlerinin fsck tarafından denetleneceğini belirten numaralar (sıfır = birşey yapma) belirtilir.

noauto seçeneği açılış esnasında dosya sisteminin otomatik olarak bağlanmayacağını belirtir. user ve users seçenekleri ise bütün kullanıcılara bu dosya sistemini bağlama izni verir.

4.7.6. fsck ile dosya sistemi bütünlüğünün sınanması

Dosya sistemleri zaman zaman hata vermeye eğilimli olan karmaşık yapılardır. Bir dosya sisteminin doğruluğu ve geçerliliği fsck komutu ile sınanır. Bulduğu küçük hataları onarmak ve onaramadığı daha önemli hatalar için kullanıcıyı uyarmak üzere yapılandırılabilir. Şans eseri dosya sistemlerinin kodlarını onarma işleminde oldukça etkilidir. Bununla birlikte çok nadir olarak kullanıcı, donanım veya elektrik kesintilerinden kaynaklanan hatalar meydana gelir.

Pek çok sistemde fsck komutu açılışta çalışmak üzere ayarlanır. Ve bu sayede dosya sisteminde meydana gelmiş olan hataların sistem kullanıma başlanmadan önce düzeltilmesi umulur. Bozulmuş dosya sistemleri işleri yanlış yönlendirir: veri sistemleri karıştıysa, dosya sistemi büyük olasılıkla onları daha fazla karıştıracaktır. Bununla birlikte büyük dosya sistemlerinde fsck komutunun çalışması biraz vakit alabilir ama sistem düzgün kapatılmış ise dosya sisteminde hata meydana gelme olasılığı hemen hemen hiç yoktur. Böyle durumlarda sınamanın yapılmasını önlemek için bazı hileler vardır. Birincisi: şayet /etc/fastboot dosyası varsa sınama işlemi yapılmaz. İkincisi ise: süper bloklar içinde sistemin bir önceki kapanışta düzgün kapatılıp kapatılmadığını belirten işaretlerdir. Şayet sistem düzgün bir şekilde ayrılmışsa e2fsck (ext2 dosya sistemi için fsck) komutu işleme girmez. /etc/fastboot hilesi sizin açılış esnasında kullandığınız betiklere göre çalışır ama ext2 hilesi e2fsck kullandığınız sürece işe yarar. e2fsck'den kurtulmak için açık bir şekilde seçenekler belirtilmiş olmalıdır. Güncel bilgiler için e2fsck(8) kılavuz sayfasına bakınız.

Otomatik sınama sadece açılış esnasında otomatik bağlanan dosya sistemleri için geçerlidir.

Şayet fsck tamir edemeyeceği sorunlar ile karşılaşırsa; iyi yedekleme, dosya sistemlerinin kullanımı ve bozulmuş dosya sistemlerinin türleri hakkında ayrıntılı ve derin bilgiye sahip olmanız gerekecektir. Daha sonrası kolaydır, genellikle de sıkıcı. Kendi kendinize yetemeyeceğiniz durumda bir arkadaşınızdan, posta listelerinden, haber gruplarından veya bunlara benzer bir yerlerden yardım alınabilir. Size daha fazlasını anlatmak isterdim fakat bu konuda ki eğitimimim ve deneyimlerim eksikliği buna engel olmaktadır. debugfs(8) kılavuz sayfası bu konuda yardımcı olabilir.

fsck mutlaka bağlı olmayan dosya sistemleri üzerinde yapılmalıdır. Sadece açılış esnasında salt okunur konumdaki kök dosya sistemi bu durum için istisnadır. Bunun sebebi fsck komutunun disk yüzeyine doğrudan erişerek dosya sistemi üzerinde yaptığı bazı değişikliklerin, işletim sistemi tarafından anlaşılamama olasılığı bulunması ve bunun da işletim sistemi üzerinde sorunlar yaratabilecek olmasıdır.

4.7.7. Disk hatalarının badblocks ile denetlenmesi

Bozuk bloklar için periyodik denetimler yapmak iyi bir fikir olabilir. Bu işlem badblocks komutu ile yapılabilir. Bu komut bulabildiği bütün bozuk bloklar için bir liste verir. Bu liste fsck için dosya sistemi veri yapısı içinde bulunan kayıtlara yönlendirilebilir, böylece işletim sisteminin bozuk blok hatalarının kaydı tutulmak zorunda kalınmaz. Aşağıdaki örnek bunun nasıl yapılacağını açıklamaktadır.

# badblocks -o bad-blocks /dev/fd0u1440
# fsck -t ext2 -l bad-blocks /dev/fd0u1440
fsck 1.25 (20-Sep-2001)
e2fsck 1.25 (20-Sep-2001)
1. geçiş: dosya indeksleri, bloklar ve uzunluklar denetleniyor
2. geçiş: Dizin yapısı denetleniyor
3. geçiş: Dizin bağlanabilirliği denetleniyor
4. geçiş: Başvuru sayısı denetleniyor
5. geçiş: grup özet bilgileri denetleniyor

/dev/fd0u1440: ***** DOSYA SİSTEMİ DEĞİŞTİRİLDİ *****
/dev/fd0u1440: 11/184 dosya (0.%0 yanyana olmayan düğüm), 41/1440 blok
#

Şayet kullanımdaki bir bloğun hatalı olduğu rapor edilirse e2fsck bu bloğu başka bir yere taşıyacaktır. Şayet durum gerçekten kötü ise bu blok içindeki dosyaların içeriği bile bozulabilir.

4.7.8. Diğer dosya sistemi araçları

Dosya sistemlerini yönetmek için başka araçlar da vardır. df komutu seçeneksiz kullanıldığında bağlı tüm dosya sistemlerinin dolu ve boş alanları hakkında bilgi verir. du komutu bir dizinin ve içerdiği dosyaların ne kadar disk alanı kullandığını gösterir. Bu araçlar disk alanının kullanımı hakkında bilgi vermesi bakımından olası sorunlarn yakalanmasında yardımcı olabilir. Ayrıntılı bilgi için her ikisinin de kılavuz sayfalarına bakabilirsiniz.

sync komutu diske henüz yazılmamış ve tampon bellekte tutumakta olan bilgilerin diske yazılmasını sağlar. (Tampon bellek bölümüne bakınız.) Bunu yapmak nadiren gerekli olur. Çünkü bir artalan süreci olan update bu işlemi otomatik olarak yapar. Genellikle yıkım anlarında faydalı olur; örneğin update ya da onun yardımcı süreci bdflush ölmüşse veya now seçeneği ile sistemi kapatmak üzereyken update'in devreye girmesini bekleyemeyecekseniz... Bu konuda daha ayrıntılı bilgileri kılavuz sayfalarından bulabileceğinizi tekrarlıyorum. man komutu Linux'da en iyi arkadaşınızdır. Kuzeni olan apropos komutu da kullanmak istediğiniz komutun ya da konunun adını hatırlayamadığınızda ve bir anahtar sözcük verdiğinizde ilgili kılavuz sayfalarının bir listesini göstererek size yardımcı olacaktır.

4.7.9. Diğer ext2/ext3 dosya sistemi araçları

Dosya sistemi yaratıcısı mke2fs ve denetleyicisi e2fsck'ye ek olarak ext2 dosya sistemi, dosya sisteminden bağımsız olarak ulaşılabilen ve yahut doğrudan kullanılabilen, bazı yararlı ek araçlara da sahiptir.

tune2fs dosya sistemi parametrelerini ayarlar. Bazı ilginç parametreler şunlardır:

  • Maksimum bağlama sayısı. Dosya sistemleri belirli bir bağlama sayısına ulaşılınca, sistem temiz işaretine rağmen, e2fsck dosya sistemini denetlemeye kalkışır. Geliştirme veya sınama amacıyla kullanılan bir sistemde bu sayıyı düşürmek iyi bir fikir olabilir.

  • Denetimler arasındaki maksimum zaman. Sistem temiz işaretine ve denetim için gerekli bağlama sayısına ulaşılmamış olsa bile; en son denetimden beri geçen süre belli bir değere ulaşınca e2fsck sistemi denetlemek isteyebilir. Bu seçenek istenirse kapatılabilir.

  • root kullanıcı için ayrılmış blok sayısı. Ext2, dosya sistemi dolmuş olsa bile, root kullanıcının her hangi bir şeyi silmeden işlerine devam edebilmesi için bazı bloklar ayrılmıştır. Bunun için ayrılan blokların oranı öntanımlı %5'dir. Bu da pek çok disk için fazla sayılmayacak bir orandır.

Daha fazla bilgi edinmek için tune2fs(8) kılavuz sayfasına bakınız.

dumpe2fs(8) ext2 dosya sistemi hakkında, genellikle süper bloktan alınan, bilgileri gösterir. Bu bilgilerden bazıları teknik ayrıntılardır ve dosya sisteminin nasıl çalıştığının bilinmesini gerektirir, fakat pek çoğu kolayca anlaşılabilir açıklamalardır. Aşağıda böyle bir çıktı vardır:

 # dumpe2fs -h /dev/hdb2
dumpe2fs 1.25 (20-Sep-2001)
Filesystem volume name:   /b2
Last mounted on:          <not available>
Filesystem UUID:          ad9437d2-0e25-490b-8c9d-9a0da50c95df
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal filetype needs_recovery sparse_super
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              366592
Block count:              2931862
Reserved block count:     146593
Free blocks:              780635
Free inodes:              306325
First block:              1
Block size:               1024
Fragment size:            1024
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         1024
Inode blocks per group:   128
Last mount time:          Mon Jan 13 16:47:05 2003
Last write time:          Mon Jan 13 16:47:05 2003
Mount count:              821
Maximum mount count:      -1
Last checked:             Thu Oct 25 16:02:44 2001
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal UUID:             <none>
Journal inode:            8
Journal device:           0x0000
First orphan inode:       0


Grup 0: (1 ile 8192 arasındaki bloklar)
    İlk süperbloğun yeri:  1
  Grup tanımının yeri:     2-13
  Blok biteşleminin yeri:  14 (+13)
  Düğüm biteşleminin yeri: 15 (+14)
  Düğüm tablosunun yeri:   16-143 (+15)
  Serbest blok sayısı:     0
  Serbest düğüm sayısı:    792
  Dizin sayısı:            19
  Serbest bloklar:
  Serbest düğümler:        233-1024
Grup 1: (8193 ile 16384 arasındaki bloklar)
  Yedek süperbloğun yeri:  8193
  Grup tanımının yeri:     8194-8205
  Blok biteşleminin yeri:  8206 (+13)
  Düğüm biteşleminin yeri: 8207 (+14)
  Düğüm tablosunun yeri:   8208-8335 (+15)
  Serbest blok sayısı:     0
  Serbest düğüm sayısı:    855
  Dizin sayısı:            31
  Serbest bloklar:
  Serbest düğümler:        1194-2048

[çıktının Grup 1 ile Grup 357 arasında grup bilgileri silindi]

Grup 357: (2924545 ile 2931861 arasındaki bloklar)
  Blok biteşleminin yeri:  2924545 (+0)
  Düğüm biteşleminin yeri: 2924546 (+1)
  Düğüm tablosunun yeri:   2924560-2924687 (+15)
  Serbest blok sayısı:     5452
  Serbest düğüm sayısı:    812
  Dizin sayısı:            25
  Serbest bloklar:         2924699, 2925104-2925488, 2925495-2925498, 2925525, \
                           2926801-2931861
  Serbest düğümler:        365580, 365607, 365783-366592
#

debugfs(8) dosya sistemleri için kullanılan bir hata ayıklama uygulamasıdır. Disk üzerinde bulunan dosya sistemi veri yapısına doğrudan erişim sağlar ve fsck komutunun onaramadığı hataları düzeltmeye yarar. Ayrıca silinmiş dosyaları geri almak için kullanıldığı da bilinmektedir. Bununla birlikte debugfs ne yaptığınızı bilmeniz gereken bir uygulamadır, aksi halde bütün bilgilerinizi yok edebilirsiniz.

dump ve restore ext2 dosya sisteminin yedekleme işlemlerinde kullanılır. Geleneksel Unix işletim sistemlerinin, ext2 dosya sistemi için geliştirilmiş özel sürümleridir. Yedek Alma bölümünde yedekleme hakkında daha ayrıntılı bilgi bulabilirsiniz.



[52] Tabii ki umount komutunun aslı unmount'tur. Fakat 1970'li yıllarsa "n" esrarengiz bir şekilde ortadan kayboldu. Şayet "n" yi görürseniz lütfen Bell Laboratuarlarına haber verin.

[53] Yine de bu durum kullanıcının bir kaç saniye düşünmesi ile aşılabilen bir güvenliktir. Ancak, sudo komutu, kullanıcıların belirli komutları çalıştırabilmesi için sınırlandırılabilir. Bu konu hakkında ayrıntılı bilgi sudo(8), sudoers(5) ve visudo(8) kılavuz sayfalarında bulunabilir.