Recuperar Partition-Table ainda presente no sistema em execução

5

Hy, Eu acidentalmente substituí o primeiro 1M do meu disco rígido no linux (usando dd). Então, a tabela de partições desapareceu. Eu ainda posso acessar todas as partições (exceto a primeira) usando / dev / sda2 (e assim por diante), então os dados ainda estão lá. Eu só preciso dos limites da partição para restaurar a tabela. Como posso fazer isso? O kernel Linux ainda deve conhecê-los porque todos os pontos de montagem ainda funcionam. fdisk -l /dev/sda não funciona porque lê a tabela de partições.

Obrigado!

    
por theomega 01.12.2010 / 18:45

4 respostas

6

As extensões das partições podem ser lidas em /sys/block/sda/sda1/start , /sys/block/sda/sda1/size e assim por diante. Os valores estão em setores. Anote esses valores antes de fazer qualquer outra coisa, especialmente a reinicialização.

Depois de ter os valores, você pode recriar as partições com fdisk . Use o comando u para alternar a unidade para setores e, em seguida, crie as partições digitando

  • n
  • p rimary / l ogical / e xtended
  • número da partição (exceto para partições lógicas: faça-as em ordem)
  • setor inicial
  • + size em setores
por 02.12.2010 / 03:16
5

Quase dois anos se passaram desde que a pergunta foi feita. Nós estávamos exatamente na mesma situação ontem: Nós temos um Linux Software RAID Level 1 com 2 discos. Um dos discos quebrou e teve que ser substituído. O disco foi trocado e depois quisemos copiar a tabela de partições do disco restante (em funcionamento) para o novo disco. Infelizmente, copiamos a tabela de partições vazia do novo disco para o disco antigo. Felizmente, nós imediatamente descobrimos isso antes de reinicializar a máquina, então a tabela de partição correta ainda estava ativa no kernel. Veja o que fizemos para resolver o problema:

  • Extraímos os dados da partição do sistema de arquivos /sys/block/ , conforme descrito na resposta de Gilles.
  • Nosso sistema usa uma tabela de partições GUID , por isso não foi possível usar fdisk , mas precisávamos usar gdisk em vez disso.
  • gdisk funciona praticamente da mesma forma que fdisk , mas não é necessário especificar u para setores.
  • Criamos partições com os dados exatos como extraídos de /sys/block/ . Há outras respostas para perguntas semelhantes que dizem diminuir o tamanho da partição em um, mas isso não era necessário para nós.
  • Com uma tabela de partição guid, não há mais distinção entre partições primárias e estendidas.
  • O sistema de arquivos sys/block não contém informações sobre os tipos de sistemas de arquivos, então os extraímos com mount .
  • Com uma tabela de partições GUID, não há mais um sinalizador inicializável. Se a tabela de partições a restaurar for de um disco inicializável, deve haver uma partição com o tipo BIOS boot partition (geralmente a primeira partição).

Depois de escrever a tabela de partições com gdisk , conseguimos reinicializar o sistema e tudo correu bem.

    
por 06.10.2012 / 10:54
1

Pessoalmente, eu usaria o testdisk em execução no CD do Trinity Rescue Kit. Está bem documentado. Eu não sei como recuperar a área sobrescrita daquela primeira partição.

por 01.12.2010 / 21:57

1

As outras respostas que sinto não são suficientemente abrangentes e deixam margem para erros. Aqui está um exemplo prático de recuperação com uma pequena advertência que não vi mencionada em nenhum lugar. Ao pegar o setor start e size de / sys / block / sda / * você deve se lembrar de subtrair 1 do tamanho ou você estará 1 setor desligado.

Lembre-se também no fdisk de clicar em "u" para o modo de setor.

Aqui está o exemplo que eu segui com sucesso: Passo 1 - Encontre o diretório do seu dispositivo em / sys / block / sda / sda1 (mude o / sda e / sda1 para corresponder ao nome do seu dispositivo de disco e ao número da partição).

Você tem que fazer um gato no 'start' e 'size' que representa o setor inicial da partição e o 'tamanho' representa quantos setores ele é.

tome o valor de tamanho e subtraia 1 dele ou você não obterá o resultado original ou correto

fdisk / dev / sda

pressione u para mudar para setores que é o que / sys / block / sda passa por

/ sys / block / sda [root @ server1 sda] # cat sda1 / start 2048 [root @ server1 sda] # cat sda1 / tamanho 1024000

[root @ server1 sda] # cat sda2 / start 1026048 [root @ server1 sda] # cat sda2 / tamanho 1464121344

Passo 2 - Use o fdisk para pegar as informações do setor acima e introduza-as (lembrando-se de subtrair 1 do tamanho ao dizer ao fdisk o setor final)

"Pressione u" para alternar para o modo setorial quando você executar:

fdisk / dev / sda

Comando (m para ajuda): n Ação de comando    e estendido    partição primária p (1-4) p Número de partição (1-4): 1 Primeiro setor (63-1465149167, padrão 63): 2048 Último setor, + setores ou tamanho + {K, M, G} (2048-1465149167, padrão 1465149167): +1023999

Comando (m para ajuda): n Ação de comando    e estendido    partição primária p (1-4) p Número de partição (1-4): 2 Primeiro setor (63-1465149167, padrão 63): 1026048 Último setor, + setores ou tamanho + {K, M, G} (1026048-1465149167, padrão 1465149167): +1464121343

#

link

    
por 04.08.2016 / 22:50