将磁盘布局和分区复制到另一个驱动器

将磁盘布局和分区复制到另一个驱动器

我正在开发一个应用程序,我需要创建始终具有完全相同的分区布局的驱动器。我最初的想法是用 sfdisk 转储原始驱动器的分区表。

sfdisk -d /dev/sdX > parttable

然后将其应用到所有其他驱动器:

sfdisk /dev/sdX < parttable

但这个方法似乎不起作用。我从 USB 驱动器中转储了正确的分区表,然后使用 gparted 创建了一些随机分区,然后尝试将初始分区表写回驱动器。

但问题是,分区无法识别。例如,Gparted 将分区列为未知。我想,我可能必须格式化创建的分区,因为分区表不存储有关文件系统的信息。

我现在的问题是:我可以以某种方式保存分区表和有关分区的信息(文件系统等)并以这种方式创建一个新驱动器(最多用一个命令)。

顺便说一句:msdos 分区表

编辑:另一种方法是,自己收集有关驱动器(例如parttable、文件系统)的所有数据并手动创建命令。是否可以(也许使用parted)在一个命令中创建分区表并格式化多个分区?

答案1

在以下条件下工作:

  • 要复制的原始磁盘是/dev/sdx
  • 原始磁盘已正确分区/标记/标记
  • 原始磁盘的文件系统内容将被忽略
  • 要复制到的目标磁盘将是/dev/sdy
  • 交换分区将是/dev/sdy4
  • 引导分区将与文件系统一起/dev/sdy1安装/boot在最终系统中ext3
  • 根分区将通过文件系统/dev/sdy2安装/在最终系统中ext4
  • 用户分区将通过文件系统/dev/sdy3安装/home在最终系统中ext4
  • 您要复制的 Debian 系统已被压缩并压缩到master_system.tar.gz
  • 所有文件,包括脚本,都将存储在工作目录中
  • 该脚本将从同一工作目录执行
  • root该脚本将以,的身份运行,sudo但要么以 root 身份登录,要么su在终端中运行
  • dupe_mnt工作目录中有一个目录

要“复制”原始磁盘的分区结构,只需要一次,除非结构发生改变。

sfdisk --dump /dev/sdx > master_table

由于只有您在相关系统上才能确定从作为主系统的 Debian 系统复制什么内容,因此我不打算深入讨论这些内容。我知道您不会复制/proc/dev//sys目录,但肯定还有其他目录需要排除。以您选择的任何方式创建该存档,并将其命名master_system.tar.gz。这应该包括其中的/boot和目录。/home就这样,安装就完成了,直到您更改要复制的 Debian 系统或磁盘分区为止。

要创建的脚本称为sys_replicate.sh

#!/bin/sh
target=$1;
sfdisk /dev/${target} < master_table;
# Format the swap partition
mkswap /dev/${target}4;
# Format the data partitions
mkfs.ext3 /dev/${target}1;
mkfs.ext4 /dev/${target}2;
mkfs.ext4 /dev/${target}3;
# Mount the target root filesystem and its parts
mount /dev/${target}2 dupe_mnt;
mount /dev/${target}1 dupe_mnt/boot;
mount /dev/${target}3 dupe_mnt/home;
# Copy the master system to the target
cd dupe_mnt;
tar -zxvpf ../master_system.tar.gz;
cd ..;
# Unmount the new system
cd ..
umount /dev/${target}3;
umount /dev/${target}1;
umount /dev/${target}2;
#done

该文件sys_replicate.sh需要设置位executechmod +x sys_replicate.sh

要使用该过程,设置后,连接目标磁盘。如果是 USB,请确保系统已识别出它可用。如果它是内置硬盘,显然需要重新启动,系统应该会自动找到它。连接后,非常确保您知道它/dev是什么,因为添加磁盘可以重新排列字母。准备就绪后,在rootshell 中执行:

./sys_replicate.sh sdy

设备名称/dev/sdy显然/dev/sdx需要更改以匹配您的操作系统。而且,事实证明,sfdisk 处理 GPT 磁盘和扩展分区,因此不需要我之前的评论问题。如果您使用比原始磁盘更大的磁盘作为副本,一切仍然可以正常工作。你会浪费你不能的空间容易地但是,请在选择要复制的主磁盘之前考虑回收这一点。

分区结构的创建和 Debian 系统的复制是独立的,因此对其中一个的更改不需要更新另一个。

答案2

正如评论中所说,dd 将复制数据、分区布局等。唯一的问题是源磁盘和目标磁盘必须相同(柱面、磁头、扇区等)

一个更好的选择,在某种程度上成为硬件中立的选择是使用clonezilla -http://clonezilla.org/

答案3

MBR分区是磁盘的0扇区,用dd克隆它:

sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1

注意:目标磁盘的数据可能会被破坏。要激活新分区,您必须运行 kpartx。

相关内容