Limpei minha tabela de partições usando o gparted. Existe uma maneira de recuperar minha partição?

Limpei minha tabela de partições usando o gparted. Existe uma maneira de recuperar minha partição?

Limpei minha tabela de partição NTFS (Windows) usando o gparted clicando em "Dispositivo-> Criar tabela de partição... e depois aplicar", existe uma maneira de recuperar minha partição NTFS?

Eu tentei usar este comando gpart /dev/sda e obtive o seguinte resultado:

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 me recuperar?

Responder1

Existe a possibilidade de recuperar a tabela de partições, mas é necessário que 2 condições sejam atendidas:

  1. Você não reiniciou 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 começa, portanto 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 há um arquivo chamado startand size(so /sys/block/sda/sda1/start). Se você recriar sua tabela de partições usando exatamente os mesmos locais e tamanhos iniciais, você ficará bem.

Observe que ele não mantém o tipo de partição. O Linux não se importa com essas informações. Portanto, após a recriação, você terá que lembrar qual tipo de partição foi definido (NTFS ou qualquer outro).


Exemplo

Disco original:

# fdisk -l /dev/sdc

Disco /dev/sdc: 8006 MB, 8006926336 bytes, 15638528 setores
Unidades = setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes/512 bytes
Tamanho de E/S (mínimo/ideal): 512 bytes/512 bytes
Identificador de disco: 0x000ce29c

   Sistema de identificação de blocos de início de inicialização do dispositivo
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 15638527 6769664 83 Linux
# montar | grep sdc
/dev/sdc2 em /mnt/tmp digite xfs (rw)
# gato /mnt/tmp/mundo
olá

Limpando a tabela de partições

#fdisk /dev/sdc
Bem-vindo ao fdisk (util-linux 2.22.2).

As alterações permanecerão apenas na memória, até que você decida escrevê-las.
Tenha cuidado antes de usar o comando write.


Comando (m para ajuda): d
Número da partição (1-4): 1
A partição 1 foi excluída

Comando (m para ajuda): d
Partição selecionada 2
A partição 2 foi excluída

Comando (m para ajuda): p

Disco /dev/sdc: 8006 MB, 8006926336 bytes, 15638528 setores
Unidades = setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes/512 bytes
Tamanho de E/S (mínimo/ideal): 512 bytes/512 bytes
Identificador de disco: 0x000ce29c

   Sistema de identificação de blocos de início de inicialização do dispositivo

Comando (m para ajuda): w
A tabela de partições foi alterada!

Chamando ioctl() para reler a tabela de partições.

AVISO: A releitura da tabela de partição falhou com o erro 16: Dispositivo ou recurso ocupado.
O kernel ainda usa a tabela antiga. A nova tabela será usada em
na próxima reinicialização ou depois de executar partprobe(8) ou kpartx(8)
Sincronizando discos.

Observe que ele ainda está montado e acessível:

# gato /mnt/tmp/mundo
olá

Obtenha as compensações

# cd /sys/class/block/sdc

#ls
alinhamento_offset dispositivo@eventos_poll_msecs potência/ ro escravos/
bdi@ descartar_alignment ext_range fila/ sdc1/ stat
detentores de eventos de capacidade/ intervalo sdc2/ subsistema@
dev events_async tamanho removível a bordo uevent

# gato sdc1/iniciar
2048

# gato sdc1/tamanho
2097152

# gato sdc2/iniciar
2099200

# gato sdc2/tamanho
13539328

Restaurar a tabela de partições

#fdisk /dev/sdc
Bem-vindo ao fdisk (util-linux 2.22.2).

As alterações permanecerão apenas na memória, até que você decida escrevê-las.
Tenha cuidado antes de usar o comando write.


Comando (m para ajuda): n
Tipo de partição:
   p primário (0 primário, 0 estendido, 4 gratuito)
   e estendido
Selecione (padrão p): p
Número da partição (1-4, padrão 1): 1
Primeiro setor (2048-15638527, padrão 2048): 2048
Último setor, +setores ou +tamanho{K,M,G} (2048-15638527, padrão 15638527): +2097151
A partição 1 do tipo Linux e de tamanho 1 GiB está definida

Comando (m para ajuda): n
Tipo de partição:
   p primário (1 primário, 0 estendido, 3 gratuitos)
   e estendido
Selecione (padrão p): p
Número da partição (1-4, padrão 2): 2
Primeiro setor (2099200-15638527, padrão 2099200): 2099200
Último setor, +setores ou +tamanho{K,M,G} (2099200-15638527, padrão 15638527): +13539327
A partição 2 do tipo Linux e de tamanho 6,5 GiB está definida

Comando (m para ajuda): p

Disco /dev/sdc: 8006 MB, 8006926336 bytes, 15638528 setores
Unidades = setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes/512 bytes
Tamanho de E/S (mínimo/ideal): 512 bytes/512 bytes
Identificador de disco: 0x000ce29c

   Sistema de identificação de blocos de início de inicialização do dispositivo
/dev/sdc1 2048 2099199 1048576 83 Linux
/dev/sdc2 2099200 15638527 6769664 83 Linux

Comando (m para ajuda): w
A tabela de partições foi alterada!

Chamando ioctl() para reler a tabela de partições.

AVISO: A releitura da tabela de partição falhou com o erro 16: Dispositivo ou recurso ocupado.
O kernel ainda usa a tabela antiga. A nova tabela será usada em
na próxima reinicialização ou depois de executar partprobe(8) ou kpartx(8)
Sincronizando discos.

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

Verificação

Vamos desmontar a unidade, executar partprobepara dizer ao kernel para pegar a nova tabela, então remontar e verificar se ainda chegamos ao nosso arquivo.

#umount /mnt/tmp/

#partprobe /dev/sdc

#montar /dev/sdc2 /mnt/tmp

# gato /mnt/tmp/mundo
olá

Responder2

Você pode tentar usardisco de testepara recuperar a tabela de partição. Testdisk irá ler a superfície do disco e tentar determinar onde as partições começam e terminam.

Responder3

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

Responder4

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

informação relacionada