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:
gpart'ın -k seçeneğini kullanarak ilk bölümün başlangıcından itibaren tarama yapın.
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.)
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. |
Bu işlemleri kurtarılacak tüm bölümler için uygulayın.
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:
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).
mount -r -t ext2 -o loop /tmp/recover_hd?? /mnt/recover