Irá escrever uma nova tabela de partições para alterar algo que não seja os primeiros 512 bytes

4

Estou tentando recuperar dados de uma unidade de 1 TB removida do meu NAS, mas quando executo fdisk -lu /dev/sdb , recebo uma mensagem informando que não há uma tabela de partição válida.

Pelo que entendi a tabela de partição reside dentro dos primeiros 512 bytes no disco, então como não há nenhuma tabela de partição no momento, eu farei algum dano escrevendo uma nova?

Testdisk encontrou três partições, eu assumo fazendo a varredura dos setores na unidade, certamente se eu escrever esta tabela de partição em disco só afetará os primeiros 512 bytes? Se eles não estiverem corretos, eu não perdi nada, todos os meus dados ainda estão intactos no resto do disco, não é?

Não posso reescrever a tabela de partições tanto quanto eu quero, desde que não mude mais nada no disco? Se eu continuar usando os primeiros 512 bytes e, em seguida, executar o Testdisk novamente, a varredura ainda deverá encontrar as três partições originais em seus locais originais no disco?

Estou relutante em continuar escrevendo essa tabela de partição em disco se isso afetará os dados reais no disco fora dos primeiros 512 bytes.

Qualquer orientação seria apreciada.

Cumprimentos Rico

    
por HuggieRich 11.12.2013 / 13:50

1 resposta

2

Após alguns breves testes e somente com TestDisk e sfdisk em um ambiente virtual (não posso confirmar que criar uma nova tabela de partição em algo como fdisk ou gparted a deixaria intacta) estou inclinado a dizer não, escrevendo uma tabela de partições não afetará nada além dos primeiros 512 bytes.

Abaixo estão as etapas do teste ...

Eu criei um disco rígido de 100MB e particionei da seguinte forma:

Eu então montei e adicionei arquivos para cada uma das partições antes de limpar os primeiros 512 bytes

sudo dd if=/dev/zero bs=1 count=512 conv=notrunc of=/dev/sdb

Uma verificação rápida com o fdisk mostrou que isso foi apagado

richard@mint14 ~/Disktests $ sudo fdisk -lu /dev/sdb

Disk /dev/sdb: 104 MB, 104857600 bytes
255 heads, 63 sectors/track, 12 cylinders, total 204800 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: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

Então, rodei o TestDisk contra ele, que encontrou as partições com sucesso, examinando a unidade e as gravei no disco.

Depois disso, eu despejei a tabela de partições usando o sfdisk

richard@mint14 ~/Disktests $ sudo sfdisk -d /dev/sdb > sdb_partitions.out
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.

richard@mint14 ~/Disktests $ cat sdb_partitions.out 
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=    20480, Id=83, bootable
/dev/sdb2 : start=    22528, size=    61440, Id=83
/dev/sdb3 : start=    83968, size=    61440, Id= 5
/dev/sdb4 : start=   145408, size=    59392, Id= 7
/dev/sdb5 : start=    86016, size=    59392, Id=83

Eu fiz uma cópia deste arquivo e o editei manualmente para criar uma única partição de 20MB, para que ela sobreponha a segunda partição e, em seguida, grave de volta na unidade

richard@mint14 ~/Disktests $ sudo sfdisk /dev/sdb < sdb_partitions.out_modified
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 12 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an MSDOS signature
 /dev/sdb: unrecognised partition table type
Old situation:
No partitions found
New situation:
Warning: The partition table looks like it was made
  for C/H/S=*/173/42 (instead of 12/255/63).
For this listing I'll assume that geometry.
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *      2048     43007      40960  83  Linux
        start: (c,h,s) expected (0,48,33) found (0,32,33)
        end: (c,h,s) expected (5,158,42) found (2,172,42)
/dev/sdb2             0         -          0   0  Empty
/dev/sdb3             0         -          0   0  Empty
/dev/sdb4             0         -          0   0  Empty
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table

Re-reading the partition table ...

Outra verificação rápida com o fdisk mostra que ele gravou com êxito essa tabela de partições no disco

richard@mint14 ~/Disktests $ sudo fdisk -lu /dev/sdb

Disk /dev/sdb: 104 MB, 104857600 bytes
173 heads, 42 sectors/track, 28 cylinders, total 204800 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: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048       43007       20480   83  Linux

Finalmente, usando o sfdisk para substituir a tabela de partições original

richard@mint14 ~/Disktests $ sudo sfdisk --force /dev/sdb < sdb_partitions.out 
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 12 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an MSDOS signature
 /dev/sdb: unrecognised partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *      2048     22527      20480  83  Linux
/dev/sdb2         22528     83967      61440  83  Linux
/dev/sdb3         83968    145407      61440   5  Extended
/dev/sdb4        145408    204799      59392   7  HPFS/NTFS/exFAT
/dev/sdb5         86016    145407      59392  83  Linux

Eu então montei cada um deles novamente e verifiquei que os arquivos estavam lá e intactos.

    
por 12.12.2013 / 12:40