SD Kartı Yedeklemek

Bilgisayar ortamında çalışırken yedekleme yapmak önemlidir. Elektronik bileşenlerin arıza yapmayacağının garantisi yoktur. Özellikle zorlu şartlarda çalışan ve aktif olarak kullanılan bilgisayarlarda yedekleme yapmanın önemi büyüktür. Yedekleme işlerini bir alışkanlık haline getirmek, hatta yedekleme planları ve takvimleri oluşturmak sizi acil durumlardan kurtarabilir. Raspberry Pi’ın işletim sistemini ve dosyalarını barındıran SD kartın farklı ortamlarda nasıl tamamen ve kısmen nasıl yedeklenebileceği ile ilgili bilgileri bu başlıkta bulacaksınız.

SD kartı grafik masaüstü ortamında yedeklemek

Raspbian’ı grafik masaüstü ortamında kullanıyorsanız; SD kartı yedeklemek için çok basit ve başarılı bir araç SD Card Copier’ı programını kullanabilirsiniz. Program ile Raspberry Pi’ın üzerinde çalışmakta olduğu SD kartı canlı olarak yedekleyebilirsiniz. Bu özelliğiyle, Raspberry Pi kapatmadan mevcut diskin bir yedeğini oluşturmak gerektiğinde SD Card Copier çok kullanışlıdır. Dilerseniz ikinci bir kart okuyucu kullanarak da SD kartlarınızın yedeklerini oluşturabilirsiniz. Aslında bu yedekleme işi sadece SD kart ile sınırlı değildir, program ile USB üzerinden bağlanan tüm depolama ortamlarının birebir kopyasını oluşturabilirsiniz. Raspberry Pi’ınızı bir USB flash belleğe de yedekleyebilirsiniz.

Aşağıda ekran görüntüsü yer alan SD Card Copier’ı, Raspberry menüsünden Donatılar altındaki seçeneği ile çalıştırabilirsiniz:

Raspberry Pİ’a bir SD kart okuyucu aracılığı ile yedeğin kaydedileceği bir SD kartı bağladıktan sonra; kaynak diski (Copy From Device) ve hedef diski (Copy to Device) seçip Start düğmesine tıklatın. Kaynak diskin birebir kopyası (bit kopyası) hedef diske yazılacaktır.

Yukarıdaki ekran görüntüsünde Raspberry Pi’ın üzerinde çalışmakta olduğu disk (mmcblk0) haricen bağlanan /dev/sda aygıtına kopyalanmaktadır. Kopyanın kaydedileceği diskin boyutunun kaynak disk ile eşit veya daha büyük olması gerekir. New Partition UUIDs seçeneği ile hedef diskte yer alacak disk bölümlerinin yeni bir kimlik numarası (UUID) ile oluşturulması sağlanır. Bu özellik yedek diski Raspberry Pi’a haricen bağlamanız gerektiğinde işe yarar. Çünkü aynı kimlik numarasına sahip birden fazla disk bölümü aynı anda bağlanamaz. Bu nedenle New UUIDs seçeneğini işaretlemeyi düşünebilirsiniz.

SD kartı terminal ortamında yedeklemek

Bir yedekleme aracı olarak Linux’un eski ve kullanışlı araçlarından birisi olan dd (disk dump) oldukça meşhurdur. Bu aracı kullanarak dosya sisteminin (disk bölümü) kendisini içeren daha ufak boyutlu yedekler oluşturabilirsiniz. Ayrıca yedek dosyasını sıkıştırarak disk alanından tasarruf edebilirsiniz. dd programının temel kullanım şekli aşağıdaki gibidir:

if seçeneği ile (input file) yedeği alınacak kaynak ortam belirtilirken, of (output file) ile yedek dosyasının kaydedileceği hedef konum belirtilir.

Yedeklemek için Raspbery Pi bilgisayarını sudo init 0 yazarak kapatın ve SD kartı başka bir Linux bilgisayarına bağlayarak, bu karta karşılık gelen aygıt dosyasını tespit edin. Kartı başka bir Raspberry Pi’ın USB girişine bağlayacağınız bir kart okuyucu ile okutabilirsiniz. Eğer başka bir Raspberry Pi’ınız yoksa mevcut Raspberry Pi’ınızı işletim sistemi yüklü (Raspbian) başka bir SD kart ile başlatarak da okutabilirsiniz. Eğer bir Windows bilgisayarınız varsa, bir sanal makine içinden Kali Linux’u çalıştırarak da yapabilirsiniz. Kali Linux’u denemenizi tavsiye ederim. Bağlı blok aygıtları (harici disk, USB ve SD kartlar) listelemek için fdisk ve lsblok komutlarından faydalanabilirsiniz:

Yukarıdaki fdisk çıktısından görülebileceği gibi SD kart /dev/sdb aygıt dosyası ile ilişkilendirilmiş. İşte dd’nin if seçeneğine parametre olarak vereceğiniz kaynak disk bu.

Yedeklemeye başlamadan önce disk bölümlerinin disk üzerindeki yerleşimi hakkında bilgi sahibi olmak gerekir. fdisk komutunun çıktısında görülebileceği gibi sdb adlı diskimize (SD Kart) ait şu bilgiler yer almaktadır:

  1. 1. Disk Bölümü: 8192. Sektörden başlayıp 131071. Sektöre kadar devam eden 122880 sektörden oluşan (bir sektör 512Byte’tır) 60MB’lık FAT32 biçimli bir bölümün vardır.
  2. 2. Disk Bölümü: 131072. sektörden (ilk bölümün hemen ardından gelen sektör) başlayıp 4132863. sektöre kadar devam eden toplam 4001792 sektörden oluşan 1.9GB’lık bir Linux bölümünü vardır.

Eğer bu diski yedeklemek istersek diskin başından itibaren 4132864 (4132863+1)sektörlük kısmındaki verileri yedek dosyamıza dâhil etmemiz yeterlidir. Sektör sayısına 1 eklememizin nedeni sektör adreslerinin 0’dan başlamasıdır. Böylece 0. sektör ile birlikte kartın sadece işletim sistemine ait verileri içeren kısmını yedeğimize dâhil etmiş oluruz. Böylece minimum boyutta bir disk yedeğine sahip olmuş oluruz. dd komutu ile yukarıdaki gibi bir diskin yedeğini oluşturmak için yazılması gereken komut şöyledir:

Komuttaki bs ve count seçenekleri dikkatinizi çekmiştir. bs yani Block Size (blok boyutu) ile dd aracının SD karttan tek hamlede okuyacağı veri bloğunun boyutunu tanımladık. Bu boyut disk gibi medyalar için standart olarak 512Byte’tır. Count seçeneği ile 0 bloktan itibaren kaç adet bloğun okunacağını bildirdik. Böylece işlemin sonunda 512 * 4132864 = 1.97GB’lık bir yedek dosyamız oluşacak. Artık gerektiğinde bu dosyayı dd veya Win32DiskImager’ı kullanarak 2GB ve üstündeki kapasitedeki SD kartlara geri yazabiliriz. Yukarıdaki yedekleme komutu /home/pi dizini içinde yedek.bin adında 1.7GB lık bir dosyanın oluşmasını sağlayacaktır. Tabii ki bu dosyanın yedek olarak işe yarayabilmesi için Raspberry Pi’ın dışına taşımalısınız. Samba, FTP veya harici USB disk yolu ile bu işlemi gerçekleştirebilirsiniz.

Dilerseniz yedek dosyamızı oluşturma sırasında nasıl sıkıştıracağımıza da bakalım. Sıkıştırma işlemi disk alanından tasarruf etmemizi sağlayacak. Sıkıştırmak için gzip aracından faydalanacağız:

Yukarıdaki komut ile sdb aygıtından (SD kart) 4132864 sektörün (bir sektör 512 byte’tır) okunarak gzip aracına aktarılması ve sıkıştırılmış dosyanın yedek.gz adıyla kaydedilmesi sağlanmıştır.

ddaracını kullanarak yedekten geri alma işlemi ise aşağıdaki komutla gerçekleştirilebilir. Tabii ki bu işlem için SD kartı harici olarak bir başka bilgisayara bağlayarak gerçekleştirmelisiniz.

Burada /dev/sdb aygıtı yerine siz kendi aygıt adınızı (SD kart okuyucunuza karşılık gelen aygıt dosyası) yazmalısınız. SD kart okuyucunuzun aygıt adını sudo lsblk komutunun çıktısından görebilirsiniz. Yedeğinizi bir USB flash belleğe ya da harddisk’e almak için kitap da yer alan “Flash Belleği veya Harici Diski Raspberry Pi’a bağlamak” başlıklı konuya bakmanızı tavsiye ederim.

SD kartı Windows ortamında yedeklemek

Felaket senaryolarına karşı Raspberry Pi’ı yedeklemek gerekir. Yanlış bir işlem veya donanım arızası yaşandığında, elinizde düzgün çalışan bir yedeğin olması kolayca kaldığınız yerden devam etmenizi sağlar. Buradaki yedekten kasıt içerisinde işletim sistemi, boot bölümü ve pi kullanıcısına ait dosyaların yer aldığı tüm dosya sistemlerinin yedeklenmesidir.

Yedek alınırken SD kartın tamamı bit bit kopyalanır (boş olan yerler bile) ve bir dosyaya kaydedilir. Böylece SD kartın tam bir kopyası dosya olarak elde edilmiş olur. Bu tür dosyalara disk imajı ya da disk kalıbı adı da verilir ve standart olmamakla birlikte, .img ve .bin gibi uzantılara sahiptirler.

Windows ortamında Raspberry Pi’ın diskini yedeklemek için kullanılan programlardan en meşhuru Win32DiskImager adlı ücretsiz programdır. Raspberry Pi’ı kapattıktan sonra SD kartı bir okuyucuya yerleştirip Win32DiskImager ile her şeyinizi bir dosyaya yedekleyebilirsiniz.


Win32DiskImager programının ana ekranı

Yedekleme işlemi için programın kullanımı şöyledir:

  1. SD kartı bir okuyucuya yerleştirin ve hangi sürücü ile temsil edildiğini öğrenin (yukarıdaki örnekte F: sürücüsüdür)
  2. Klasör simgeli düğmeye tıklatarak yedek dosyasının kaydedileceği bir dosya adı belirleyin.
  3. Yedekleme işlemini başlatmak için “Read” etiketli düğmeye tıklatın.(Kartın boyutuna göre bu işlem biraz zaman alabilir).

Bir felaket durumunda Raspberry Pi’ı yedek aldığınız konuma geri getirmek için; Raspberry Pi’ı kapatın ve SD kartı bir okuyucuya yerleştirerek aşağıdaki adımları uygulayın.

  1. SD kartı bir okuyucuya yerleştirin ve hangi sürücü ile temsil edildiğini öğrenin (yukarıdaki örnekte F: sürücüsüdür)
  2. Klasör simgeli düğmeye tıklatarak bilgisayarınızda kayıtlı yedek dosyasının yolunu gösterin.
  3. Yedekten geri alma işlemini başlatmak için “Write” etiketli düğmeye tıklatın.

Win32DiskImager, Windows ortamında kullanılan basit ve sorunsuz bir yedekleme/geri yükleme programıdır lakin profesyonellerin tercih ettiği bir yöntem değildir. Şöyle ki:

Win32DiskImager SD kartın tüm kayıt alanını (veri ile dolu olup olmaması fark etmez) birebir kopyalar. Dolayısıyla 4GB’lık bir Raspberry Pi’ın dosya sistemi 8GB’lık bir kart üzerinde bulunuyorsa (raspi-config aracı ile genişletilmemiş veya daha ufak boyutlu bir karttan geri yükleme yapılarak yazılmış olabilir) Win32DiskImager 8GB’lık bir yedek dosyası oluşturur.

Diğer taraftan üreticilerin üretmiş olduğu SD kartlar bazen farklı boyutlarda olabiliyor. Örneğin 8GB olarak satın aldığınız bir kart 8192 MB olması gerekirken 8191 veya 8193 gibi değerlerde olabiliyor (veya Kilobyte’ler mertebedesinde farklar da olabilir). Böyle bir durumda Win32DiskImager kullanarak bu tür SD kartları birbirine kopyalayıp yazamazsınız. Win32DiskImager yazılacak kartın yedek ile aynı boyutta veya daha büyük olmasını ister.

SD kartı Linux ortamında bağlamak

Bir SD kartı, kart okuyucu kullanarak bağlamak için öncelikle SD kartın aygıt dosyası adını öğrenmek gerekir. Bunun için blok aygıtları listeleme komutu lsblk kullanılabilir. SD kartı bir kart okuyucuya yerleştirdikten sonra, okuyucuyu Raspberry Pi’ın USB girişlerinden birisine bağlayın ve lsblk komutunu çalıştırın:

Yukarıdaki çıktıda Raspberry Pi OS yüklü bir SD kartın sda1 ve sda2 aygıt dosyaları ile temsil edilen 2 bölümden oluştuğunu görüyoruz. Raspbian’ın root bölümünün yer aldığı sda2’yi bir dizine bağlamak için aşağıdaki komutları çalıştıralım:

Artık harici isimli dizin içerisinden SD kartın Linux bölümüne erişebilir, dosya kopyalayıp değişiklik yapabiliriz. Kart okuyucuyu çıkarmadan önce bağladığınız sda2 bölümünü umount komutu ile ayırmayı unutmayın:

SD kartı Windows ortamında bağlamak

Windows işletim sistemi üzerinde, normal yollarla Raspberry Pi’ın yüklü olduğu SD karta erişmek mümkün değildir. Windows, Linux’un aksine Ext 2/3/4, UFS2, HFS ve ReiserFS/4 gibi dosya sistemlerini destelemez. Ancak Windows üzerinde harici programlar kullanarak bu dosya sistemlerine erişmek mümkündür.

Paragon firması tarafından üretilen Linux File Systems for Windows (LFSW) yazılımı Ext2/3/4 dosya sistemlerini hem okuyup hem de yazabilir, Btrfs ve XFS dosya sistemlerini ise sadece okuyabilir. Programı web sayfasından indirip kurduktan sonra çalıştırın ve SD kartınızı bir kart okuyucuya yerleştirdikten sonra bir Windows makinesine bağlayın. LFSW kartın içindeki dosya sistemlerini otomatik olarak bağlayacaktır. LFSW’nun dosya sistemlerini tamir etme, biçimlendirme ve dışarıya imajını almak gibi özellikleri de vardır. Ayrıca tüm işlevlerini kullanabileceğiniz bir komut satırı arayüzü (CLI) de sağlar. Program 10 günlük deneme süresi içinde sınırsız olarak kullanılabilir.

Paragon’s Linux File Systems for Windows programının ekran görüntüsü

Disk Internals firması tarafından sunulan Linux Reader, Ext 2/3/4, UFS2, HFS ve ReiserFS/4 gibi dosya sistemlerine salt okunur olarak erişmek için kullanışlı bir programdır. www.diskinternals.com/linux-reader/ adresinden programı indirip kurduktan sonra SD kartı bir kart okuyucuya takarak bilgisayara bağlayın. Linux Reader tespit ettiği dosya sistemlerine bir sürücü harfi atayacaktır. Linux Reader dosya sistemi üzerinde bir değişiklik yapamaz sadece bir dışarı aktarma sihirbazı olarak çalışır.


Disk Internals – Linux Reader ekran görüntüsü

Ortak Dosya Sistemi Olarak FAT32

Fat32 dosya sistemi Windows’un dâhili olarak desteklediği dosya sistemlerinden birisidir ve Linux (ve bazı gömülü Linux dağıtımları tarafından) tarafından da desteklenir. Rasberry Pi üzerinde bir dosya sistemini FAT32 olarak biçimlendirmek mümkündür; ancak bu Linux’un başarımı açısından tavsiye edilmez. Linux işletim sistemleri en iyi Ext(*) dosya sistemleri üzerinde çalışır.

Disk Kalıbını Harici Olarak Bağlamak

Diyelim ki elinizde Win32 Disk Imager ya da dd programı ile alınmış bir SD kart yedeği var (Disk imajı). Normal şartlarda bu yedeğin içerisindeki dosyalara ulaşabilmek için yedeği bir SD karta yazdırmalı ve Raspbery Pi’a enerji verip başlatmanız (boot) gerekir. Peki, bu iş size zahmetli geliyorsa ya da yedek dosyası hasarlıysa, yani boot etmiyorsa? Yapılabilecek en basit işlem bu yedek dosyasını bir USB diske kopyalayıp Raspberry Pi ile bağlamaktır (mount). Yedek dosyasının içerisinde normalde 2 adet bölüm bulunur. Vfat ve Ext4 bölümleri. Öncelikle SD kartın boyutuna göre değişen bu bölümlerin hangi sektörlerden başladığını öğrenmek gerekir. Elimizde bir USB bellekte kayıtlı yedek.img adında bir yedek dosyasının bulunduğunu varsayacağız. USB Flash belleği hakkında detaylı bilgiyi “Flash Belleği veya Harici Diski Raspberry Pi’a bağlamak” başlığında bulabilirsiniz. Yedek dosyasını içeren USB Flash belleği bağlamak için:

İmaj dosyasının içerdiği disk bölümlerini görmek için:

Yukarıda görüldüğü gibi disk yedeğimiz 8192. ve 131071 arasındaki 122880 sektörden oluşan 60MB boyutunda W95 FAT32 biçimli bir bölüm ile 131072. ve 4132863. Sektör arasındaki 4001792 sektörden oluşan 1.9GB boyutlu bir Linux bölümünden (Varsayılan olarak Ext4’dür) oluşuyor. İl bölümü bağlayıp içerisindeki dosyaları görmek için öncelikle bölümün bağlanacağı bir dizin oluşturalım (bolum_vfat):

Şimdi daha önce /mnt/usb dizinine bağladığımız USB Flash belleğimizde bulunan yedek.img dosyasını bu dizine bağlayalım:

mount komutunun offset seçeneğine vediğimiz seçenek olan 4194304’ü, VFAT bölümün başlangıç sektörü olan 8192’yi 512 (bir sektör) ile çarparak bulduk. Bağlama işleminden sonra /mnt/bolum_vfat dizininde yapılacak tüm değişiklikler yedek.img dosyasına yansır. Çalışmanız bittikten sonra yedek.img dosyasını bu dizinden ayırmayı unutmayın:

Benzer şekilde EXT4 bölümü bağlamak için aşağıdaki komutu kullanabilirsiniz:

Dosyaların Bütünlüğünü Doğrulamak

Almış olduğunuz yedekleri muhafaza ederken veya bir fiziksel konumdan başka bir fiziksel konuma kopyalarken bozulmadıklarından emin olmalısınız. Aksi takdirde, olası felaket gerçekleştiğinde yedekler işinize yaramayacaktır. Bu başlıkta bir yedek dosyasının bozulmaya uğrayıp uğramadığını anlamayı sağlayan yaklaşımlar ve uygulama yöntemleri hakkında bilgiler bulabilirsiniz.

Sayısal bilgisayarların dünyasında dosyalar 0 ve 1 değerlerinden oluşan verilerin bir araya gelmesinden oluşmuştur. Bu veriler bazen sabit diskin bir bölgesinde depolanırken bazen de ağ/internet üzerinden taşınarak bir noktadan başka bir noktaya kopyalanır. Sayısal veri iki nokta arasında aktarılırken, değişikliğe uğramadan, yani bütünlüğü bozulmadan aktarılmalıdır. Aksi takdirde dosyanın kendisi, yani içeriğini oluşturan veri bozulmuş kabul edilir. Nadiren de olsa veriler aktarım sırasında bozulabilir. Neyse ki verinin taşınmasını sağlayan protokoller (aktarım kuralları) bu bozulmaları tespit edebilecek kontrollere/özelliklere sahiptir. Yapılan bu kontrollere bütünlük kontrolü adı verilir. Verinin bozulduğu tespit edilirse kaynaktan tekrar gönderilmesi veya veri kayıt ortamından (disk, ram) yeniden okunması talep edilir.

Daha somut bir örnek vermek gerekirse; örneğin 500MByte’lık (500*1024(MB)*1024(KB)*8(bit) = 4194304000 bit) bir programın paket dosyası internetten indirilirken yaklaşık 4 milyar bit’ den oluşan 0 ve 1 verisi aktarılır. Bu 4 milyar veriden sadece bir tanesi bile düzgün aktarılamazsa dosya bozulmuş olur. Dediğimiz gibi ilgili aktarım protokolleri verinin bütünlüğünü kontrol eden özelliklere sahiptir; fakat her zaman başarılı olamayabilirler ve veri bozuk olarak aktarılabilir. Örneğin internetten indirdiğiniz bir Raspberry Pi kalıp dosyasının önemli bir biti bozuk aktarıldığında Raspberry Pi açılış yapamayabilir.

İnternetten indirilen, özellikle büyük ebatlı dosyaların indirme sayfalarında çeşitli bütünlük kontrol değerleri paylaşılır (örn.:bd2c04b94154c9804cc1f3069d15e9 gibi). Bütünlük kontrolünün bir başka adı da checksum’dır. Bu değer ilgili dosyanın bir özeti gibidir ve dosyadaki tek bir bit bile değişse çok farklı bir değere dönüşür (örn.:a64d742bc525b548f0435581fac58). İndirme sayfasında sunulan bütünlük kontrol değeri, indirdiğimiz dosyanın orijinali ile birebir aynı olup olmadığını kontrol etmemizi sağlar.

Özet oluşturmada kullanılan SHA-128 (SHA1), SHA-256 (SHA2), SHA-512(SHA2), Ripemd-256, MD5 ve CRC gibi çok sayıda özet (hash) elde etme algoritması vardır. Bunlardan en güvenlisi SHA algoritmasıdır. CRC ve MDx algoritmalarının özellikle bilişim güvenliği uygulamalarında kullanılamayacak derecede zafiyetlere (çakışma/collision) sahip oldukları keşfedilmiştir.

Diskte kayıtlı bir dosyanın bütünlük kontrol değerini hesaplatmak çok kolaydır. Örneğin;

Yukarıdaki gibi bir işlemde sha256sum programı kullanılarak passwd dosyasının sha256 algoritmasına göre bütünlük doğrulama kodu hesaplanmış ve ekrana basılmıştır. Bu şekilde internetten indirdiğiniz dosyaların bütünlük değerini hesaplatıp sunulan değer ile karşılaştırabilirsiniz. Diğer algoritmalar için kullanabileceğiniz programların bazıları da şunlardır: sha1sum, sha512sum, md5sum.

Bütünlük kontrol araçlarının diğer işletim sistemi sürümlerini de kolayca bulabilirsiniz. Örneğin benzer işlemi Windows ortamında gerçekleştirmek için MD5 & SHA Checksum Utility[1] adlı programı kullanarak birçok kontrol değeri hesaplatabilirsiniz.


Windows ortamında bütünlük değeri hesaplatma


[1]MD5 & SHA Checksum Utility: https://raylin.wordpress.com/downloads/

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.