Peter Norton, bilgisayarla ilgilenen herkesin hayatını kolaylaştıran Norton Utilities’in yaratıcısı, bir klasik olan Inside the IBM PC kitabının yazarı. Aynı zamanda UNDELETE programını yazan ilk kişi. PC dünyasını en iyi anlamış bir kaç kişiden birisi ve olağanüstü bir yazılım dehası. Aşağıda onun Undelete programını anlatırken FAT dosya sisteminin ayrıntılarını da görebileceksiniz.
Peter Norton’a ilişkin son haber: Peter Norton uzun zamandır elini bilgisayara sürmüyor. Bilgisayardan edindiği servetle şu anda resim koleksiyonculuğu yapıyor. Yılın belli zamanlarında da firmasını sattığı Symantec’e uğrayıp halen Norton adıyla satılmakta olan ürünlerin ambalajlarında yer almak üzere fotoğraf çektiriyor.
UNDELETE programı ya da komutu şu anda size çok sıradan gelebilir. Ama UNDELETE komutunun ancak DOS’un 6.0 versiyonu ile birlikte işletim sisteminin bir parçası olduğunu düşünürseniz bu komutun ilk zamanlarda ne kadar önemli olduğunu anlayabilirsiniz.
İsterseniz ilk önce bir sabit disk üzerinde bilgilerin nasıl düzenlendiğine ve DOS’un bu bilgilere nasıl eriştiğine bir göz atalım. Bu arada da çıkabilecek sorunları ve bu sorunların çözümünü de tartışabiliriz.
Sabit disk birden fazla plakadan oluşur. Plakaların her yüzü için bir adet okuma-yazma kafası bulunmaktadır.
Diskin üzerinde iz (track) olarak adlandırılan daireler bulunur. Her İz üzerinde de sektörler belirlenir (Sektörlerin her biri 512 byte’dır). Sabit diskin ilk sektörü MBR (Master Boot Record: Ana Boot Kayıtı) olarak adlandırılır. DOS’a ayrılan bölümün (partition) ilk sektörü ise DBR (Dos Boot Record: Dos Boot Kayıtı) olarak adlandırılmaktadır. DBR’den sonra da Dosya Atama Tablosu (FAT) ve Kök Dizin (Root Directory) bilgileri gelir. Bu ilk sistem alanlarını izleyen sektörler cluster denilen birimler halinde gruplandırılır ve dosyalara cluster birimleri şeklinde atanırlar. Disk üzerinde yer alan dosyalara atanan cluster’ların bilgisi FAT’de (File Allocation Table: Dosya Atama Tablosu) ve kök dizinde tutulur. DOS, kök ve alt dizinler ile FAT’de yer alan bilgileri kullanarak bir dosyaya erişir ve gerekli işlemleri yapar. Dosya atama tablosundaki değerler bir başka cluster’ı gösteren bir rakam, kullanılmayan cluster işareti, hatalı sektör (bad sector) işareti ya da dosya sonu işareti olabilir.
Disk üzerindeki bir alanın iz, kafa ve sektör numarası olarak adresi mutlak sektör adresidir. DOS bu bilgiyi doğrudan kullanamaz. DOS kendi rölatif sektör numaralarını kullanır. Rölatif numaralandırmada her sektöre 0’dan başlamak üzere bir numara verilir ( 305 nolu sektör gibi) ve bütün işlemler bu numara üstünden yapılır. Bu şekilde bir numaralandırma ile DOS’un donanımdan bağımsız olarak verilere erişimi sağlanmış olur.
Disk üzerindeki sektörlerin cluster adı verilen yığınlar şeklinde değerlendirildiğini söylemiştik. DOS tarafından bir dosyaya atama yapılırken byte ya da sektör temelinde değil de cluster temelinde atama yapılır. Örneğin, 1 byte’lık bir dosya yarattığınızı düşünelim. Bu dosya disk üzerinde 1 byte değil 1 cluster’lık yer kaplar (1 cluster’ın kaç sektöre karşılık geldiği ise farklılıklar arzedebilir). Örneğin, 720 KB’lık bir diskette 1 cluster 2 sektöre eşittir ve bizim 1 byte’lık dosyamız için disk üzerinde tam tamına 1024 byte’lık yer ayrılır.
DBR (DOS Boot Sector) bölümünde basit bir program bulunmaktadır. Bu program MBR’de yer alan bilgileri ve 2 gizli sistem dosyasını kullanarak sistemin başlatılmasını sağlar. Bu iki gizli sistem dosyası IBM PC’lerde IBMBIO.COM ve IBMDOS.COM ve uyumlularda IO.SYS ve MSDOS.SYS olarak adlandırılmaktadır. DBR’de yer alan program ilk önce bu iki gizli dosyanın bulunup bulunmadığını kontrol eder. Sistemin boot edilebilir bir disk olup olmadığını bu dosya kontrolü ile saptar. Eğer bu iki dosya bulunmakta ise bu dosyaları yükler ve işletir.
DBR’den hemen sonra FAT alanı gelir. Bu alanda birbiri ardına iki adet FAT kopyası bulunur. FAT’lerin iki adet olmasının nedeni güvenliktir: Eğer birisi bozulursa diğeri kullanılabilir. Ama her ne kadar DOS’un kendisi güvenlik amacıyla iki adet FAT kopyası tutmaktaysa da bu iki FAT’in aynı olup olmadığını kontrol etmez. Bu kontrolü PCTOOLS’un DISKFIX ya da Norton’un Disk Doctor gibi programları yapar. Eğer bu iki kopya birbiriyle uyuşmuyorsa yine bu programlar en az hatalı FAT’i saptarlar ve hatalı FAT’i de düzeltirler.
FAT’den sonra da kök dizin (root directory) gelmektedir. Bu bölümde diskin kök dizininde yer alan dosyalarla ilgili bilgiler yer almaktadır. Kök dizinde her bir dosya için 32 byte’lık yer ayrılmıştır. Kök dizin için ayrılan bölüm kısıtlıdır ve bu yüzden kök dizinde yer alabilecek dosya sayısı da sınırlıdır. Örneğin, sabit disklerde kök dizinde en çok 512 dosya yer alabilir. Floppy disklerin kök dizininde ise daha az dosya yer alabilir. Bir kök dizinin en fazla kaç dosya içereceği bilgisi de DBR’de saklıdır. Kök dizinde her dosya için 32 byte ayrıldığını söylemiştik. 32 byte’ın sekizi dosya ismine, üçü dosya ismi uzantısına, biri dosya özelliğine (attribute), ikisi son işlenme tarihine, yine ikisi son işlenme saatine, ikisi başlangıç cluster numarasına ve dördü de dosya büyüklüğü bilgisine ayrılmıştır. On adet byte ise ilerde ortaya çıkabilecek kullanımlar için saklanmaktadır. Dosyaların özellik (attribute) byte’ının özel bir önemi vardır. Özellik byte’ı dosya hakkında çok değerli bilgiler sunar. Bu byte’ı oluşturan 8 adet bitin yalnızca altısı kullanılmaktadır. Şimdi bu bitleri teker teker gözden geçirelim:
1) Arşiv biti: Eğer dosya yedeklenmişse (backup) 1 yedeklenmemişse 0’dır.
2) Hidden (gizli) biti: Eğer bu bit 1 ise dosya gizlidir ve DOS’un DIR komutuyla görülmez ya da COPY komutu kullanılarak kopyalanamaz.
3) Yalnız-Oku (Read-only) biti: Eğer 1 ise dosya üzerinde değişiklik yapılamaz ya da dosya silinemez.
4) System biti: Eğer 1 ise sistem dosyası olduğu ve bulunduğu yerden başka bir yere taşınmaması gerektiği anlaşılır.
5) Etiket (label) biti: Eğer 1 ise bunun bir dosya değil disk etiketi olduğu anlaşılır. Disk etiketleri bir dosya gibi saklanmaktadır.
6) Dizin (directory) biti: Eğer bu bit 1 ise dosya değil bir alt dizin olduğu anlaşılır. Alt dizinler de disk üzerinde aynen dosyalar gibi saklanırlar ama bunların büyüklük bölümü 0 olur.
Bir dosyaya erişim için hem FAT hem de dizin bilgileri gerekmektedir. Dizin yapısı, dosyanın kimlik bilgilerini ve dosya atama tablosundaki ilk numarasını saklar. Bu ilk numara yardımı ile dosyanın disk üzerindeki yerleşimini dosya atama tablosundan izlememiz çok kolay olur. Şimdi bir dosyayı disk üzerinde nasıl takip edebileceğimizi görelim. Adres.dbf adında bir dosyamız olsun. Bu dosyanın dizin bilgilerinden de başlangıç cluster numarası olarak 40’ı saptamış olalım. Dosya atama tablosu değerleri de şu şekilde sıralansın:
FAT
Hücre Numarası Hücre İçeriği
39 EOF
40 41
41 42
42 44
43 112
44 102
.
.
.
102 103
103 EOF
Şimdi dosyanın hangi cluster’ları kapladığını şu şekilde buluyoruz: Dosyanın başlangıç cluster’ı 40 idi. FAT’de 40 nolu hücrede bir sonraki cluster’ın numarası yer alıyor; o da 41. 41 Nolu hücrede de bir sonraki clusterın numarası yer alıyor; 42. 42 Nolu hücrede yer alan değer 44. Görüldüğü gibi cluster’ların birbirini izlemesi gerekmiyor. İşletim sistemimiz olan DOS bir dosyaya yer ataması yaparken birbiri ardına gelen cluster’ları kullanmak gibi bir kaygı taşımıyor; boş bulduğu ilk cluster’a atama yapıyor. Bu yöntem dosya atama işleminin hızlı yapılmasını sağlıyor ama bir dosyanın parçaları birbirini izlemeyen cluster’lar şeklinde sıralandığı zaman da dosyaya erişim daha uzun zaman alıyor. Dosyaların bu şekilde birbiri ardına gelmeyen cluster’lar şeklinde sıralanmaları parçalanma (fragmentation) olarak adlandırılıyor ve bir süre sonra sistem performansını hissedilir oranlarda düşürüyor. Bu sorunu çözmek için dosyaları arka arkaya gelen bloklar şeklinde düzenleyen bir defragmentation programına, örneğin PCTOOLS’un COMPRESS.EXE’sine gereksinim var. DOS 6.0 ve üzerinde ise DEFRAG komutu aynı işi yapıyor.
Evet sanırım 44 nolu hücrede kalmıştık. Bu hücredeki değer 102. 102 Nolu hücreye gittiğimizde 103 rakamını görüyoruz. 103 Nolu hücrede yolculuğumuz sona eriyor çünkü burada bir başka hücrenin numarası yok, dosya sonu işareti var. Demek ki dosyamız 40, 41, 42, 44, 102 ve 103 nolu cluster’ları kaplıyor.
Peki bu bilgileri kullanarak silinen bir dosyayı nasıl kurtarırız? Norton Utilities’in yaratıcısı Peter Norton bu soruyu yanıtlayarak adını tüm dünyada duyurmuştu. Şimdi Norton’un bu işi nasıl başardığını anlamaya çalışalım. Ama silinen bir dosyayı kurtarabilmek için disk üzerinde bir işlem yapmamamız gerektiğini de bu arada anımsatalım.
Bir dosyanın disk üzerindeki yerini belirlemek için hem FAT’i hem de dizini kullanmamız gerekiyor. Dizinden aldığımız bilgilere FAT’deki bilgileri de ekleyerek dosyanın yerleşimini çok kolay bir şekilde takip edebiliyoruz. Disk üzerinde yer alan bir dosya silindiği zaman dizine gidiliyor ve dosyanın isminin ilk karakteri “Õ” olarak değiştiriliyor. Daha sonra dizin bilgisinde yer alan başlangıç cluster bilgisi kullanılarak dosyanın FAT’de kullandığı hücrelere gidiliyor ve bu hücrelere gerektiğinde bir başka dosyada kullanabilme amacı ile 0 değeri yükleniyor (0 değeri o cluster’ın dosya atama işleminde kullanılabilir olduğunu gösteriyor). Görüldüğü gibi dosyanın disk üzerinde kapladığı alana fiilen dokunulmuyor, yalnızca bu alanları tanıtan bilgiler siliniyor. Bizim dosya örneğimizde 0 değeri yüklenilerek kullanıma açılan cluster’lar 40, 41, 42, 44, 102 ve 103. Bu cluster’lara yeni dosya bilgileri aktarılmadığı sürece de dosya bilgileri disk üzerinde bozulmadan kalıyor. Ama bir dosya yaratma ya da kopyalama işlemi yapılırsa bu kullanıma açılan bölümlerden yararlanılması ve buralara yeni dosya bilgilerinin yazılması olasılığı var. Bu durumda silinen dosyamızı kurtarmak hayal olabilir (silinen dosyaları kurtarmak için neden disk üzerinde bir işlem yapmamanız gerektiğini anladınız sanıyorum). UNDELETE komutu ilk önce dizine giderek isim bölümünde ilk karakteri “Õ” olan bir kayıt bulunup bulunmadığına bakıyor. Eğer böyle bir kayıt varsa dosya ile ilgili bilgileri alıyor. Nedir bu bilgiler? Dosyanın büyüklüğü, başlangıç cluster’ı ve tarih ile saati gibi bilgiler. Şu anda dosyanın ilk cluster’ını kurtarmış durumdayız. Üstelik dosyanın büyüklüğünü bildiğimiz için kaç adet cluster kullanılacağını da saptayabiliyoruz. Örneğimizde bize altı adet cluster gerekiyor. Ama FAT kayıtları silindiği için bu cluster’ların hangi cluster’lar olduğunu saptayamıyoruz. Bu cluster’lara nasıl erişebiliriz? İlk önce dosyanın birbiri ardına gelen cluster’lar şeklinde disk üzerinde yer aldığını varsayalım. Bu durumda 40’dan sonra gelen cluster’ları teker teker inceleyip bu cluster’ların bir dosyaya atanmış olup olmadığını kontrol edebiliriz. Örneğimizde 41 ve 42 nolu cluster’lar bir dosyaya atanmamış görünüyor. Bizim dosyamızın parçaları olma olaşılığı var. Ama şu anda yalnızca bir olasılık çünkü bu cluster’lar zaten başından beri de boş olabilirler ya da silinmiş bir başka dosyanın cluster’ları olabilirler. Üstelik bu cluster’lardan emin olsak bile sonraki cluster’ın (43 nolu cluster) bizim dosyamıza ait olmadığı kesin. Dolayısıyla bir sonraki cluster’ın hangisi olduğunu bulmak gibi bir sorunla karşı karşıyayız. Bu oldukça büyük bir sorun ve kolay kolay da çözülecek gibi değil. Bu yüzden sorunu ilk çözen kişi olan Norton da bir anda zenginler kervanına katılmış. Neyse, biz silinmiş dosyaları kurtarma işlemini burada bitirelim ve konumuza devam edelim.
Alt dizinler de disk üzerinde herhangi bir dosya gibi kaydedilirler. Yalnızca özellik kısmında dizin biti 1 değeri ve büyüklük bölümünde de 0 değeri yer alır. Alt dizinler de disk üzerinde cluster’lar dizisi şeklinde yer alırlar. Ama alt dizinlerin ilk iki kayıtı özellik arzeder. Bu kayıtlar bir alt dizinde DIR komutunu verdiğinizde karşınıza çıkan “.” ve “..” kayıtlarıdır. Bu iki kayıt da alt dizin kavramının kendisi gibi UNIX işletim sisteminden ödünç alınmışlardır. “.” kayıtı alt dizinin kendisine ve “..” kayıtı da bir üst dizine işaret eder. Bu kayıtların da büyüklük bölümleri 0’a eşittir. “.” Kayıtı alt dizinin başlangıç cluster’ını bulmada kullanılır. “..” Kayıtı ise tahmin edebileceğiniz gibi bir üst dizinin başlangıç cluster’ını verir. Eğer bir üst dizin kök dizin ise bu değer 0’a eşittir.
Şimdi alt dizinler için bir örnek yapalım. Kökün hemen altında DBASE adında bir alt dizin bulunsun. Bu alt dizinin kimlik kayıtı şu şekilde sıralansın:
ADI UZANTISI BÜĞÜKLÜĞÜ TARİHİ SAATİ BAŞLANGICI
DBASE 0 02/02/93 8:03 5000
Tabii bu kayıtın özellik (attribute) byte’ında dizin olup olmadığını gösteren biti de 1 olacak.
Başlangıç cluster’ı 5000 olarak gösteriliyor. Bu alt dizin içinde de yalnızca bir dosya bulunduğunu varsayalım. Bu dosyanın adı ADRES.DBF olsun ve disk üzerinde 6000 nolu cluster’dan başlasın. Şimdi DBASE dizinin kayıtlarına bir göz atalım:
AD UZANTI BUYUKLUK TARIH SAAT BASLANGIC ÖZELLİK
. 0 02/02/93 8:03 5000 Dizin
.. 0 02/02/93 8:03 0 Dizin
ADRES DBF 100 17/08/93 9:15 6000
“.” ve “..” kayıtları bir alt dizinin ilk iki kayıtı olarak yer almalıdır. Aksi durumda CHKDSK ya da DISKFIX, NDD gibi programlar bu alt dizini hatalı (invalid) olarak rapor eder. Yukarda da kısaca değindiğimiz gibi ADRES.DBF topu topu 100 byte büyüklüğünde olduğu halde kocaman bir cluster’ı kaplamaktadır.
Şimdi DOS’un C:DBASEADRES.DBF adresindeki dosyaya nasıl eriştiğini adım adım görelim.
1) DOS, kök dizinde DBASE adında bir kayıt olup olmadığını ve böyle bir kayıt varsa özellik kısmında dizin bitinin 1 olup olmadığını kontrol eder. Eğer her şey yolunda ise bu alt dizinin başlangıç cluster’ını not eder (5000).
2) DOS, dosya atama tablosuna gider ve 5000 nolu cluster’da ne tür bir bilgi olduğuna bakar. Bu alt dizin bilgileri tek bir cluster’a sığdığı için 5000 nolu cluster’da dosya sonu (EOF) işareti bulunmaktadır. Eğer alt dizin içinde çok fazla miktarda dosya yer almaktaysa dizinle ilgili bilgiler birden fazla cluster’da yer alabilir. Ama genel olarak alt dizinlerin çoğu için tek bir cluster yeterli olur. Çünkü sabit disk üzerindeki bir cluster, örneğin 2048 byte’lık yer kaplıyorsa, bu alan 64 adet dosya bilgisini tutmaya yeter (2048/32=64). Bu sayı da çoğu alt dizin için yeterlidir.
3) DOS, 5000 nolu cluster’ı okur. Bu cluster’da ADRES.DBF ile ilgili bir bilgi bulunup bulunmadğına bakar ve varsa dosyanın bilgilerini (başlangıç cluster’ı dahil olmak üzere) not eder. Örneğimizde, ADRES.DBF’nin başlangıç cluster’ı 6000 numaralı cluster idi.
4) DOS, 6000 nolu cluster’ı okuyarak dosyanın içeriğine erişir. ADRES.DBF tek bir cluster kapladığı için daha fazla bir okuma yapmaya gerek yoktur. Ama daha büyük bir dosya söz konusu olsaydı dosya atama tablosunda cluster sırasını izleyerek dosyanın geri kalan parçalarına erişimi de kolayca sağlanabilirdi.
Bir virüsün ya da kötü niyetli herhangi bir programın bu dosya yapısı içinde nasıl bir tahribata yol açabileceğini kolayca görebiliriz. Dosya atama tablosundaki bütün hücre içeriklerini değiştiren bir virüs düşünün. Bu durumda ne bir dosyaya ne de bir alt dizine erişmek mümkün olur (diski formatlamak gibi bir şey). Bu yüzden virüse karşı önlem olarak FAT ve daha başka bölümlerin kopyasının alınması önerilir.
belgesi-206