it-swarm.cn

如何使用标准工具复制整个磁盘的分区布局

我要备份硬盘驱动器的整个分区布局,包括逻辑驱动器,以便可以将该布局还原到另一个磁盘。我做not要复制分区的内容,仅复制布局。对于主分区和扩展分区,这很容易:

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将完成其余的工作。请记住,我需要能够将所有内容放回(可能是)空白磁盘,从而恢复相同的布局。使用fdiskparted之类的分区工具很好,但是我必须能够自动使用它们(脚本),并且它们不应该依赖于任何与X相关的软件包-仅命令行。

我的备份计划是使用struct模块以少量python脚本)手动进行的,但我希望有一种更简单的方法。

86
Lauritz V. Thaulow

您可以将 sfdisk 用于此任务。

救:

sfdisk -d /dev/sda > part_table

恢复:

sfdisk /dev/sda < part_table

对于GPT分区表,这需要util-linux 2.26或更高版本中的sfdisk。它 已从头开始重写到libfdisk上

这将原样复制UUID,而不是生成新的UUID。因此,新磁盘是原始磁盘的克隆,而不仅仅是具有相同布局的另一个磁盘。请注意,Linux的/dev/disk/by-uuid/会查看文件系统UUID,但不会查看分区表中的UUID。如果您从转储中删除UUID,则sfdisk将生成新的UUID(文件开始附近的分区表本身的每个分区和UUID)。

92
Petr Uzel

这取决于您的源磁盘是否使用 [〜#〜] mbr [〜#〜] (aka“ 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=)随机化。仅在要在同一台计算机上使用磁盘时才需要这样做,否则是不必要的。

54
mivk

较旧但仍很有趣的 pypartedpython-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;
5
dhchdhd