将可启动 USB 驱动器克隆到另一个具有相同大小的记忆棒

将可启动 USB 驱动器克隆到另一个具有相同大小的记忆棒

我有 20 个相同(大小)的 USB 驱动器,我需要在其中放置可启动的 Ubuntu 版本。我使用的驱动器容量为 4GB。我将驱动器分为两个分区(GPT、FAT32),因此我有一个用于操作系统的分区和一个用于存放数据的分区。

我正在使用 UNetbootin 创建可启动的 Ubunutu 棒。一切似乎都工作正常,但速度非常慢(大约 30 分钟安装时间)。

现在我想知道是否可以以某种方式将这些棒深度克隆到剩余的 19 个棒,而无需手动对驱动器进行分区并在每个驱动器上运行 UNetbootin。

如果没有,也许另一种选择是编写一个执行分区的脚本,创建一个可引导分区,然后将dd内容复制到正确的分区上?

我运行的是 macOS,因此没有安装 Gparted 或任何其他精美的 Linux 工具(可能)。

答案1

dd 正在对驱动器进行完整复制,包括分区表和其他所有内容(如 ipor 或多或少说明的那样)。

像这样的事情应该可以解决问题:

dd if=<your reference usb stick> of=<one of the 19 other usb sticks> bs=32M

您甚至可以先将参考 USB 记忆棒的内容作为映像转储到磁盘上,以保存供以后使用;-)

答案2

根据 USB 记忆棒的大小,这可能需要一段时间,因为您正在复制然后写入大量空白空间。

有一种更好的方法可以使用 bmap 工具来完成此操作,该工具仅将使用过的块写入磁盘映像中。

我在这里使用了许多工具,这些工具是为 Ubuntu / Debian 打包的,但默认情况下并未安装以安装它们运行

sudo apt-get install bmap-tools libguestfs-tools pigz

首先您需要创建源图像:

sudo dd if=/dev/source of=/path/to/source.img bs=1M

稀疏图像

接下来,您需要从图像中删除所有零以创建稀疏文件:

cp --sparse=always /path/to/source.img /path/to/source.img.sparse

您可能已经注意到,这会生成图像的副本并占用更多空间,幸运的是我们可以在管道中使用 cp:

sudo dd if=/dev/source bs=1M | cp --sparse=always /dev/stdin /path/to/source.img.sparse

bmap 工具

现在我们需要生成一些有关如何使用 bmaptool 布局图像文件的元数据:

bmaptool create -o /path/to/source.img.bmap /path/to/source.img.sparse

如果您愿意,现在可以压缩图像文件,bmaptool 将自动解压缩图像文件。 Pigz 是一个并行的 gzip 压缩工具。

pigz /path/to/source.img.sparse

要将文件写入空白 USB 记忆棒,您现在可以执行以下操作:

sudo bmaptool copy --bmap /path/to/source.img.bmap /path/to/source.img.sparse.gz /dev/sdX

https://source.tizen.org/documentation/reference/bmaptool

客鱼

如果您觉得自己更聪明,您还可以在克隆 Linux 映像之前使用 guestfish 项目中的工具来清理它。这会删除日志文件、服务器 ssh 密钥等内容。

在压缩映像以清理映像之前运行这些命令。

此命令清理映像,删除日志、历史文件、ssh 服务器密钥等

virt-sysprep -a /path/to/source.img.sparse

此命令在首次启动时使用新的服务器密钥设置 ssh。

virt-customize --firstboot-command "dpkg-reconfigure openssh-server" /path/to/source.img.sparse

此命令在映像上运行 fstrim,从文件系统中删除所有未使用的块,就像修剪 SSD 一样。

virt-sparsify --inplace /path/to/source.img.sparse

http://libguestfs.org/

相关内容