將可啟動 USB 驅動器複製到另一個具有相同大小的記憶棒
我有 20 個相同(大小)的 USB 驅動器,我需要在其中放置可啟動的 Ubuntu 版本。我使用的驅動器容量為 4GB。我將驅動器分為兩個分區(GPT、FAT32),所以我有一個用於作業系統的分區和一個用於放置數據的分區。
我正在使用 UNetbootin 創建可啟動的 Ubunutu 棒。一切似乎都執行良好,但速度極慢(安裝時間約為 30 分鐘)。
現在我想知道是否可以以某種方式將這些棒深度複製到剩餘的 19 根棒上,而無需手動分區驅動器並在每個驅動器上執行 UNetbootin。
如果不是,也許另一種方法是編寫一個執行分區的腳本,創建一個可引導分區,然後
dd
將內容放到正確的分區上?我正在執行 macOS,因此沒有安裝 Gparted 或任何其他花哨的 Linux 工具(可能)。
dd 正在製作驅動器的完整副本,包括分區表和其他所有內容(如 ipor 或多或少說明)。
這樣的事情應該可以解決問題:
dd if=<your reference usb stick> of=<one of the 19 other usb sticks> bs=32M
您甚至可以先將參考 USB 棒的內容作為圖像轉儲到磁碟以保存以供以後使用;-)
根據 U 盤的大小,這可能需要一段時間,因為您正在複製然後寫出大量空白空間。
使用 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
要將文件寫入空白 U 盤,您現在可以執行以下操作:
sudo bmaptool copy --bmap /path/to/source.img.bmap /path/to/source.img.sparse.gz /dev/sdX
https://source.tizen.org/documentation/reference/bmaptool
客魚
如果你覺得自己特別聰明,你還可以使用 guestfish 項目中的工具在複製 linux 映像之前對其進行清理。這會刪除日誌文件、伺服器 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