Como copio e escrevo uma tabela de partições de um disco idêntico para outro?

3

Eu tenho várias dúzias de Raspberry Pis que uso como parte de um experimento em laboratório doméstico. Eu criei uma instalação do Rasbian (a versão específica do Pi do Debian) em um Pi, e eu quero espalhá-lo para o resto do Pis.

Os Pis usam cartões MicroSD (dos quais todos os que eu comprei têm a mesma capacidade de 8GB e o mesmo número de modelo). Anteriormente, eu estava usando o dd para criar uma imagem do cartão microSD "gold master", mas isso leva muito tempo, já que ele cria a imagem byte-a-byte do cartão SD de 8GB e precisa gravar tudo ( mesmo que o espaço total usado no cartão seja de talvez 300 megas ou menos).

Existem 3 partições; uma partição de inicialização (com o kernel), uma partição do sistema de arquivos raiz (com a maior parte do sistema operacional) e uma terceira partição especial.

Em vez de usar o dd, fiquei me perguntando se talvez houvesse uma maneira de copiar a tabela de partição para um arquivo, gravar a tabela de partições em um novo cartão SD e usar meus comandos rsync confiáveis para copiar apenas os dados de volta para cada partição.

Isso é possível? Ou eu estou melhor apenas usando o parted e tentei script para replicar as tabelas de partição?

Obrigado!

    
por Harsha K 12.11.2014 / 22:52

5 respostas

5

Mesmo que você tenha perguntado explicitamente sobre " ... copie e escreva uma tabela de partições ... " Eu acho que você realmente quer:

  • para clonar sua imagem mestre de ouro em outros cartões SD novos e idênticos:
  • para evitar "dd-ing" todo o cartão SD de 8GB, pois contém apenas 300 MB de dados.

Nesse caso, há alternativas para "dd", que podem fazer exatamente o que você precisa: clonagem de disco, mas considerando as propriedades / estrutura do sistema de arquivos / limites.

Uma dessas alternativas é partimage [1]: " ... Ele salva partições com um sistema de arquivos suportado em uma base setorial para um arquivo de imagem [strong] A Partimage copiará apenas os dados das partes usadas da partição ... "

Por favor, note que o partimage também pode ser usado em um ambiente de rede cliente-servidor e está incluído em vários live-linux-CD, como SystemRescueCD [2] ( Então, para facilitar o processo de clonagem de discos do sistema).

Outra ferramenta que você pode querer verificar é FSArchiver .

[1] link

[2] link

P.S .: desculpe não postar outros URLs relevantes, mas ... esta é minha primeira resposta e não posso incluir mais de dois URLs

    
por 13.11.2014 / 01:04
3

Claro - você pode fazer isso usando dd . A tabela de partição MSDOS aka MBR está nos primeiros 512 bytes:

head -c 512 /dev/sdb > mbr.bin
cp mbr.bin /dev/sdc
partprobe

dd if=/dev/sde bs=512 count=1 of=mbr.bin
dd if=mbr.bin of=/dev/sdf
partprobe

No entanto, isso não irá replicar a estrutura real do sistema de arquivos ; você terá que executar mkfs nas partições em branco de qualquer maneira.

Você pode preferir criar scripts para as ferramentas sfdisk ou parted para criar partições de tamanhos específicos.

    
por 12.11.2014 / 22:57
3

Você pode acelerar dd aumentando o tamanho do bloco com o sinal bs . Eu costumo usar o seguinte: dd if=/dev/source of=/dev/destination bs=8M . Com toda honestidade, dd ou parted são suas melhores opções, dd é a melhor opção para qualidade (na minha opinião).

    
por 12.11.2014 / 22:58
1

(Uma duplicata de link )

Pessoalmente, prefiro não usar o dd para evitar a duplicação de UUIDs.

Use o sfdisk:

   -d, --dump
          Dump the partitions of a device in a format that is usable as input to sfdisk.  For example,
              % sfdisk -d /dev/hda > hda.out
              % sfdisk /dev/hda < hda.out
          will correct the bad last extended partition that the OS/2 fdisk creates.

Note que isto não funciona com o GPT - mas ... você pode usar o sgdisk:

sgdisk -R=/dev/sdb /dev/sda  # copy the table
sgdisk -G /dev/sdb           # randomize the GUIDs
    
por 13.11.2014 / 00:41
0

(Eu teria comentado a resposta do @ ray acima se eu tivesse bastante reputação)

Se você está feliz que os dados estão no início do cartão SD, use apenas a opção count de dd .

Para adicionar ao exemplo do @ ray:

dd if=/dev/source of=/dev/destination bs=8M count=38

38 blocos de 8MB cada um são 304MB. Se você estiver usando um arquivo intermediário, ele terá 304 MB de tamanho e, ao escrever de volta, você poderá omitir a opção count .

dd if=/dev/source of=~/intermediate_file bs=8M count=38
dd if=~/intermediate_file of=/dev/destination bs=8M

O arquivo intermediário terá a vantagem adicional de ser mais rápido (supondo que você salve o arquivo intermediário em um HDD ou SSD), pois não haverá leitura lenta do cartão SD cada vez que você clona.

    
por 30.12.2015 / 13:33