単体テストに含めるディスクイメージファイルを作成したいと思います。このディスクファイルには、私が読みたいいくつかのファイルが含まれている必要があります。 SDカードまたはUSBスティックにコピーを作成すると、dd
ディスクイメージが大きすぎて圧縮してもサイズが大きすぎます。
だから、新しいディスクイメージを作成し、後でマウントしたいと思います。次に、新しいデータを追加し、バージョン管理のためにディスクイメージを圧縮します。
私の現在のステップ:
- ディスクイメージの作成:
dd if=/dev/zero of=DISK1.img bs=1M count=1200
- 別々に開く:
sudo parted DISK1.img
- パーティション化されたテーブルの作成(partedを使用):
mklabel msdos
- パーティションの作成(partedを使用):
mkpart primary fat32 1MB 100%
- 印刷:
(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のコメントを使って、次のように動作しました。
dd if=/dev/zero of=DISK1.img bs=1M count=1200
parted DISK1.img
- パーティション化されたテーブルの作成(partedを使用):
mklabel msdos
- パーティションの作成(partedを使用):
mkpart primary fat32 1MB 100%
- 別れの終了
mkfs.vfat -v --offset 2048 DISK1.img
マウントパーティション:
- 開始セクタを探す:(
fdisk -lu DISK1.img
上記と同じ) - オフセットの取得 (バイト): 512bytes * 2048sectors = 1048576
- lopsetup パーティション:
sudo losetup -o 1048576 /dev/loop0 DISK1.img
- 山:
sudo mount /dev/loop0 DISK_MOUNT
- マウントされたパーティションにデータをコピーする(ルートが必要)
- 削除
sudo umount /dev/loop0
- 失われた分離:
sudo losetup -d /dev/loop0
これで、新しいデータがディスクイメージにあります。
答え1
答え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
フルパスparted
をmkfs.vfat
。/sbin
/usr/sbin
PATH
そうでなければ必要イメージのパーティションテーブルを使用すると、ディスクイメージ全体よりもファイルシステムイメージを使用する方が簡単になります。 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.