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.


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.


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

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

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.


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).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.