jak zachranit alespon neco z mke2fs-nuteho disku

Jaroslav Lukesh lukesh na k-net.cz
Pondělí Květen 20 17:27:34 CEST 2002


| Odesílatel: Zdenek Pizl <z.p na linux-cd.cz>
|  mam tu pred sebou na disk, na kterem byl omylem spachan mke2fs misto 
| fsck.ext2 ;o))
| 
|  Mam za to, ze ac jsou fungl nove superbloky a inode tables, datove bloky
jsou 
| neposkozeny a lze z nich jakztazk vybrat obsah. Otazkou je jakym zpusobem
a 
| zda-li na to existuje lepsi nastroj nez hexedit ??

Podobnym problemem jsem se cca pred 1 1/4 rokem trapil taky. Nekdo chytry
prepsal cca 1GB disku TARem (chtel zalohovat disk na pasku a prehodil
poradi :o) Nebyl k dispozici zadny superblok (nepodarilo se mi jej najit
funkcni ani po zazalohovani disku a novem mke2fs). Zkuste vytvoření nových
superbloků a pak e2salvage, různé způsoby undelete, různé verze LDE (linux
disk editor).

Extrahoval jsem pak data z bloku se znamym zacatkem (officovske soubory)
predpokladane delky 521kB. Pan Malusek z konference mi na to napsal a
poslal program (cimz mu jeste jednou dekuji), takze hexeditem najdete jenom
onen vzor.

Bohuzel uz si nevzpominam, s jakymi parametry se prekladal, ani v jakem
skriptu bezel (nepodarilo se zachranit z meho pred mesicem zdechleho
disku), ale pracovalo se tam s dd. Jo, koukam ze je to tam dopsane.

Zkuste prohledat archiv (muj lokalni mi zdechl) tak v lednu-breznu 2001 na
nejaka podobna klicova slova (predmet si uz nepamatuji) nebo autory
(klicova slova: Lukesh, Jerry, Malusek).

Jen tak mimochodem, asi pred tydnem mel jeden kolega se mnou debatu nad
tematem "jak zachranit disk, ktery byl fdisknuty, ale jeste nebyl reboot" -
rekl jsem mu at si najde utilitku ktera to umi nebo si to napise (ja uz
dlouha leta neumim psat programy ac bych rad umel - neni cas, naposledy
jsem psal ve strojaku 8080 a Z80 s tabulkovym prekladacem - to je prevod
instrukci do hexa v tabulce na papire 8-)

Zdravi JL.


#include <stdio.h>
#include <unistd.h>

#define BUFSIZE 1024
#define OFFSET 0
unsigned char pat[] = {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0xFE, 0xFF, 0x09, 0x00, 0x06};
					/* hledany vzor */
unsigned char buf[BUFSIZE];

int main()
{
  int nbr;
  unsigned long block = 0;

  while ((nbr = read(0, buf, BUFSIZE)) != 0)
    {
      if (!memcmp(buf+OFFSET, pat, sizeof(pat)) && nbr >=
OFFSET+sizeof(pat))

/*	printf("%lu\n", block);
*/
	printf( "dd if=dev/hdd2 of=/mnt/d1/solved_%lu bs=1024 count=512
skip=%lu\n",
        block, block);

      block++;
    }
  return 0;
}




Další informace o konferenci Linux