Sorunun çözümü

Lütfen dikkat!

Burada açıklananları uygulamak şu anda yüklü sisteminizi kaybetmenize ve eğer mevcutsa bir önceki sisteme dönmenize neden olacaktır! Seçim sizin...

Kolay yöntem

İşi kolayca halletmek için elinizde olması gerekenler:

  • Kendi kendine bir linux sistemi başlatabilecek ve fdisk programı mevcut olan bir disk (floppy veya CD) - son zamanlarda çıkan dağıtımların çoğunun oluşturduğu kurtarma diskleri bu işi görecektir.

  • fdisk -l ve fdisk -ul komutlarının çıktılarının yazılı olduğu bir kağıt.

Bu kadarı

  1. Linux'u başlatmaya,
  2. fdisk /dev/hda (veya hangi disk kurtarılacaksa, yani /dev/hdx) komutu ile fdisk'i başlatmaya,
  3. fdisk'i kullanarak zarar görmüş diskteki tüm bölümleri silmeye (d seçeneği ile),
  4. Kağıdınızdaki bilgi ve fdisk kullanarak tüm birincil (1 - 4) bölümleri oluşturmaya,
  5. bu bölümlere uygun etiketleri (t seçeneği ile, mesela Linux Swap için 82, Linux ext3 için 83, MS Windows Fat32 için c gibi etiketler vardır, L seçeneği bütün listeyi gösterir) vermeye,
  6. gerekli mantıksal bölümleri oluşturmaya

yeterlidir.

Şu an yüklü SuSE sistemimde, ve bu işlemi başka kişilerin bilgisayarlarında denediğimde iyi sonuç aldım.

Daha önce bazı fdisk sürümlerinin diski silindir yerine sektör cinsinden ele aldığından bahsetmiştim. Kağıdınızdaki fdisk -ul kısmı bu iş içindir, yani bölümleme tablosu sektör cinsinden bloklarla gösterecektir.

fdisk -ul listesini kullanacak şekilde başlatmak için fdisk'i fdisk -u ile başlatmalısınız. Bana göre sektörle çalışmak çok kötü bir fikir, çünkü silindirleri akılda tutmak sektörlere göre çok daha kolay, ama bilgim dışında gerçekten kullanışlı olan bir yönü olabilir.[49]

fdisk küçük ve akıllı bir programdır. Çeşitli sürümleri var, ama her zaman Linux sürümlerini tercih ederim.

fdisk programını kullanırken w tuşuna dikkat etmelisiniz, bu disk bölüm tablosuna diske yazar, eğer bir yanlışlık yaptığınızı düşünüyorsanız q (quit) tuşu veya Ctrl+C ile yaptığınız değişiklikler diske yazılmadan çıkabilirsiniz.

Yeni bölüm tablonuzu oluşturduğunuzda (yukarıda bahsettiğimiz gibi) Linux'unuzu başlatın. Büyük ihtimalle bunu başaramayabilirsiniz: önyükleyiciniz de (lilo/grub) bozulmuş olabilir, bu durumda bir başlatma disketine veya bilgisayarınızı başlatabileceğiniz bir CD'ye ("booting the installed partition" (yüklü bölümden başlat) seçeneği seçilmeli) ihtiyacınız olacaktır.

Eğer lilo kullanıyorsanız, root olarak giriş yaptıktan sonra hemen "lilo" komutunu girin ve önyükleyicinizi tekrar kurun. Elbette Grub kullanıyorsanız Grub'u yüklemelisiniz.

Linux'unuza kavuşmuş olmalısınız, test edin. Eğer çalışabilir durumdaysa MS Windows'u başlatmayı da deneyin. Eğer yapamıyorsanız küçük bir şansla windows bölümündeki verilerinizi Linux'tan sektörler halinde okuyabilirsiniz. Eğer verinizin bulunduğu disk sektörlerini belirleyebilirseniz dd kullanarak verilerinizi bir dosyaya kopyalayabilirsiniz. Bu kurtarma operasyonu bu mini-NASIL belgesinin konusu dışında kalıyor.

Pek kolay olmayan yöntem

El ile yapmak

Burada anlatılanlar önceki bölümdeki durum kullanılamadığında uygulanmalıdır. Mesela fdisk çıktısı kağıdınız olmadığında.

Öncelikle fdisk dışında diske yazma gerçekleştirmeden önce bilgilerinizi silmediğinizden emin olun, böylece blok blok deneme yöntemini kullanabilirsiniz. Bunun için deneyeceğiniz bölümün ilk bloğunu bilmelisiniz. Mesela eğer 153 uymazsa 154'ü, 154 olmazsa 155'i şeklinde ilerleyerek deneyebilirsiniz.

Bu biraz yorucu olabilir, ama eğer Linux bölümünüzün boyutunu biliyorsanız, kazanmak için bir şansını olabilir.

Linux hakkında bilgi ve diğer ipuçları

Çekirdek

Eğer bölüm tablonuzu bozdunuz ama henüz bilgisayarı yeniden başlatmadıysanız, hala çekirdekte saklı bölüm bilgisini geri alabilirsiniz:

cat /proc/partitions komutu ile:

major minor #blocks  name
3     0     19535040 hda
3     1      2096451 hda1
3     2      4980150 hda2
3     3            1 hda3 <----- bu bir ek bölümü temsil eder
3     5      4980118 hda5
3     6      4972086 hda6

hdparm

hdparm -g /dev/hda1/dev/hda1

geometry = 2432/255/63, sectors = 4192902, start = 63

Birkaç birim dönüştürmesi yapmanız gerekecek. Bloklar genellikle 1K uzunluğundadır. Sektörler disk sektörleridir ve genellikle 512 bayt uzunluğundadırlar. Ama genellikle disk bölümleme araçları silindirler ile çalışırlar (burada 255*63=16065 sektör) Bu bilgiyi kullanarak yeni bir bölüm tablosu oluşturabilirsiniz.

Bölümün başlangıcını biliyorum, ama sonu?

Linux bölümünün sonunu bilmiyor ama başlangıcını biliyorsanız, hala bölümü bağlayabilir ve yapısı hakkında bilgi sahibi olabilirsiniz. Bölüm tablosunda başlangıç kısmına doğru değeri girin ve bitiş kısmına çok büyük bir değer girin. Aşağıdaki komut ile doğru girip girmediğinizi kontrol edin:

e2fsck -n /dev/hd??

Hatta bölümü bağlayıp boyutunu kontrol edebilirsiniz:

mount -r /dev/hd?? /mnt
df -T

Bu doğrudan diğer bölümün nerde başlayacağını göstermez ama yaklaşmanıza yardımcı olabilir. Sistemi sadece-okuma modunda işletmek için -n ve -r seçeneklerine dikkat edin!!!

Bölüm bilgisinin bulunduğu diğer kısımlar

Bazı dağıtımlar bölüm bilgisini bir dosyaya kaydederler. Elbette ihtiyacınız olduğunda bu dosyaya ulaşamayabilirsiniz. Her ihtimale karşı:

    SuSE: /var/lib/YaST/install.inf

(Eğer başka dosyalar biliyorsanız lütfen bu belgenin yazarına bir eposta atın)

gpart

Ama eğer hala internete erişebiliyorsanız veya elinizde çoğu dağıtımda mevcut olan ve freshmeat.net sitesinden veya http://www.stud.uni-hannover.de/user/76201/gpart/ adresinden alabileceğiniz gpart varsa daha iyi bir yöntem vardır.

man gpart komutundan aldığımız çıktının ilk satırı şu: "gpart - guess PC-type hard disk partitions" yani gpart - PC-türü sabit disk bölümlerini tahmin eder.

"gpart bir sabit diskte hangi bölümler olduğunu tahmin etmeye çalışır. Eğer temel bölümleme tablosu kayıpsa, üzerine yazılmışsa veya halen disk üzerinde bulunan bölümler zarar görmüşse ve işletim sistemi bu bölümlere ulaşamıyorsa." Tam olarak ihtiyacımız olan budur.

gpart çok iyi bir araçtır.

Sorun şu: bütün bölümlerin ilk bloğu işaretlenmiştir. Fakat üzerine yazılmadıkça "işaretsiz" duruma gelmezler. Yani eski bir diskte çok sayıda "eskiden işaretlenmiş ilk blok" bulunur ve gpart sadece aralarından en iyisini seçmeye çalışır. Nitekim denemek o kadar da zor değildir, gpart tarafından diske yazılan birşey yoktur.

İşte daha önce gördüğümüz hdb diskinin gpart sonuçları:

[root@charles:/home/jdd > gpart /dev/hdb
Begin scan...
Possible partition(Linux ext2), size(1200Mb), offset(0Mb)
Possible partition(Windows NTFS), size(1200Mb), offset(1200Mb)
Possible partition(Linux ext2), size(1004Mb), offset(2402Mb)
Possible partition(Windows NTFS), size(1600Mb), offset(4102Mb)
End scan.
Checking partitions...
* Warning: partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX) ends beyond disk end .
Partition(Linux ext2 filesystem): primary
Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): primary
Partition(Linux ext2 filesystem): primary
Partition(OS/2 HPFS, NTFS, QNX or Advanced UNIX): invalid primary
Ok.
Guessed primary partition table:
Primary partition(1)
type: 131(0x83)(Linux ext2 filesystem)
size: 1200mb #s(2457880) s(63-2457942)
chs: (0/1/1)-(152/254/61)d (0/1/1)-(152/254/61)r
Primary partition(2)
type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
size: 1200mb #s(2457880) s(2457944-4915823)
chs: (152/254/63)-(305/253/60)d (152/254/63)-(305/253/60)r
Primary partition(3)
type: 131(0x83)(Linux ext2 filesystem)
size: 1004mb #s(2056256) s(4919781-6976036)
chs: (306/61/49)-(434/60/47)d (306/61/49)-(434/60/47)r
Primary partition(4)
type: 000(0x00)(unused) size: 0mb #s(0) s(0-0) chs: (0/0/0)-(0/0/0)d (0/0/0)-(0/0/0)r

Gördüğünüz gibi birincil bölümler kurtarılabildi, ama ek bölümler için hala yapılacak şeyler var.

Dos bölümleri "windows NTFS" olarak etiketlenmiş, çünkü MS Windows 2000 (çok kötü bir deneyim!) kurmaya çalışırken oluşturulmuşlar. Fakat "hatalı" olan kısımlar ek bölümler.

Bu sonuç ile fdisk kullanarak bölümleme tablosunu yeniden oluşturabilirsiniz (Unutmayın bu durumda risk alabilirsiniz, orjinal tablonuz zaten bozulmuştu).

gpart haftalık olarak güncellenen bir program :-) yeni sürümleri, bildiğimden daha güçlü olabilir.

Bir ek bölüm içindeki mantıksal bölümleri kurtarmak

Ek bölüm bilgisi disk üzerinde belli bir yerde değildir, birincil bölümlerle beraber kaydedilmez. Kurtarabilmek için genellikle daha fazlası gerekir. Yapılacak işlem ise şudur:

  1. gpart'ın -k seçeneğini kullanarak ilk bölümün başlangıcından itibaren tarama yapın.

  2. Sahte bir bitiş noktası olan ama başlangıç noktası doğru olan bir geçici birincil bölüm oluşturun (bu sizi varolan bir birincil bölümü silmeye zorlayabilir - eğer silinen bölümün sektörlerini tekrar kullanmayacaksanız risk alabilirsiniz.)

  3. e2fsk -n, mount -r ve df kullanarak doğru bitiş noktasını tahmin etmeye çalışın. Bu değeri bir kenara yazın.

    Uyarı

    Bahsedilen her programın man sayfalarını okumalı ve programları salt-okuma kipinde çalıştırmalısınız, tüm bölümleriniz doğru yerine oturmadan diske yazmamaya çalışın.

  4. Bu işlemleri kurtarılacak tüm bölümler için uygulayın.

  5. En baştan doğru bir bölüm tablosu oluşturun.

Eğer diskinizde hatalar varsa

Eğer sabit diskinizde hatalar varsa, veriyi kullanmada, bölümü bağlamada veya kontrol etmede gerçekten sorun yaşıyor olabilirsiniz (sürücü okuma hataları karşınıza çıkabilir). Hatta gpart birşey bulamayabilir. Ama eğer bölümün başlangıcını bilirseniz, verilerinizi başka bir diskteki geçici bir dosyaya kolayca kopyalayabilirsiniz. Bu işlem ile okuma hataları olan sektörler genellikle sıfıra ayarlanır:

  • Bölümdeki veriyi bir dosyaya kopyalamak. Bölümün başlangıç bloğunu bilmelisiniz;

dd if=/dev/hd?? of=/tmp/recover_hd?? bs=512 skip=XXXX count=YYY

XXX sektör başlangıcı ve YYY sektör sayısıdır (tahmin yürütülebilir).

  • Dosyayı bir geridönüş dosya sistemi (loop fs) olarak bağlayın.

mount -r -t ext2 -o loop /tmp/recover_hd?? /mnt/recover

Zengin adam çözümü :)

Partition Magic ticari bir üründür, verdiği küçük hizmete karşı pek ucuz değildir (yaklaşık 100 Frank) ama bayağı ünlü bir programdır. Her nasılsa, hiç kullanmam ve onaylamam. Söylenene göre bölümlerle ilgili herşeyi yapabiliyormuş, buna bölümü eski durumuna getirmek de dahil.

Ralf'ın bir belgesi olan orjinal bölüm-kurtarma mini NASIL belgesi esasen Partition Magic programı üzerinde duruyordu, yani eğer Linux bölümünüzde değerli bilgileriniz varsa ve Linux bilginiz yeterli değilse bu programın çok iyi bir çözüm olduğunu söyleyebilirim. Fakat Partition Magic programının bir çok sürümü var, sizin için kılavuzu okumak iyi olacaktır.



[49] Ç.N. - Disk bölümleri silindir sınırlarında başlamak ve bitmek zorundadır. Sektörlerle bölümleme yaparsanız, "Ayırdığınız bölüm silindirin başlangıcından/bitişinden önce/sonra başlıyor/bitiyor" gibi hata iletileri alabilirsiniz. Bunu sektörlerle ayarlamak çok zordur. Silindir cinsinden bölümlemeyi tercih edin.

Ayrıca, fdisk'in kullanımı zordur, dolayısıyla kolayca yanlış birşey yapabilirsiniz. Etkileşimli bir arayüzü olan cfdisk'in kullanımı daha kolaydır ve hata yapmak daha zordur. Eğer Linux'unuzu Türkçe kullanıyorsanız, cfdisk'in de Türkçe arayüze sahip olduğunu göreceksiniz.