如何快速将GPT分区方案从一个硬盘复制到另一个硬盘?


79

在非GPT分区表上,我可以执行

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

sfdisk不支持GPT分区表。我该怎么用呢?

我正在寻找一种或两种命令解决方案,而不仅仅是使用分开的GNU输出分区大小,然后手动重新制作它们。


2
sfdisk重写了util-linux分区工具(包括),以包括对util-linux 2.26的GPT支持。 sfdisk区别gdisk在于它不支持在1MiB之前放置一个小的启动分区,因此它在我的配置中阻塞了。(错误已在上游报告。)
Peter Cordes

当我将MBR磁盘克隆到较小的磁盘时,除了sfdisk -d外,我还编辑转储并修改开始/结束扇区。如何使用sgdisk for GPT磁盘执行此操作?-R克隆没有中间备份文件,而-b创建二进制备份,而不像sfdisk那样易于人读/编辑!
Costin Gușă

对此进行更新:sfdisk现在可以接受以这种方式使用时提供的任何内容,包括GPT之后的一个小型启动分区,大小为1MB。 unix.stackexchange.com/a/12988/79808
彼得·科德斯

怎么dd if=/dev/sda of=/dev/sdb
juniorRubyist

Answers:


122

安装在Ubuntu Universe存储库中可用的gdisk

然后使用sgdisk命令(此处手册页)复制分区表:

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

第一条命令将的分区表复制sdXsdY(注意不要混淆它们)。第二个命令随机化磁盘和所有分区上的GUID。仅当要在同一台计算机上使用磁盘时才需要这样做,否则就没有必要。


9
对于任何想要更换故障RAID-1磁盘的人来说,此信息都是黄金。谢谢!
基督教徒

@Christian Yep,这就是我用的。
克里斯·哈珀

9
在进行任何破坏性更改之前,请确保备份以下内容:sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXsgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michael Kropat 2014年

11
该命令有效,但应注意示例中的驱动器顺序是反向的。一种更明显的书写方式是sgdisk /dev/sdX -R /dev/sdY
Geoffrey

2
@KrisHarper:确实可以,但是由于程序使用getopt来解析命令行参数,因此蹲坐的顺序无关紧要。手册页应进行更新。
杰弗里2015年

28

我尝试了,但对我没有用。我发现的解决方案是:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb

我发现此解决方案更好,因为它可以与非GPT一起使用。我还将最后一个命令更改为:sgdisk -g / dev / sdb
Locke

1
上面的方法确实有效,您需要注意该示例有些落后(尽管正确)。sgdisk /dev/sdX -R /dev/sdY更明显。
Geoffrey 2015年

5
首先备份,然后还原。我发现这更加直观,并且减少了混合驱动器的机会。
Csq 2015年

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

其中A是:

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1

1
这还会克隆所有磁盘和分区GUID,而这可能不是您想要的。另外,它不会在磁盘末端安装备份表。
goertzenator 2015年

我喜欢这样!但更喜欢写:sed '$s/:.*//p;d'相反,tail -n1 | cut -b1因为如果您有9个以上的分区,这将失败!
F. Hauri

1
@goertzenator是的,为此,您可以运行常规 parted工具,执行某些操作(例如将任何unset标志设置为no),这将在两端重新编写分区表!
F. Hauri

您从未B在顶部使用过?
亚伦·弗兰克

B是用于找出A的值
dodexahedron

2

我刚刚尝试了使用sgdisk进行复制,并且复制效果很好-您只需遵循readline语法规则:

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

要么

   sgdisk -R/dev/target /dev/source

一切正常。


3
这正是我的回答。
克里斯·哈珀

-1

最简单的答案是:

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

将A的“好”分区表配置复制到替换驱动器B(即新驱动器)。


您错过了问题的一部分,该部分解释了为什么这不是一个选择。
DavidW

2
您的回答也不能正常工作GPT只用于非GPT
扬开发

在当前版本上,sfdisk此方法确实有效。
Gert van den Berg '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.