将可启动USB记忆棒克隆到其他大小的记忆棒


11

硬件:2个8GB USB闪存盘
发行:Mint 9 Xfce持久性Live CD

一个USB闪存驱动器具有两个分区:
1)FAT32 700MB薄荷9分区
2)ext3 7.3GB casper-rw分区

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

经验:
1)我发现这dd不适用于该工作,因为如果我的一个闪存驱动器的大小即使相差1MB(有时大小也相差1MB),那么副本就会损坏。

2)我发现使用gparted和预格式化第二个驱动器像第一个驱动器然后rsync分别格式化每个分区均无法正常工作,因为由于某些原因,某些文件无法复制,并且该驱动器仍然无法启动。

我想保留我的工作棒,只复制它并为我的朋友配置这些工作棒。这样,如果我放另一根棍子,我将总是让我的根棍子坐在周围等待。


您使用什么引导程序(syslinux?)。请考虑从您的帖子中删除该言论,这对您的问题毫无价值。
马太福音

我使用的是Mint Live USB安装程序,因此它是全自动的。我希望克隆过程能够避免使用引导加载程序,并复制当前的引导加载程序conf
Joshua Robison

Answers:


5

介绍

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

我认为(但我没有检查过)阶段2位于第一个(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可以使用move命令(不是resize,它会调整文件系统的大小)来执行此操作,但是您需要找出正确的参数-切换到扇区(unit 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

嗯。我不能只使用head来将第二个分区的前300mb左右复制到img文件中吗?这样会不会切断文件末尾的所有空白区域?
Joshua Robison

1
@Joshua:不,因为没有理由将所有文件数据都存储在前300MB中,即使是这样,您也不能只加入这样的文件系统。您需要制作一个大小合适的有效文件系统。您还需要具有正确大小的分区。分区的大小存储在引导扇区中。如果您希望从最小尺寸的图像开始,然后根据需要放大图像,我在答案中添加了一种方法。
吉尔(Gilles)“所以,别再邪恶了”,

嗯。我曾尝试过复制文件,但是由于某种原因,所有内容都没有复制。我也用sudo尝试了rsync。而且我想我也尝试过su root,但也做了...。这对我不起作用。我确定驱动器未安装...反正。我决定在gparted中缩小驱动器,然后从中制作img文件,然后将它们还原到较小的磁盘上。gparted中的预收缩是我能找到的唯一简单的解决方案。谢谢您的帮助。
Joshua Robison

您的答案可能是正确的,并且很可能会满足我的要求。对我来说太复杂了。因此我采用了gparted预收缩方法。
Joshua Robison

这行有错字head -c 512 </dev/sdb >/bev/sdc吗?
2013年

3

〜$:sudo apt-get install gddrescue ddrescue

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

;

语法:实用程序/ source / drive /目的地/ drive --verbose

评论:显示进度和错误检查,因此您知道它是否可以接受或挂在某处。您还可以添加b =任意大小的块。“ gddrescue”是基于gui的“ ddrescue”版本,但我仅使用上面编写的ddrescue,因为它可以正常工作。


2
请注意,格式是正确的ddrescue -v /dev/sda /dev/sdb(选项在设备/文件名之前)。感谢您指出此工具!比使用容易得多dd
xmnboy

0

我最近将我的Kali live加密持久性从16GB克隆到了64GB 3.0 USB,我的主机操作系统是Windows 10专业版。我没有尝试使用任何Linux发行版进行克隆,我相信上面的答案是您所需要的,但对于任何Windows用户而言;我曾经使用过AOMEI磁盘分区助手。超级简单易用,用于将我的SSD分区以适合Ubuntu,但我离题。

我必须确保要克隆的USB已被格式化以用于实时启动。插入两个USB并在8GB驱动器上单击鼠标右键;单击,copy然后选择64GB驱动器,它将询问您诸如“您确定这是正确的驱动器,所有内容将被擦除”之类的问题。只需仔细阅读并确保一切都井井有条,您实际上就不必做太多事情。

只需等待过程完成即可,一切就绪。经测试说USB,一切正常!

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.