![将磁盘布局和分区复制到另一个驱动器](https://linux22.com/image/106135/%E5%B0%86%E7%A3%81%E7%9B%98%E5%B8%83%E5%B1%80%E5%92%8C%E5%88%86%E5%8C%BA%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E9%A9%B1%E5%8A%A8%E5%99%A8.png)
我正在开发一个应用程序,我需要创建始终具有完全相同的分区布局的驱动器。我最初的想法是用 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
需要设置位execute
。chmod +x sys_replicate.sh
要使用该过程,设置后,连接目标磁盘。如果是 USB,请确保系统已识别出它可用。如果它是内置硬盘,显然需要重新启动,系统应该会自动找到它。连接后,非常确保您知道它/dev
是什么,因为添加磁盘可以重新排列字母。准备就绪后,在root
shell 中执行:
./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。