我有 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