将可启动 USB 记忆棒克隆到不同大小的记忆棒

将可启动 USB 记忆棒克隆到不同大小的记忆棒

硬件:2 个 8GB USB 闪存驱动器
发行版:Mint 9 Xfce 永久 Live Cd

一个 U 盘有两个分区:
1) FAT32 700MB Mint 9 分区
2) ext3 7.3GBcasper-rw分区

目标:
我想复制该 USB 闪存驱动器,因为我不想再次从头开始安装和配置。

经验:
1)我发现这dd不适用于这项工作,因为如果我的一个闪存驱动器的大小甚至有 1MB 的差异(有时确实如此),那么副本就会损坏。

2)我发现gparted像第一个驱动器一样使用和预格式化第二个驱动器,然后rsync单独对每个分区进行操作是行不通的,因为由于某种原因,某些文件没有被复制并且驱动器仍然无法启动。

我想保留我的工作棒,只是复制它并为我的朋友配置这些棒。这样,如果我搞砸了另一根棍子,我将始终让我的基础棍子坐在那儿等待。

答案1

介绍

对于带有 PC 分区的驱动器(大多数 U 盘上都有),引导加载程序由驱动器开头的一小部分(第一阶段引导加载程序,位于驱动器的引导扇区中)和一个其他地方的较大部分(第二阶段引导加载程序,在文件中)。第 1 阶段数据包含第 2 阶段的物理位置。如果您复制整个设备(您尝试使用的dd),则第 1 阶段部分位于相同的物理位置并且该棒可以工作,但新棒必须至少为和原来一样大。如果您重新创建分区并复制文件,您将丢失第一阶段,因为它不是文件。

我认为(但我没有检查)第二阶段位于第一个(FAT32)分区中。如果是这样,您可以批量复制该分区,并复制引导扇区,然后编辑分区表,使第二个分区恰好占据剩余空间,然后复制第二个分区上的文件。您还可以将引导扇区和第一个分区的原始映像保留在硬盘上的文件中(但您也可以从 USB 记忆棒克隆它们)。

制作不同大小的克隆

下面我将把包含原始棒的设备/dev/sdb和包含克隆棒的设备称为/dev/sdc;根据需要替换名称。如果需要,创建安装点。我假设FAT32分区(在磁盘的开头)编号为1,ext3分区编号为2;如果需要,替换不同的数字。

第一部分,如果从棒克隆:

head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1

第一部分,如果从图像文件克隆:

cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1

需要调用partprobe,以便内核从磁盘重新加载分区表(它位于引导扇区中,并且上述任一情况中的第一个命令都会修改引导扇区)。如果省略它,要么会出现错误,要么内核会默默地将垃圾写入棒中。

制作图像文件:

head -c 512 </dev/sdb >boot_sector.img 
cat /dev/sdb1 >first_partition.img

现在,在获得引导扇区和第一个分区后,您需要再次编辑分区表,以调整第二个分区的大小。您可以通过向 提供正确的输入来自动执行此操作fdisk。警告,这非常容易出错,我还没有测试过。如果您对这部分感觉不太舒服,请手动完成。

sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2         # delete partition 2
n p 2       # new primary partition 2...
_ _         # ... using all available space
w q         # write and quit
EOF

最后再次重新加载分区表,创建一个 ext3 文件系统,并将文件复制到那里。

partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2

制作更大克隆的简化方法

如果您愿意,您可以存储整个棒的图像。您将能够直接在任何至少同样大的棒上使用该映像:只需使用 将该映像复制到新棒上cat <whole.img >/dev/sdc,然后运行partprobe /dev/sdc(或拔下棒并重新插入)以重新读取分区表。

然后,如果您愿意,可以放大克隆。按此顺序:

  1. 扩大分区。不幸的是,我不知道如何以简单的方式做到这一点。可以使用命令(不是,它会调整文件系统的大小)parted来完成此操作,但您需要找出正确的参数 - 切换到扇区 ( ) 以避免舍入错误。moveresizeunit s
  2. 扩大文件系统。这部分很简单:只需运行resize2fs /dev/sdc2即可使文件系统使用整个分区大小。

如果您从比需要的更大的棒开始,则可以按照相反的顺序执行上述步骤来缩小它(首先使用 缩小文件系统resize2fs,然后使用 缩小分区parted)。

或者,您可以先将棒复制到图像文件,然后处理该图像文件。要访问分区,请使用循环装置, 具体来说将文件的一部分关联到磁盘。如果您想缩小图像,这里是步骤的草图(警告,未经测试,请仔细进行并仔细检查数学)。

fdisk -lu whole.img  # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $  # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k

答案2

~$: sudo apt-get install gddrescue ddrescue

~$: ddrescue /dev/sda /dev/sdb -v

;

语法:utility /source/drive /destination/drive --verbose

评论:显示进度和错误检查,以便您知道它是否可以接受或挂在某个地方。您还可以添加b=无论你想要什么大小的块。 “gddrescue”是基于 GUI 的“ddrescue”版本,但我只使用上面写的 ddrescue,因为它工作没有问题。

答案3

我最近将我的 Kali live 加密持久性从 16GB 克隆到 64GB 3.0 USB,我的主机操作系统是 windows 10 pro。我没有尝试使用任何 Linux 发行版进行克隆,我确信上面的答案是您所需要的,但对于任何 Windows 用户来说;我用过傲梅磁盘分区助手。使用起来超级简单,用它来对我的 SSD 进行分区以适应 Ubuntu,但我离题了。

我必须确保我克隆到的 USB 已经被格式化为实时启动。插入两个 USB 并只需右键单击 8GB 驱动器;单击copy然后选择 64GB 驱动器,它会问您一堆问题,例如“您确定这是正确的驱动器吗?所有内容都将被删除”所有爵士乐。只需通读它并确保一切都按顺序进行即可,您实际上不必做太多事情。

只需等待该过程完成即可。测试了一下,USB 一切正常!

我发现这至少对我来说是最简单的方法,将实时发行版从 USB 克隆到 USB。

相关内容