佈局磁碟映像並將檔案複製到其中

佈局磁碟映像並將檔案複製到其中

在問這裡之前,我嘗試在 SU/SE 和 Google 上搜尋但沒有成功。這是我得到的最接近的東西。

基本上,我正在嘗試執行以下操作:
- 建立大約 128MB 的磁碟映像;
- 創建一個GPT;
- 在前 32MB 中建立一個 FAT32 分割區(我稱之為 UEFI);
- 在剩餘位元組中建立一個 FAT32 分割區(我稱之為 SYSTEM);
- 在 UEFI 分割區中建立下列子目錄:/EFI/BOOT/;
- 複製子目錄中的檔案;
- 複製 SYSTEM 分割區中的另一個檔案。


這是我到目前為止所做的:

dd if=/dev/zero of=disk.img bs=1M 計數=128

parted disk.img
(parted) mktable gpt
(parted) mkpart Primary fat32 2048s 65535s
(parted) mkpart Primary fat32 65536s 100%
(parted) 對齊檢查最優
名稱 1 ( parted
)檢查)
) 名稱 2 系統

這是我的輸出:

磁碟disk.img:134MB  
扇區大小(邏輯/物理):512B/512B  
分區表:gpt  
磁碟標誌:  

編號 開始 結束 大小 檔案系統名稱 標誌  
 1 1049kB 33,6MB 32,5MB UEFI msftdata
 2 33,6MB 134MB 101MB 系統 msftdata



另一種方法是建立兩個不同的分割區,然後合併它們:

dd if=/dev/zero of=uefi.img bs=1M count=32
mformat -i uefi.img -v UEFI -f 1440 -c 1 ::
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT
dd if=/dev/zero of=system.img bs=1M 計數=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



在前一種方式中,我無法弄清楚為什麼「檔案系統」列是空的(應該是 fat32)以及如何建立子目錄和複製檔案。
在後一種方式中,我無法為兩個圖像創建正確的 FAT32 檔案系統,如果我將 -F 附加到 mformat 我得到

對於這個脂肪大小來說,簇太少了。請在 /etc/mtools.conf 或 .mtoolsrc 檔案中選擇 16 位元 fat

如果我設法做到這一點,我仍然不知道如何設定 GPT 並將兩個圖像合併到一個檔案中。

我怎樣才能實現這個目標?任何幫助或提示表示讚賞。

答案1

經過幾個小時的苦苦掙扎,我自己解決了。我將在這裡發布解決方案,以防萬一:

# 建立一個 256MB 的空磁碟映像,建立其 GPT,然後建立
# 兩個分割區:第一個分割區大約60MB,第二個分割區填滿
# 剩餘位元組。兩個分割區均對齊。
dd if=/dev/zero of=disk.img bs=1M 計數=256
分割磁碟.img
MK表GPT
mkpart 初級 fat32 2048s 131071s
mkpart 初級脂肪32 131072s 100%
對齊檢查最優 1
對齊檢查最優 2
名稱 1 UEFI
名稱 2 系統
辭職

# 建立一個 33MB 的空磁碟映像。
dd if=/dev/zero of=uefi.img bs=1M count=33
# 將磁碟映像格式化為 FAT32
mkfs.vfat uefi.img -F 32
# 建立請求的子目錄。
mmd -i uefi.img ::/EFI
mmd -i uefi.img ::/EFI/BOOT
# 複製啟動檔案。
mcopy -i uefi.img BOOTX64.EFI ::/EFI/BOOT

# 建立一個 100MB 的空磁碟映像。
dd if=/dev/zero of=system.img bs=1M 計數=100
# 將磁碟映像格式化為 FAT32
mkfs.vfat 系統.img -F 32
# 複製作業系統檔案。
mcopy -i system.img SYSTEM.EFI ::

# 啟用 kpartx 請求的核心模組,以防萬一。
sudo modprobe dm-mod
# 將disk.img中的兩個分割區映射並掛載到/dev/mapper/loop0p1並
# /dev/mapper/loop0p2
sudo kpartx -av disk.img
# 將 UEFI 分割區複製到磁碟映像中。
sudo dd if=uefi.img of=/dev/mapper/loop0p1 bs=1M
# 將 SYSTEM 分割區複製到磁碟映像中。
sudo dd if=system.img of=/dev/mapper/loop0p2 bs=1M
# 解除安裝兩個分割區
sudo kpartx -dv disk.img

相關內容