Jos*_*son 11 live-usb cloning bootable
硬件: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单独对每个分区进行格式化是行不通的,因为出于某种原因,某些文件没有被复制并且驱动器仍然无法启动。
我想保留我的工作棒,只是复制它并为我的朋友配置棒。这样,如果我弄坏了另一根棍子,我将始终让我的基本棍子坐在那里等待。
对于带有 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
Run Code Online (Sandbox Code Playgroud)
第一部分,如果从图像文件克隆:
cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1
Run Code Online (Sandbox Code Playgroud)
partprobe需要调用 to以便内核从磁盘重新加载分区表(它在引导扇区中,并且上述任一场景中的第一个命令修改引导扇区)。如果你忽略它,要么你会得到错误,要么内核会悄悄地把垃圾写到棒上。
要制作图像文件:
head -c 512 </dev/sdb >boot_sector.img
cat /dev/sdb1 >first_partition.img
Run Code Online (Sandbox Code Playgroud)
现在,在获得引导扇区和第一个分区后,您需要再次编辑分区表,以调整第二个分区的大小。您可以通过向 提供正确的输入来自动执行此操作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
Run Code Online (Sandbox Code Playgroud)
最后再次重新加载分区表,创建一个 ext3 文件系统,并将文件复制到那里。
partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2
Run Code Online (Sandbox Code Playgroud)
如果您愿意,您可以存储整根棍子的图像。您将能够直接在任何至少一样大的记忆棒上使用该图像:只需将该图像复制到新记忆棒上cat <whole.img >/dev/sdc,然后运行partprobe /dev/sdc(或拔下记忆棒并重新插入)以重新读取分区表。
然后,如果您愿意,可以放大克隆。按照这个顺序:
parted可以使用move命令(不是resize,它会调整文件系统的大小)来完成,但您需要找出正确的参数 - 切换到扇区 ( unit s) 以避免舍入错误。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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23412 次 |
| 最近记录: |