web-dev-qa-db-ja.com

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

ここで尋ねる前に、私はSU/SEとGoogleで検索しようとしましたが成功しませんでした。 これは私が得た最も近いものです。

基本的に、私は次のことをしようとしています:
-約128MBのディスクイメージを作成します。
-GPTを作成します。
-最初の32MBにFAT32パーティションを作成します(これをUEFIと呼びます)。
-残りのバイトにFAT32パーティションを作成します(これをSYSTEMと呼びます)。
-UEFIパーティションに次のサブディレクトリを作成します。/EFI/BOOT/;
-サブディレクトリ内のファイルをコピーします。
-SYSTEMパーティション内の別のファイルをコピーします。


これは私が今までやってきたことです:

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

別れたdisk.img
(別れ)mktable gpt
(parted)mkpart primary fat32 2048s 65535s
(parted)mkpart primary fat32 65536s 100%
(parted)align-checkoptimal 1
(parted)align-checkoptimal 2
(parted)name 1 UEFI
(parted)name 2 SYSTEM

これは私の出力です:

ディスクdisk.img:134MB 
セクターサイズ(論理/物理):512B/512B 
パーティションテーブル:gpt 
ディスクフラグ:
 
番号開始終了サイズファイルシステム名フラグ
 1 1049kB 33,6MB 32,5MB UEFI msftdata 
 2 33,6MB 134MB101MBシステムmsftdata



別の方法は、2つの異なるパーティションを作成し、後でそれらをマージすることです。

dd if =/dev/zero of = uefi.img bs = 1M count = 32 
 mformat -i uefi.img -v UEFI -f 1440 -c 1 :: 
 mmd -iuefi。 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 -isystem。 img myawesomeOS ::



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

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

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

どうすればこれを達成できますか?ヘルプやヒントをいただければ幸いです。

4
robschia

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

#256MBの空のディスクイメージを作成し、そのGPTを作成してから、
#2つのパーティションを作成します。最初のパーティションは約60MBで、2番目のパーティションは残りのバイトを埋めます
#。両方のパーティションが整列されます。
 ddif =/dev/zero of = disk.img bs = 1M count = 256 
 parted disk.img 
 mktable gpt 
 mkpart primary fat32 2048s 131071s 
 mkpart primary fat32 131072s 100%
 align-checkoptimal 1 
 align-checkoptimal 2 
 name 1 UEFI 
 name 2 SYSTEM 
 quit 
 
#33MBの空のディスクイメージを作成します。
 ddif =/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の空のディスクイメージを作成します。
 ddif =/dev/zero of = system.img bs = 1M count = 100 
#ディスクをフォーマットしますimage as FAT32 
 mkfs.vfat system.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 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 
#2つのパーティションをアンマウントします
 Sudo kpartx -dv disk.img 
4
robschia