Eu limpei minha tabela de partição usando o gparted, existe uma maneira de recuperar minha partição?

7

Eu limpei minha tabela de partições NTFS (windows) usando o gparted clicando em "Device- > Create Partition Table ... e então aplique", existe uma maneira de recuperar minha partição NTFS?

Eu tentei usar este comando gpart /dev/sda Eu obtenho o seguinte colocar:

Begin scan...
End scan.

Checking partitions...
Ok.

Guessed primary partition table:
Primary partition(1)
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

Primary partition(2)
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

Primary partition(3)
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

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

O que essa saída significa? Existe uma maneira de recuperar?

    
por Mustafa 05.10.2013 / 14:08

4 respostas

4

Você pode tentar usar o testdisk para recuperar a tabela de partições. O Testdisk lerá a superfície do disco e tentará determinar onde as partições começam e terminam.

    
por 05.10.2013 / 20:06
6

Existe a possibilidade de recuperar a tabela de partições, mas são necessárias 2 condições:

  1. Você não reinicializou sua máquina.
  2. A unidade estava em uso no momento em que a tabela foi alterada.

Como isso funciona é que o kernel mantém o layout da partição na memória. Se uma partição estiver em uso, ela precisa saber onde a partição é iniciada, por isso, ela se recusará a recarregar a nova tabela até que ela não esteja mais em uso.

Como fazer isso:

Vá para /sys/block/sda . Lá dentro você verá um diretório para cada partição ( sda1 , sda2 , etc). Dentro de cada um deles existe um arquivo chamado start e size (então /sys/block/sda/sda1/start ). Se você recriar sua tabela de partições usando esses mesmos locais de início e tamanhos, você estará bem.

Observe que ele não mantém o tipo de partição. O Linux não se importa com essa informação. Então, depois de recriar, você terá que lembrar qual o tipo de partição foi definido como (NTFS ou qualquer outro).

Exemplo

Disco original:

# fdisk -l /dev/sdc

Disk /dev/sdc: 8006 MB, 8006926336 bytes, 15638528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ce29c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux
/dev/sdc2         2099200    15638527     6769664   83  Linux
# mount | grep sdc
/dev/sdc2 on /mnt/tmp type xfs (rw)
# cat /mnt/tmp/world
hello

Limpando a tabela de partições

# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.22.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1-4): 1
Partition 1 is deleted

Command (m for help): d
Selected partition 2
Partition 2 is deleted

Command (m for help): p

Disk /dev/sdc: 8006 MB, 8006926336 bytes, 15638528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ce29c

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

Note que ainda está montado e acessível:

# cat /mnt/tmp/world 
hello

Obter os offsets

# cd /sys/class/block/sdc

# ls
alignment_offset  device@            events_poll_msecs  power/     ro     slaves/
bdi@              discard_alignment  ext_range          queue/     sdc1/  stat
capability        events             holders/           range      sdc2/  subsystem@
dev               events_async       inflight           removable  size   uevent

# cat sdc1/start
2048

# cat sdc1/size
2097152

# cat sdc2/start
2099200

# cat sdc2/size
13539328

Restaurar a tabela de partições


# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.22.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-15638527, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-15638527, default 15638527): +2097151
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (2099200-15638527, default 2099200): 2099200
Last sector, +sectors or +size{K,M,G} (2099200-15638527, default 15638527): +13539327
Partition 2 of type Linux and of size 6.5 GiB is set

Command (m for help): p

Disk /dev/sdc: 8006 MB, 8006926336 bytes, 15638528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ce29c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   83  Linux
/dev/sdc2         2099200    15638527     6769664   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

!! Observe que ao especificar o último setor, usamos o tamanho - 1. !!

Verificação

Vamos desmontar a unidade, executar partprobe para dizer ao kernel para pegar a nova tabela, depois remontar e verificar se ainda conseguimos acessar nosso arquivo.

# umount /mnt/tmp/

# partprobe /dev/sdc

# mount /dev/sdc2 /mnt/tmp

# cat /mnt/tmp/world 
hello
    
por 05.10.2013 / 18:42
1

parted tem um comando de resgate que pode farejar o início e a duração do sistema de arquivos se você souber aproximadamente onde estava.

    
por 06.10.2013 / 05:45
0

Se você conhecer as dimensões do disco NTFS, "poderá" ser capaz de redefini-las usando fdisk ou parted, mas acho que você está sem sorte.

    
por 05.10.2013 / 17:30