msdosパーティションテーブルとfat32を使用してディスクイメージを作成する

msdosパーティションテーブルとfat32を使用してディスクイメージを作成する

単体テストに含めるディスクイメージファイルを作成したいと思います。このディスクファイルには、私が読みたいいくつかのファイルが含まれている必要があります。 SDカードまたはUSBスティックにコピーを作成すると、ddディスクイメージが大きすぎて圧縮してもサイズが大きすぎます。

だから、新しいディスクイメージを作成し、後でマウントしたいと思います。次に、新しいデータを追加し、バージョン管理のためにディスクイメージを圧縮します。

私の現在のステップ:

  1. ディスクイメージの作成:dd if=/dev/zero of=DISK1.img bs=1M count=1200
  2. 別々に開く:sudo parted DISK1.img
  3. パーティション化されたテーブルの作成(partedを使用):mklabel msdos
  4. パーティションの作成(partedを使用):mkpart primary fat32 1MB 100%
  5. 印刷:
    (parted) print                                                            
    Modell:  (file)
    Festplatte  <path>/DISK1.img:  1258MB
    Sektorgröße (logisch/physisch): 512B/512B
    Partitionstabelle: msdos
    Disk-Flags: 
    
    Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
     1      1049kB  1258MB  1257MB  primary  fat32        lba
    

parted を終了して再度開くと、ファイルシステムが認識されなくなりました。

(parted) print                                                            
Modell:  (file)
Festplatte  <path>/DISK1.img:  1258MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags: 

Nummer  Anfang  Ende    Größe   Typ      Dateisystem  Flags
 1      1049kB  1258MB  1257MB  primary               lba

最初から画像を作成するには?

2024-03-02 修正

@Stephen Kittのコメントを使って、次のように動作しました。

  1. dd if=/dev/zero of=DISK1.img bs=1M count=1200
  2. parted DISK1.img
  3. パーティション化されたテーブルの作成(partedを使用):mklabel msdos
  4. パーティションの作成(partedを使用):mkpart primary fat32 1MB 100%
  5. 別れの終了
  6. mkfs.vfat -v --offset 2048 DISK1.img

マウントパーティション:

  1. 開始セクタを探す:(fdisk -lu DISK1.img上記と同じ)
  2. オフセットの取得 (バイト): 512bytes * 2048sectors = 1048576
  3. lopsetup パーティション:sudo losetup -o 1048576 /dev/loop0 DISK1.img
  4. 山:sudo mount /dev/loop0 DISK_MOUNT
  5. マウントされたパーティションにデータをコピーする(ルートが必要)
  6. 削除sudo umount /dev/loop0
  7. 失われた分離:sudo losetup -d /dev/loop0

これで、新しいデータがディスクイメージにあります。

答え1

あなたのステップは正しいです。以下を追加します。

sudo mkfs.vfat -F 32 DISK1.img手順のステップ1以降とステップ2の前。

よりmkfs.vfat マンページ

答え2

partedパーティションテーブルとパーティションエントリを作成しますが、ファイルシステムも作成する必要があります。parted手順 5 を完了して終了し、適切なオフセットを使用してファイルシステムを作成します (何をしているかを示す-vためにこれを使用しています)。mkfs.vfat

$ /sbin/mkfs.vfat -v --offset 2048 DISK1.img
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK1.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2455551 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306339 clusters.
There are 32 reserved sectors.
Volume ID is 97413b09, no volume label.

これにより、最初のパーティション(セクタ2048で始まる)がFAT32ボリュームとしてフォーマットされます。画像を再読み込みすると、parted次のようになります。

$ /sbin/parted DISK1.img
(parted) print
Disk …/DISK1.img: 1258MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1258MB  1257MB  primary  fat32        lba

通常、画像を処理するときに適切なオフセットを決定するには、単位をpartedセクタに変更できます。

(parted) unit s                                                           
(parted) print                                                            
Model:  (file)
Disk …/DISK1.img: 2457600s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End       Size      Type     File system  Flags
 1      2048s  2457599s  2455552s  primary  fat32        lba

(自分のディスクイメージを扱っているので、必須ではなくsudoフルパスpartedmkfs.vfat/sbin/usr/sbinPATH

そうでなければ必要イメージのパーティションテーブルを使用すると、ディスクイメージ全体よりもファイルシステムイメージを使用する方が簡単になります。 1つのコマンドですべての操作を実行できますmkfs.vfat

$ /sbin/mkfs.vfat -v -C DISK2.img $((1200*1024))
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK2.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2457567 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306591 clusters.
There are 32 reserved sectors.
Volume ID is a452a0bf, no volume label.

関連情報