
ここで質問する前に、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