dd if=/dev/sda of=partitiontable.bin bs=1 skip=446 count=64 # backup
dd if=partitiontable.bin of=/dev/sda bs=1 seek=446 count=64 # restore
但是在逻辑分区的布局方面,我想知道标准工具中是否存在类似的工具布局的方法?我想主要的问题是找到EBR位置的偏移量,因为这样,
dd
将完成其余的工作。请记住,我需要能够将所有内容放回(可能是)空白磁盘,从而恢复相同的布局。使用诸如fdisk
或parted
之类的分区工具很好,但是我必须能够自动使用它们(脚本),并且它们不应该依赖于任何与X相关的软件包-仅命令行。使用struct模块在一个小的python脚本中手动完成此操作,但我希望有一种更简单的方法。#1 楼
即使在GPT分区磁盘中,您也可以使用sfdisk来完成此任务*。保存:生成新的磁盘和分区ID **:
sfdisk -d /dev/sdX > part_table
注意事项
*:对于GPT分区表,这需要util-linux 2.26或更高版本的
sfdisk
。它是从头开始在libfdisk上重新编写的。因此,新磁盘将是原始磁盘的克隆,而不仅仅是具有相同布局的另一个磁盘。请注意,Linux的sfdisk
会查看文件系统UUID,而不是分区表中的UUID。如果从转储中删除对分区ID的引用(/dev/disk/by-uuid/
)和对磁盘ID的引用(sfdisk
),则, uuid=...
将生成新的UUID。#2 楼
这取决于源磁盘是使用MBR(又名“ dos”或“ msdos”)还是GPT(又名“ GUID”)分区表。2 TB以上的磁盘不能使用MBR,因此它们是GPT。
2 TB以下的磁盘可以同时使用,因此您必须首先确定它是哪个。
假设您在Linux上,请使用以下任一命令来找出源磁盘使用的分区表:
disk=/dev/sda
# Always available, but old versions may not recognize gpt
fdisk -l $disk | grep type
# `apt-get install gdisk` or equivalent on non-Debian systems
gdisk -l $disk | grep -A4 'scan'
# `apt-get install parted`
parted $disk print | grep Table
给定
source=/dev/sda
dest=/dev/sdb
用于MBR磁盘
使用Petr Uzel的答案所建议的
sfdisk
或以下变体:# Save MBR disks
sfdisk -d $source > /partitions-backup-$(basename $source).sfdisk
sfdisk -d $dest > /partitions-backup-$(basename $dest).sfdisk
# Copy $source layout to $dest
sfdisk -d $source | sfdisk $dest
对于GPT磁盘
正确的答案是Kris Harper在这里和这里给出的。
您需要GPT fdisk。查看下载页面或运行
sudo apt-get install gdisk
。然后使用sgdisk命令:# Save GPT disks
sgdisk --backup=/partitions-backup-$(basename $source).sgdisk $source
sgdisk --backup=/partitions-backup-$(basename $dest).sgdisk $dest
# Copy $source layout to $dest and regenerate GUIDs
sgdisk --replicate=$dest $source
sgdisk -G $dest
最后一个命令将磁盘上的GUID随机化,然后所有分区。仅当要在同一台计算机上使用磁盘时才需要这样做,否则是不必要的。
评论
我总是害怕我会混合使用两个参数,因此一个好技巧是使用--backup = File从源驱动器导出分区表,并使用--load-backup = File还原到目标驱动器。
– Zidarsk8
2014年7月24日在9:56
当您移动分区表,然后如上所述随机化磁盘和分区的GUID时,磁盘和后续分区上的现有数据是否存在任何风险?谢谢!
–EngBIRD
16年8月22日在0:36
@EngBIRD:只要您不混淆$ source和$ dest,就不会有数据风险,因为目标上没有数据。您仅复制分区布局,之后仍然需要格式化和复制数据。
– mivk
16年8月22日在10:00
我问的原因实际上是我不是从空白磁盘开始,而是在交换两个磁盘...
–EngBIRD
16年8月22日在13:53
#3 楼
较旧但仍然有趣的pyparted和python-lvm绑定。更新:
先前发布的内容是因为sfdisk手册页上的上述内容在许多现代情况下均不起作用。
sfdisk无法理解GUID分区表(GPT),因此它不适用于大型分区。在特定情况下,请使用更高级的GNU parted(8)。
此命令支持> 2 TB分区和LVM。
# parted -ms /dev/sda print > sda.parted
/>样本输出:
BYT;
/dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk;
1:1049kB:12.9GB:12.9GB:::boot, lvm;
评论
如何从保存的sda.parted文件还原到新磁盘?
–陈慧琳
2012年6月20日在1:46
这个答案没有用,因为问题在于将分区布局复制到新驱动器上。答案只是关于倾销。如何导入?请改善。
–itsafire
2015年10月8日,12:31
显然,目前尚无好的答案:serverfault.com/questions/709582/…
–奥修斯
19年5月30日在9:57
#4 楼
现代的sfdisk似乎适用于mbr和gpt分区表。我的首选方法是:源磁盘,/ dev / nvme1n1是目标磁盘。
评论
也许因为我们已经有了(几个)sfdisk答案,所以我们可以建议对其中之一进行编辑以指出此管道功能?
– Jeff Schaller♦
20年5月21日在17:03
#5 楼
GPT磁盘分区表的缩写(> 2TB磁盘大小需要):检查源磁盘分区表(打印)
sgdisk -p /dev/sda
Disk /dev/sda: 31251759104 sectors, 14.6 TiB
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 9EE86B93-3BA5-3C48-A6C5-111122223333
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 2048, last usable sector is 31251759070
Partitions will be aligned on 2048-sector boundaries
Total free space is 33 sectors (16.5 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 15626993630 7.3 TiB 8E00
2 15626993664 31251759070 7.3 TiB 8E00
将GPT磁盘SDA分区表克隆到新磁盘SDB(复制品)
sgdisk /dev/sda -R /dev/sdb
The operation has completed successfully.
检查副本磁盘分区表(打印)
sgdisk -p /dev/sdb
Disk /dev/sda: 31251759104 sectors, 14.6 TiB
Sector size (logical/physical): 512/4096 bytes
**Disk identifier (GUID)**: 9EE86B93-3BA5-3C48-A6C5-111122223333
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 2048, last usable sector is 31251759070
Partitions will be aligned on 2048-sector boundaries
Total free space is 33 sectors (16.5 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 15626993630 7.3 TiB 8E00
2 15626993664 31251759070 7.3 TiB 8E00
请注意,磁盘标识符(GUID)相同,因此在大多数情况下需要重新生成新的随机磁盘:
sgdisk -G /dev/sdb
The operation has completed successfully.
再次检查副本磁盘分区表(打印)
sgdisk -p /dev/sdb
Disk /dev/sda: 31251759104 sectors, 14.6 TiB
Sector size (logical/physical): 512/4096 bytes
**Disk identifier (GUID)**: 9EE86B93-3BA5-3C48-A6C5-925AB6C8E86B
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 2048, last usable sector is 31251759070
Partitions will be aligned on 2048-sector boundaries
Total free space is 33 sectors (16.5 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 15626993630 7.3 TiB 8E00
2 15626993664 31251759070 7.3 TiB 8E00
请注意,磁盘标识符(GUID)现在是唯一的。
评论
我不确定,但是我想到的唯一限制是msdos分区表方案对分区施加的2TB大小限制。为了克服此限制,可以改用GPT,但是AFAIK sfdisk无法与GPT一起使用。我不知道是否还有其他限制,或者sfdisk是否会报告无法解决的问题。
–Petr Uzel
2011年5月11日9:05
sfdisk不能用于大容量或支持GPT。
– dhchdhd
2011年5月11日在9:11
@Barry,当您说“大”时,您指的是@Petr在说的2TB限制?
–Lauritz V. Thaulow
2011年5月11日在9:18
正确的方法是:sudo parted / dev / sda -lm> sda.parted
– dhchdhd
2011年8月12日上午8:17
有时,仅忽略DOS问题,添加-L或--linux选项很有用:sfdisk -L / dev / sda
–迭戈
2014年7月15日10:17