Como copiar rapidamente um esquema de partição GPT de um disco rígido para outro?

79

Em uma tabela de partição não GPT, eu posso fazer

sfdisk -d /dev/sda | sfdisk /dev/sdb.

Mas sfdisknão suporta tabelas de partição GPT. O que posso usar em vez disso?

Estou procurando uma solução de um ou dois comandos, não apenas usando o GNU parted para produzir os tamanhos das partições e, em seguida, fazê-las manualmente novamente.

Kris Harper
fonte
2
As ferramentas de particionamento do util-linux (inclusive sfdisk) foram reescritas para incluir o suporte GPT para o util-linux 2.26. sfdiskdifere do gdiskfato de não suportar a colocação de uma pequena partição de inicialização antes do 1MiB; portanto, ela se afogou na minha configuração. (bug relatado montante já.)
Peter Cordes
Quando clono um disco MBR em um disco menor, além do sfdisk -d, também edito o dump e modifico os setores de início / fim. Como faço isso com o sgdisk para discos GPT? -R clona sem arquivo de backup intermediário e -b cria um backup binário, não legível / editável como o sfdisk!
Costin Gușă
atualize: o sfdisk agora aceita tudo o que você fornece quando usado dessa maneira, incluindo uma pequena partição de inicialização após a GPT, terminando em 1 MB. unix.stackexchange.com/a/12988/79808
Peter Cordes
Que tal dd if=/dev/sda of=/dev/sdb?
precisa saber é o seguinte

Respostas:

122

Instale o gdisk, disponível nos repositórios Ubuntu Universe.

Em seguida, use o sgdiskcomando ( página de manual aqui ) para replicar a tabela de partição:

sgdisk /dev/sdX -R /dev/sdY 
sgdisk -G /dev/sdY

O primeiro comando copia a tabela de partição de sdXpara sdY(tenha cuidado para não misturá-las). O segundo comando randomiza o GUID no disco e todas as partições. Isso é necessário apenas se os discos forem usados ​​na mesma máquina, caso contrário, será desnecessário.

Kris Harper
fonte
9
Esta informação é de ouro para quem deseja substituir um disco RAID-1 com falha. Obrigado!
Christian
@ Christian Sim, foi para isso que eu o usei.
Kris Harper
9
Antes de fazer quaisquer alterações destrutivas, certifique-se de fazer um backup com: sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXesgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michael Kropat
11
Este comando funciona, mas deve-se observar que a ordem da unidade é inversa no exemplo. Uma maneira mais óbvia de escrever isso ésgdisk /dev/sdX -R /dev/sdY
Geoffrey
2
@KrisHarper: Na verdade, sim, mas como o programa usa getopt para analisar os argumentos da linha de comando, a ordem não importa. A página do manual deve ser atualizada.
Geoffrey
28

Eu tentei e não funcionou para mim. A solução que encontrei é:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb
Serafin Rusu
fonte
Achei que esta solução é melhor, porque pode funcionar com não-GPT. Eu também alterar o último comando para: sgdisk -g / dev / sdb
Locke
1
O exemplo acima funciona, você precisa prestar atenção ao fato de que o exemplo é um pouco atrasado (embora correto). sgdisk /dev/sdX -R /dev/sdYé mais óbvio.
Geoffrey
5
Primeiro faça backup e depois restaure. Acho isso mais intuitivo e com menos chance de misturar os discos.
CSQ
8
dd if=/dev/sda of=GPT_TABLE bs=1 count=A
dd if=GPT_TABLE of=/dev/sdb bs=1 count=A
partprobe /dev/sdb

onde A é:

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1
Petroff
fonte
1
Isso também clona todos os GUIDs de disco e partição que podem não ser o que você deseja. Além disso, ele não instala a tabela de backup no final do disco.
goertzenator
Eu gosto desse jeito! mas prefira escrever: em sed '$s/:.*//p;d'vez disso tail -n1 | cut -b1, isso falhará se você tiver mais de 9 partições!
F. Hauri 06/01
1
@goertzenator Você está certo, para isso, você pode executar uma parted ferramenta regular , fazer algo (como definir qualquer sinalizador não definido como no), isso reescreverá a tabela de partição nas duas extremidades!
F. Hauri 06/01
Você nunca usou Bna seção superior?
Aaron Franke #
B é um valor usado para descobrir A.
dodexahedron 01/02
2

Eu apenas tentei a replicação com sgdisk e funciona muito bem - você só precisa seguir as regras de sintaxe readline:

   sgdisk --replicate=/dev/target /dev/source

ou

   sgdisk -R/dev/target /dev/source

e tudo funciona.

al3xxx
fonte
3
É exatamente isso que minha resposta diz.
Kris Harper #
-1

A resposta mais fácil para isso é:

sudo sfdisk -d /dev/sda | sudo  sfdisk /dev/sdb --force

para copiar a configuração da tabela de partições 'boa' de A para a unidade de substituição B (que é a nova unidade).

Tony Doyle
fonte
Você perdeu a parte da pergunta que explica por que isso não é uma opção.
davidw
2
Sua resposta é que não funciona para GPT apenas para não-GPT
Jan Dev
Na versão atual sfdiskdisso funciona.
Gert van den Berg