ディスクイメージのレイアウトとファイルのコピー

ディスクイメージのレイアウトとファイルのコピー

ここで質問する前に、SU/SE と Google で検索してみましたが、見つかりません。これが私が手に入れた最も近いものです。

基本的に、次のことを実行しようとしています。
- 約 128 MB のディスク イメージを作成します。
- GPT を作成します。
- 最初の 32 MB に 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) align-check optimizer 1
(parted) align-check optimizer 2
(parted) name 1 UEFI
(parted) name 2 SYSTEM

これが私の出力です:

ディスク disk.img: 134MB  
セクターサイズ(論理/物理):512B/512B  
パーティションテーブル: gpt  
ディスクフラグ:  

番号 開始 終了 サイズ ファイルシステム名 フラグ  
 1 1049kB 33.6MB 32.5MB UEFI msftデータ
 2 33.6MB 134MB 101MB システム msftdata



別の方法としては、2 つの異なるパーティションを作成し、後でそれらを結合する方法があります。

dd if=/dev/zero of=uefi.img bs=1M カウント=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 count=100
mformat -i system.img -v UEFI -f 1440 -c 1 ::
mcopy -i system.img myawesomeOS ::



前者の場合、「ファイルシステム」列が空である理由(fat32と表示されるはず)と、サブディレクトリを作成してファイルをコピーする方法がわかりません。
後者の場合、2つのイメージに対して適切なFAT32ファイルシステムを作成できません。mformatに-Fを追加すると、次のようになります。

このファット サイズにはクラスタが少なすぎます。/etc/mtools.conf または .mtoolsrc ファイルで 16 ビット ファットを選択してください。

たとえそれができたとしても、GPT を設定して 2 つの画像を 1 つのファイルに結合する方法がまだわかりません。

これを実現するにはどうすればいいでしょうか? 助言やヒントがあればいただければ幸いです。

答え1

数時間苦労した後、自分で解決しました。念のため、ここに解決法を投稿します。

# 256MBの空のディスクイメージを作成し、GPTを作成してから
# 2つのパーティション:最初のパーティションは約60MB、2番目のパーティションは約
# 残りのバイト。両方のパーティションが整列しています。
dd if=/dev/zero of=disk.img bs=1M カウント=256
分割されたディスク.img
mktable gpt
mkpart プライマリ fat32 2048s 131071s
mkpartプライマリfat32 131072s 100%
最適な整列チェック 1
最適な整列チェック 2
名前 1 UEFI
名前 2 システム
やめる

# 33MB の空のディスク イメージを作成します。
dd if=/dev/zero of=uefi.img bs=1M カウント=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 count=100
# ディスクイメージをFAT32としてフォーマットします
mkfs.vfat システム.img -F 32
# OS ファイルをコピーします。
mcopy -i system.img SYSTEM.EFI ::

# 念のため、kpartx によって要求されたカーネル モジュールを有効にします。
sudo modprobe dm-mod
# disk.img 内の 2 つのパーティションを /dev/mapper/loop0p1 にマップしてマウントし、
# /dev/mapper/loop0p2
sudo kpartx -av ディスク.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
# 2つのパーティションをアンマウントします
sudo kpartx -dv ディスク.img

関連情報