O HOWTO do rescate de particións
Anterior Seguinte

3. Solucionando o problema

Por favor, ten coidado! Se segues as explicacións que se dan aquí conseguirás volver ter o sistema tal coma o tiñas antes, perdendo o que acabas de instalar, se o instalaches! Debes escoller...

3.1. O caso máis sinxelo

Todo é sinxelo se tes a man:

É suficiente con

  1. Executar Linux;
  2. Executar fdisk /dev/hda (ou o disco que haxa que rescatar);
  3. Usar fdisk para eliminar (opción d) tódalas particións existentes no disco danado;
  4. Usar fdisk para crear tódalas particións primarias (1 - 4) mencionadas no papel;
  5. Aplicarlle a etiqueta apropiada (opción t) : 82 é para Linux Swap, 83 para Linux (con L conseguirás a lista), 5 é a extendida e debe crearse antes de crear as particións lóxicas, c é MS Windows Fat 32 e f MS Windows extendida cando 6 é MS Windows Fat 16.
  6. Crear tódalas particións lóxicas.

Na miña instalación de SuSE e tódalas veces que lle tiven que facer isto a outras persoas, deu un bo resultado.

Sen embargo dixen que algunhas versións de fdisk poden delimitar (Ndot: cut) as particións usando sectores e non cilindros. Por iso temos o papel ca saída de fdisk -u -l.

Para usar o listado fdisk -u -l debemos executar fdisk -u :-). Na miña opinión, usar o límite en sectores é unha idea moi mala, pero pode ser que teña un uso real do que non son consciente. O problema é que co límite en cilindros é fácil adiviñar incluso se non tes o papel. En sectores, é máis dificil...

fdisk é un programa pequeno e moi rápido. Hai moitas outras versións de fdisk, pero eu sempre prefiro a clásica (Ndot: bare bone) (Falo da de Linux, dende logo, non das outras...).

Date de conta de que fdisk non escribe nada no disco ata que introduzas w e lle deas a Intro. No caso de que teñas medo de cometer un erro, introduce q (quit) ou preme Ctrl+C (^C) para saír dun xeito seguro.

Cando estea escrita a nova táboa de particións, arrinca Linux. O caso é que non podes facer isto da maneira normal: pode ser que lilo tamén se danara e necesitarás un disquete de arrinque ou arrincar dende un CD (escolle a opción "booting the installed partition").

Se usas lilo para arrincar, tan pronto como entres coma root, escribe "lilo" e preme Intro para reinstalar o teu cargador de arrinque preferido. Agora mesmo non estou seguro de que a mesma cousa sexa tan sinxela con Grub, pero non debería ser moi dificil.

O teu Linux xa debería estar todo aí, compróbao. Intenta iniciar MS Windows se o tes. Se non o consigues, hai unha (pequena) oportunidade de que poidas ler os teus datos dende Linux, realizando unha lectura en bruto sector a sector. Se eres quen de identificar os sectores do disco onde están os teus datos, poderás copialos a un ficheiro usando dd. Isto só é válido para o modo texto (Ndot: This is wise for text only). Este tipo de recuperación non é o obxectivo deste mini-HOWTO.

3.2. Un caso non tan sinxelo

3.2.1. Manualmente

Isto é para cando o caso anterior non se pode usar, por falta dun papel que teña a saída de fdisk, ou se este non vale para usalo, ou se é antigo.

Primeiro, lembra que mentres non escribas no disco (agás co fdisk), non borrarás ningún dato, así que podes usar un intento bloque a bloque (NdoT: block by block try). Isto é o que necesitas para coñecer o comezo da partición para iniciala. Se 153 non vale, proba con 154, e así.

Isto pode ser moi aburrido, pero se lembras aproximadamente o tamaño da partición de Linux, hai unha oportunidade de que o consigas.

3.2.2. A propia información de Linux e outros trucos

3.2.2.1. Kernel

Se acabas de destruír a táboa de particións, pero ainda non reiniciaches Linux: Non reinicies! Ainda podes recuperar a información das particións almacenada no Kernel:

"cat /proc/partitions" devólvenos

major minor #blocks name
3     0    19535040 hda
3     1     2096451 hda1
3     2     4980150 hda2
3     3           1 hda3 <----- isto sinala unha partición extendida
3     5     4980118 hda5
3     6     4972086 hda6

3.2.2.2. hdparm

# hdparm -g /dev/hda1

/dev/hda1:
 geometry = 2432/255/63, sectors = 4192902, start = 63

Necesitarás facer unhas poucas conversións de unidades. Os "bloques" son normalmente de 1Kb. Os "sectores" son sectores do disco, normalmente de 512 bytes. Pero a miúdo as ferramentas de particionamento de disco traballan cos cilindros coma unidades (aqui 255*63=16065 sectores). Usando esta información podes construír unha nova táboa de particións.

3.2.2.3. Sei onde comeza a partición, pero non sei onde remata.

Se sabes onde está o comezo dunha partición de Linux, pero non o remate, ainda así podes montala, e estudiar a súa estructura. Establece correctamente o comezo na táboa de particións, e ponlle no remate un número moi grande. Mira se atinaches con:

# e2fsck -n /dev/hd?? 

Incluso podes montar a partición e verificar o tamaño:

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

Isto non che dirá directamente onde comeza a seguinte partición, por mor da cuestión do redondeo. Pero pode axudarche a achegarte. Asegúrate de usar as opcións (NdoT: flags) "-n" e "-r" para tratar o sistema coma de só lectura!!!

3.2.2.4. Outros sitios onde se almacena información sobre as particións

Algunhas distribucións gravan nun ficheiro a información sobre as particións. Dende logo probablemente non poderás usalo cando o necesites. Pero por se acaso:

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

(se sabes doutros sitios onde se almacena este tipo de información, por favor envíalle un correo-e á persoa que mantén este documento)

3.2.3. gpart

Pero hai un xeito mellor se ainda podes acceder á rede ou tes o “gpart” a man. gpart está dispoñible na maioría das distribucións, en freshmeat.net ou directamente en http://www.stud.uni-hannover.de/user/76201/gpart.

“gpart - adiviña as particións dun disco duro de PC” é a primeira liña da páxina man de (man gpart).

“gpart intenta adiviñar que particións hai nun disco duro. Se se destruiu, perdeu ou sobrescribiu a táboa de particións primaria, as particións ainda existen no disco pero o sistema operativo non pode acceder a elas.” Isto é exactamente o que necesitamos.

gpart é unha ferramenta moi boa.

O problema é o seguinte: o primeiro bloque de tódalas particións está marcado. Pero nunca está “desmarcado” se non está sobrescrito. Así que moitos dos “primeiros bloques das particións” ainda existen nun disco vello e gpart intenta facelo todo o posible para adiviñar cal é correcta e cal non. En realidade non é moi dificil intentalo, e gpart non vai escribir nada no disco.

Aquí está o resultado de gpart no disco hdb que vimos antes:

# 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 

Como ves, as particións primarias poden recuperarse, pero para as extendidas ainda hai traballo por facer.

As particións DOS teñen a etiqueta “windows NTFS” porque se crearon mentres intentaba instalar MS Windows 2000 (unha experiencia horrorosa!). A partición “invalid” (incorrecta) é, en realidade a partición extendida.

Con isto, xa podes usar o fdisk e intentar volver crear a táboa de particións (lembra, isto non ten perigo ningún xa que a orixinal xa está perdida).

gpart actualízase cada semana :-) así que as novas versións poden ser máis potentes do que eu sei actualmente.

3.2.3.1. Recuperando particións dentro dunha partición extendida

A información da partición extendida está esparexida por todo o disco, e non almacenada xunto á das particións primarias. Recuperar estas leva máis traballo. O proceso é:

  1. Busca o comezo da primeira partición (usando a opción -k de gpart);
  2. Crea unha entrada de partición primaria temporal ca posición de comezo real e unha posición de remate falsa (isto pode conducirte a eliminar unha partición primaria real se non hai ningunha dispoñible - isto non ten perigo ningún se non usas os sectores da partición eliminada);
  3. Usa “e2fsk -n”, “mount -r”, e “df” para determinar o punto de remate real. Escribe este valor (advertencia: le as páxinas man de cada un dos programas mencionados, e usa as opcións de só lectura, xa que non quererás escribir no disco ata que tódalas particións estean no sitio correcto);
  4. Repite este proceso para cada unha das particións que haxa que recuperar;
  5. Constrúe unha nova táboa de particións completa e correcta.

3.2.3.2. Se o teu disco duro ten erros

Se o teu disco duro ten erros, pode ser que teñas verdadeiros problemas montando, verificando ou usando os datos (a unidade le erros que obstaculizan o traballo). Ata pode ser que gpart non poida atopalo. Pero se sabes onde comeza a partición, podes copiar dun xeito sinxelo os datos a un ficheiro temporal situado noutra unidade diferente. Os sectores con erros de lectura normalmente encheranse de ceros mediante este proceso:

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

XXX é o sector de inicio e YYY a cantidade de sectores (pode calcularse).

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

3.3. O caso da xente rica

Partition Magic é un producto comercial, non demasiado barato dado o pouco uso que se lle pode dar (aproximadamente cen dólares en Francia) pero cunha gran reputación. Sen embargo eu nunca o usei e non o vou valorar. Dise que é capaz de facer calquera cousa con particións, incluido restauralas.

O mini HOWTO do rescate de particións orixinal de Ralf estaba baseado esencialmente no uso do Partition Magic, así que eu supoño que é unha solución moi boa se tes datos importantes na túa partición Linux e non controlas moito de Linux. Sen embargo agora hai moitas versións recentes de Partition Magic e penso que é mellor que leas o manual.


Anterior Inicio Seguinte
Información técnica Referencias