Dosya Sisteminin Yapısı (SD Kart) ve Onarım

Raspberry Pi bilgisayarında, SD kart’ın elektronik sisteminde oluşan donanımsal sorunlardan veya kontrolsüz kapanmalardan (enerji kesilmesi) kaynaklı dosya sistemi hataları oluşabilmektedir. Bu hatalar bazen sistemin açılış yapamamasına neden olabilir. Linux’un dosya sistemi hiyerarşik olarak boot block, superblock, inode, dentry ve file gibi mantıksal kısımlardan oluşur. Bu kısımların tamamı disk üzerindeki mantıksal olarak ayrılmış kısımlarda saklanır.

Boot block: Diskin ilk birkaç sektörü üzerine yerleşen bu blok işletim sisteminin ön yüklemesini yapan bootstrap adındaki programın kayıtlı olduğu kısımdır. Bootstrap işletim sistemini tetikleyen basit bir programdır. Boot bloğu hasara uğradığında işletim sistemi başlayamaz ve çoğu durumda neden başlayamadığı hakkında bilgi mesajı da görüntülenemez.

Superblock: Dosya sistemi hakkında en üst düzeyde bilgi tutan ve hiyerarşinin en üstünde yer alan kısımıdır. Temel olarak dosya sisteminin türü, blok boyutu, blok sayısı, boş blok sayısı, inode tablolarının konumu gibi çok önemli bilgileri tutar. Bu nedenle diskin üzerinde birden fazla yedek kopyası bulundurulur. Onarım sırasında, bu kurtarma kayıtlarından faydalanılır.

Inode (index node): Dosyalar ve dizinler hakkında meta bilgileri tutan veri yapılarını işaret eder. Bu veri yapıları dosyanın erişim izinleri, boyutu, sahibi, erişim zamanları, silinme zamanı (dosyalar gerçekte silinmez), dosyanın disk üzerinde bulunduğu bloğun numarası ve dosyanın kilitli olup olmadığı (bir proses tarafından yazılması sırasında kilitlenir) gibi bilgiler içerir. Her dosyanın eşsiz bir inode numarası vardır (index node) ve bu numara inode bloklarında dosya hakkında tutulan veri yapısına erişmek için kullanılır. Yani ilk akla geldiği gibi dosyaların meta bilgilerine erişmek için dosya ismi yerine inode numarası kullanılır. İnode’ların işaret ettiği veri yapıları içerisinde dosya adları tutulmaz bunun yerine dosya adlarını tutmak için dentry (directory entry) ya da dizin adı verilen yapılar kullanılır. Inode numarasının kendisi ya da işaret ettiği bloğun hasara uğraması durumunda dosya erişilmez olabilir.

Dentry (directory entry): Temel olarak inode ve file bloklarını birbirleri ile ilişkilendiren yapılardır. Dosya adları bu bloklar sayesinde ait oldukları veri (file) blokları ile ilişkilendirilir. Aynı zamanda dizin hiyerarşisi de bu bloklar sayesinde inşa edilir. her bir dentry bir inode numarasını bir dosya adına ve bir üst dizine eşler.

File (data block): Dosyaların içeriğini oluşturan verilerin tutulduğu bloklardır. Bu bloklar bozulduğunda dosya tamamen veya kısmen kaybedilmiş olur.

  1. Bozulan veri(file) bloklarının onarılması

    En sık karşılaşılan durum başlangıcın ilk aşamalarında ekrana basılan “Kernel Panic : VFS :Unable to mount root fs on unknown-block” mesajıdır. Bu mesaj kök (/) dosya sisteminde yer alan bir veri bloğunun okunamadığını ve kök dizinin bağlanamadığını söyler. Böyle bir durumda (Kernel Panic) Raspberry Pi bilgisayarı açılışına devam edemez. Çoğu durumda bu hatayı tamir etmek mümkündür. Bunun için SD kartı, bir kart okuyucu ile başka bir Raspberry Pi bilgisayarına takarak hataları onarmak gerekir. SD kartı taktıktan sonra lsusb komutu ile kartın algılanıp algılanmadığına bakalım:

    pi@raspberry:~ $ lsusb

    Bus 001 Device 006: ID 14cd:6700 Super Top Card Reader

    Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Yukarıdaki lsusb çıktısında Super Top Card Reader adında bir USB aygıtının algılandığı gözükmektedir. Linux grafik kipinde çalışırken bir USB depolama aygıtı takıldığında otomatik olarak dosya sistemini bağlamaya çalışır. Linux literatüründe dosya sistemi aygıtları, veriler bloklar halinde okunup yazıldığından blok aygıtlar olarak da bilinirler. Bunu lsblk komutu çıktısından görebilirsiniz:

    pi@raspberry:~ $ lsblk

    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

    sda 8:0 1 7.4G 0 disk

    ├─sda1 8:1 1 41.8M 0 part /media/sda1

    └─sda2 8:2 1 7.4G 0 part /media/sda2

    mmcblk0 179:0 0 7.5G 0 disk

    ├─mmcblk0p1 179:1 0 41.8M 0 part /boot

    └─mmcblk0p2 179:2 0 7.4G 0 part /

    Yukarıdaki ekran çıktısında Raspberry Pi’a kart okuyucu ile bağlanan aygıtın, sda aygıt ismi ile ilişkilendirildiği, 1.9GB kapasiteye sahip olduğu ve içerisindeki bölümlerin (sda1 ve sda2) /media/ altındaki dizinler ile ilişkilendirildiği gözüküyor (Bağlanan dosya sistemlerinin detaylı bir listesini görmek için findmnt aracını kullanabilirsiniz). Dosya sisteminin onarımına başlamadan önce bu bağlantıların aşağıdaki gibi kaldırılması gerekir:

    pi@raspberry:~ $ sudo umount sda1

    pi@raspberry:~ $ sudo umount sda2

    Dosya sistemleri üzerinde otomatik olarak hata taraması yapıp düzeltmek için fsck aracı aşağıdaki gibi çalıştırılabilir:

    pi@raspberry:~ $ sudo fsck -fp /dev/sda1

    pi@raspberry:~ $ sudo fsck -fp /dev/sda2

  2. Bozulan superblock’ların onarılması

    Daha ciddi dosya sistemi arızalarından birisi de bölüm tablosunun hasara uğramasıdır. Bu hata suberblock adı verilen meta bilgilerinin tutulduğu kayıt alanlarının hasara uğramasından kaynaklanır ve çok sayıda dosya kaybıyla sonuçlanabilir. Böyle bir hasarın çıktısını aşağıdaki dmesg çıktısında da görebilirsiniz:

    pi@raspberry:~ $ dmesg

    [31497.393080] blk_update_request: critical medium error, dev sda, sector 0

    [31497.393090] Buffer I/O error on dev sda, logical block 0, async page read

    [31499.459741] blk_update_request: critical medium error, dev sda, sector 1

    [31500.146394] blk_update_request: critical medium error, dev sda, sector 2

    [31498.757486] Buffer I/O error on dev sda, logical block 0, async page read

    [31498.757540] sda: unable to read partition table[31500.146407] Buffer I/O error on sda, logical block 483312, async page read

    Yukarıdaki dmesg çıktısında, bağlanmaya çalışılan dosya sisteminin 0., 1. ve 2. sektörlerindeki verilerin fiziksel olarak hasara uğraması sonucunda, bölüm tablosunun (dosya yerleşim tablosunu içinde bulunduran alan) okunamadığı ve dosya sisteminin bağlanamadığı anlaşılmaktadır. Dosya yerleşim tablosu diskte kayıtlı dosyalar için çok hayati önemde bilgiler tutan bir tablodur ve disk üstünde superblock adı verilen bloklarda kayıtlıdır.

    superblock hasara uğradığında; sadece veri bloğunun (file block) hasarlı olduğu duruma göre meta verisi tutulan birçok dosya kaybedilebilir veya duruma göre dosya sisteminin tamamı erişilmez olabilir. Bu daha ciddi bir hasar türüdür. fsck ile bu hata giderilmeye çalışıldığında işlemin başarısız olduğunu söyleyen aşağıdaki gibi bir uyarı mesajı görüntülenir:

    pi@raspberry:~ $ sudo fsck -fy /dev/sda

    fsck from util-linux 2.29.2

    e2fsck 1.43.4 (31-Jan-2017)

    fsck.ext2: Input/output error while trying to open /dev/sda

     

    The superblock could not be read or does not describe a valid ext2/ext3/ext4

    filesystem. If the device is valid and it really contains an ext2/ext3/ext4

    filesystem (and not swap or ufs or something else), then the superblock

    is corrupt, and you might try running e2fsck with an alternate superblock:

    e2fsck -b 8193 <device>

    or

    e2fsck -b 32768 <device>

    Bu durumda superblock‘ların, yedeklerinin kullanılarak tamirin gerçekleştirilmesi gerekir. Yedek blokların nerede olduğunu görüntülemek için bir dosya sistemi oluşturma aracı olan mke2fs kullanılmalıdır. mke2fs aracı –n seçeneği ile kullanıldığında superblock yedeklerinin adreslerini listeler. Aşağıdaki komutu ve çıktısını inceleyin:

    pi@raspberry:~ $ sudo mke2fs -n /dev/sda

    mke2fs 1.43.4 (31-Jan-2017)

    Creating filesystem with 483328 4k blocks and 120960 inodes

    Filesystem UUID: b3ec0c9d-921b-4133-bca4-e683aec0689a

    Superblock backups stored on blocks:

    32768, 98304, 163840, 229376, 294912

    Çıktıda arızalı superblock‘ların 32768, 98304, 163840, 229376 ve 294912 numaralı bloklarda birer yedeklerinin olduğu görülmektedir. Bundan sonra yapılacak işlem yedeklerden biri kullanılarak hasarlı superblock‘un yeniden oluşturulmasıdır. Yedeğin oluşturulması için e2fsck aracı aşağıdaki gibi kullanılabilir:

    pi@raspberry:~ $ sudo e2fsck -b 32768 /dev/sda

    e2fsck 1.43.4 (31-Jan-2017)

    e2fsck: Invalid argument while trying to open /dev/sda

     

    The superblock could not be read or does not describe a valid ext2/ext3/ext4

    filesystem. If the device is valid and it really contains an ext2/ext3/ext4

    filesystem (and not swap or ufs or something else), then the superblock

    is corrupt, and you might try running e2fsck with an alternate superblock:

    e2fsck -b 8193 <device>

    or

    e2fsck -b 32768 <device>

    Yukarıdaki ekran çıktısı 32768 blok numaralı yedekten kurtarma yapılamadığını söylüyor. Bu durumda –b seçeneğine diğer superblock yedeklerinin blok numaralarını vererek işlemi tekrarlamalısınız.

    Hatırlatma: Açılış sırasında dosya sistemi hatalarının otomatik olarak giderilmesini sağlayan ayar için kitabın “Dosya Sistemi Hatalarının Açılışta Otomatik Onarılmasını Sağlamak” başlıklı konusuna bakabilirsiniz.

     

KULLANIM SARTLARI

Bu web sitesinin içeriginin tüm haklari saklidir. Kitabin/site içeriginin hiçbir bölümü, yazarinin yazili izni olmaksizin tekrar üretilemez, bir erisim sisteminde tutulamaz, herhangi bir biçimde elektronik, mekanik, fotokopi, ses kayit ya da diger yollarla iletilemez. Ancak istisna olarak; ticari olmayan amaçlar için yazara önceden bilgi vermek ve raspberrypikitabi.com adresini kaynak göstermek kaydiyla 10 sayfaya kadar kullanilabilir. Kitapta kullanilan logolar, firmalarin tescilli logolaridir. Raspberry Pi, Raspberry Pi Vakfi'nin ticari markasidir.



BILGILENDIRME

Bu kitapta Raspberry Pi, çesitli çevre birimleri ile düsük voltaj elektronik bilesenlerin bir arada kullanildigi uygulamalar yer almaktadir. Uygulamalarin tamami Raspberry Pi'in üzerinde kosan Linux çekirdegi ve açik kaynak kod özgür yazilimlar kullanilarak gerçeklestirilmistir. Uygulamalar gerçeklestirilirken ortaya çikabilecek elektriksel sorunlar veya kullanici hatalari nedeniyle cihazlar zarar görebilir veya veri kaybi yasanabilir. Ayrica, kitapta anlatilan konularin uygulanmasi sonucu ortaya çikabilecek her türlü lisans ihlali/kanuni ihlal ve zararin sorumlulugu uygulayan kisiye aittir. Olusabilecek herhangi bir zarardan yazar sorumlu tutulamaz.

Leave a comment

Your email address will not be published. Required fields are marked *