Copie o layout do disco e as partições para outra unidade

3

Estou trabalhando em um aplicativo, no qual preciso criar unidades sempre com o mesmo layout de partição. Meu pensamento inicial foi uma vez despejar a tabela de partição da unidade original com o sfdisk.

sfdisk -d /dev/sdX > parttable

E, em seguida, aplique-o a todas as outras unidades com:

sfdisk /dev/sdX < parttable

Mas esse método não parece funcionar. Eu despejei a partição certa de um drive USB, então criei algumas partições aleatórias com o gparted e tentei então gravar a partição inicial de volta na unidade.

Mas o problema é que a partição não é reconhecida. O Gparted, por exemplo, lista a partição como desconhecida. Eu imaginei que provavelmente teria que formatar a partição criada, já que a partidária não armazena informações sobre sistemas de arquivos.

A minha pergunta agora é: Posso de alguma forma salvar a partição e as informações sobre as partições (sistema de arquivos, etc.) e criar uma nova unidade dessa maneira (na melhor das hipóteses, em um comando).

btw .: msdos partiontable

Editar: Uma alternativa seria reunir todos os dados sobre as unidades (por exemplo, parttable, sistemas de arquivos) e criar o comando manualmente. É possível (talvez com parted) criar a tabela de partições e formatar múltiplas partições em um comando?

    
por JohnnyKonfetti 22.02.2017 / 22:58

3 respostas

1

Trabalhando com as seguintes condições:

  • O disco original a ser copiado é /dev/sdx
  • O disco original está adequadamente particionado / rotulado / sinalizado
  • O conteúdo do sistema de arquivos do disco original será ignorado
  • O disco de destino, para copiar, será /dev/sdy
  • A partição de troca será /dev/sdy4
  • A partição de inicialização será /dev/sdy1 montada em /boot no sistema final com ext3 filesystem
  • A partição raiz será /dev/sdy2 montada em / no sistema final com ext4 filesystem
  • A partição dos usuários será /dev/sdy3 montada em /home no sistema final com ext4 filesystem
  • O sistema Debian que você deseja copiar foi banido e gzipado para master_system.tar.gz
  • Todos os arquivos, incluindo o script, serão armazenados no diretório de trabalho
  • O script será executado no mesmo diretório de trabalho
  • O script será executado como root , não sudo , mas faça login como raiz ou su em um terminal
  • Existe um diretório dupe_mnt no diretório de trabalho

Para "copiar" a estrutura de partições do disco original, só é necessário uma vez, a menos que a estrutura seja alterada.

sfdisk --dump /dev/sdx > master_table

Como só você, no sistema em questão, pode determinar o que copiar do sistema Debian que serve como mestre, não vou entrar em nada disso. Eu sei que você não copiará os diretórios /proc , /dev/ e /sys , mas certamente haverá outros a serem excluídos. Crie esse archive da maneira que você escolher e nomeie-o como master_system.tar.gz . Isso deve incluir os diretórios /boot e /home . É isso aí, a configuração é feita até você alterar o sistema Debian que está copiando ou o particionamento do disco.

O script a ser criado, chamado sys_replicate.sh , é:

#!/bin/sh
target=$1;
sfdisk /dev/${target} < master_table;
# Format the swap partition
mkswap /dev/${target}4;
# Format the data partitions
mkfs.ext3 /dev/${target}1;
mkfs.ext4 /dev/${target}2;
mkfs.ext4 /dev/${target}3;
# Mount the target root filesystem and its parts
mount /dev/${target}2 dupe_mnt;
mount /dev/${target}1 dupe_mnt/boot;
mount /dev/${target}3 dupe_mnt/home;
# Copy the master system to the target
cd dupe_mnt;
tar -zxvpf ../master_system.tar.gz;
cd ..;
# Unmount the new system
cd ..
umount /dev/${target}3;
umount /dev/${target}1;
umount /dev/${target}2;
#done

O arquivo sys_replicate.sh precisa ter o execute bit definido. chmod +x sys_replicate.sh

Para usar o processo, uma vez configurado, conecte o disco de destino. Se for um USB, verifique se o sistema reconheceu que está disponível. Se for um HDD interno, obviamente será necessário reinicializar e o sistema deverá encontrá-lo automaticamente. Uma vez conectado, tenha MUITO certeza que você sabe qual /dev é, já que a adição de discos pode reorganizar as letras. Quando estiver pronto, em um root shell, execute:

./sys_replicate.sh sdy

O nome do dispositivo /dev/sdy e /dev/sdx obviamente precisará ser alterado para corresponder ao seu sistema operacional. Além disso, como acontece, sfdisk pode lidar com discos GPT e partições estendidas, então minha pergunta de comentário anterior não foi necessária. Se você usar um disco, como a cópia, maior que o original, tudo ainda funcionará. Você terá espaço desperdiçado que não pode facilmente recuperar, no entanto, leve isso em conta antes de selecionar o disco mestre para copiar.

A criação da estrutura de partição e a cópia do sistema Debian são independentes, então mudanças em uma não requerem atualização da outra.

    
por 23.02.2017 / 23:32
1

Como dito em um comentário, o dd copiará os dados, o layout da partição, etc. O único problema é que seus discos de origem e de destino devem ser idênticos (cilindros, cabeças, setores, etc.)

Uma opção melhor que se torna um pouco neutra em hardware seria usar o link clonezilla -

    
por 23.02.2017 / 16:27
1

A Partição MBR é o setor 0 do disco, clone-a com dd:

sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1

Cuidado: os dados do disco de destino podem ser destruídos. Para ativar as novas partições, você deve executar o kpartx.

    
por 23.02.2017 / 19:34