Lau*_*low 100 command-line partition
我想备份硬盘驱动器的整个分区布局,包括逻辑驱动器,以便我可以将该布局恢复到另一个磁盘。我不想要复制分区的内容,只有布局。对于主分区和扩展分区,很简单:
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
Run Code Online (Sandbox Code Playgroud)
但是说到逻辑分区的布局,我想知道标准工具中是否存在类似的保存布局的方式?我想主要问题是找到 EBR 位置的偏移量,因为有了它,dd剩下的就可以完成了。请记住,我需要能够将所有内容放回(可能)空白磁盘,从而恢复相同的布局。使用像fdisk或这样的分区工具parted很好,但我必须能够自动化它们的使用(脚本)并且它们不应该依赖于任何与 X 相关的包——仅命令行。
我的备份计划是使用 struct 模块在一个小的 python 脚本中手动完成,但我更希望有一种更简单的方法。
Pet*_*zel 114
即使在 GPT 分区磁盘中,您也可以使用sfdisk执行此任务*。
节省:
sfdisk -d /dev/sdX > part_table
Run Code Online (Sandbox Code Playgroud)
恢复保持相同的磁盘和分区 ID**:
sfdisk /dev/sdX < part_table
Run Code Online (Sandbox Code Playgroud)
恢复生成新的磁盘和分区 ID**:
grep -v ^label-id part_table | sed -e 's/, *uuid=[0-9A-F-]*//' | sfdisk /dev/sdY
Run Code Online (Sandbox Code Playgroud)
笔记
*:对于GPT 分区表,这需要sfdiskutil-linux 2.26 或更高版本。它是在 libfdisk 之上从头重写的。
**:默认情况下sfdisk将复制磁盘和分区 ID 不变,而不是生成新的。因此,新磁盘将是原始磁盘的克隆,而不仅仅是具有相同布局的另一个磁盘。请注意,Linux 会/dev/disk/by-uuid/查看文件系统 UUID,而不是分区表中的 UUID。 sfdisk如果您从转储中删除对分区 ids( , uuid=...) 的引用和对磁盘 id( label-id: ...)的引用,则将生成新的 UUID 。
miv*_*ivk 61
这取决于您的源磁盘是使用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
Run Code Online (Sandbox Code Playgroud)
给定的
source=/dev/sda
dest=/dev/sdb
Run Code Online (Sandbox Code Playgroud)
sfdisk按照 Petr Uzel 的回答或以下变体的建议使用:
# 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
Run Code Online (Sandbox Code Playgroud)
正确答案在这里和这里由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
Run Code Online (Sandbox Code Playgroud)
最后一个命令随机化磁盘和所有分区上的 GUID。仅当磁盘要在同一台机器上使用时才需要,否则没有必要。