Autor: Tomasz Zielonka (tz174768_at_zodiac.mimuw.edu.pl)
Data: Fri 21 Apr 2000 - 01:21:16 MET DST
> Czesc !!!
>
> Od razu przepraszam za crossposta, prosze o wyrozumialosc, zalezy mi na
> szybkiej odpowiedzi, problem jest naprawde powazny.
> Moj brat przeinstalowywal windowsa i wszystkie "wazne dane przegral na
> partycje linuxowa (ext2) w skutek nie uwagi pozniej skasowal wszystkie
> partycje na dysku :(((, zrobil partycje windowsowa i zainstalowal windowsa.
> Chodzi mi o odzyskanie skopiowanych na ext2 danych. Stworzona partycja
> windowsowa jest mniejsza niz poprzednia wiec nie powinna byla zachaczyc o
> stare linuxowe.
> Czy jest jakas mozliwosc odzyskania tych danych nie placac ciezkich
> tysiecy jakiejs firmie !??!? to naprawde WAZNE !!!
> I napewno mozliwe. Nie byly tam zalozone zadne nowe partycje dane wiec tam
> sa jak tylko fata przekonac ze tam jest partycja, jak znalezc jej pocztek ?
> To napewno nie jest latwe, ale blagam, podajcie jakies wskazowki, jak
> zaczac, moze ktos moze podeslac jakis soft ?
> BLAGAM !!!
>
Ja bym zrobił to tak:
1) Przełożyć ten dysk na slave albo secondary (jeśli to IDE).
2) Na bootujący dysk zainstalować linuksa.
3) Najlepiej mieć jeszcze jeden dysk o pojemności >= od tego WAZNEGO
dysku i na tym dysku zrobic backup.
Np.
cat /dev/hdX > /dev/hdY
^^^^^^^^ ^^^^^^^^
WAŻNY backup
Ale jeśli nie wiesz co robisz, lepiej tego nie rób. To zamazuje informację
na drugim dysku.
Można też do pliku.
4) Znaleźć początek partycji ext2
Można się posłużyć programem file (rozpoznawanie formatów plików po
zawartości).
Przykład:
Mam partycję ext2 rozpoczynającą na 575 cylindrze. Geometria dysku: 255
heads, 63 sectors, 1046 cylinders.
Obliczam numer pierwszego sektora 575 cylindra.
(575 - 1) * 255 * 63 = 9221310
Przepisuję kilka pierwszych sektorów cylindra do pliku:
# dd if=/dev/hdb of=plik bs=512 count=5 skip=9221310
Co pokazuje file?:
# file plik
plik: Linux/i386 ext2 filesystem
Można to zautomatyzować. Ten skrypt sprawdza kolejne cylindry na obecność
sygnatury ext2:
#!/bin/bash
dysk=/dev/hdb
sects=63
heads=255
cyls=1046
start=0 # ustawić na ostatni cylinder partycji fat
hs=$(($heads * $cyls))
c=$start # uwaga: tutaj numeracja cylindrów od zera
while [ $c -lt $cyls ]; do
s=$(($c * $hs))
dd if=$dysk of=dd.out bs=512 count=5 skip=$s 2> /dev/null
if file dd.out | grep -q 'ext2'; then
echo "Partycja ext2 od cylindra " $(($c+1))
fi
c=$(($c+1))
done
Zmienne na początku trzeba ustawić tak, żeby odpowiadały Twojej
konfiguracji. Geometria dysku powinna odpowiadać temu, co masz w BIOS'ie.
Mam nadzieję, że cały czas używasz tej samej, bo inaczej kiepsko.
Skrypt nie wykryje ext2 na pierwszej partycji logicznej partycji
rozszerzonej (chyba), bo tam będzie małe przesunięcie. To też da się
zrobić... miałeś partycje rozszerzone?
file może się pomylić i wykryć więcej takich `partycji', choć to raczej
mało prawdopodobne.
5) Utworzyć partycję rozpoczynającą się w tym cylindrze, a kończącą się na
końcu dysku. Jeśli będzie za duża (np. zahaczy o swap), nie szkodzi,
linuks sobie poradzi.
Tu może przydać się reboot, jeśli kernelowi nie uda się uaktualnić
informacji o partycjach.
6) Zamontować partycję, najlepiej read-only
Pozdrawiam,
Tomek
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 20:02:22 MET DST