imgファイル内でパーティションをフォーマットする方法は?

imgファイル内でパーティションをフォーマットする方法は?

img次のコマンドでファイルを作成しました。

dd if=/dev/zero bs=2M count=200 > binary.img

ゼロのファイルだけですが、それを使用してfdiskパーティションテーブルを作成できます。

# fdisk binary.img

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x51707f21.

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x51707f21

パーティションがあるとします。

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-819199, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-819199, default 819199): 

Created a new partition 1 of type 'Linux' and of size 399 MiB.

Command (m for help): w
The partition table has been altered.
Syncing disks.

パーティションテーブルを確認すると、次の結果が表示されます。

Command (m for help): p
Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7f3a8a6a

Device      Boot Start    End Sectors  Size Id Type
binary.img1       2048 819199  817152  399M 83 Linux

だからパーティションが存在します。 gpartedでパーティションをフォーマットしようとすると、次のエラーが発生します。

ここに画像の説明を入力してください。

なぜ見えるのかわからず、binary.img1ライブコマンドでパーティションをフォーマットする方法もわかりません。

ext4ファイルシステムを使ってフォーマットする方法を知っている人はいますか?

答え1

ループバック機能により、ディスクイメージと個々のパーティションにアクセスできます。特定のディスクユーティリティがディスクイメージで(合理的に)スムーズに実行されることを発見しました。しかし、mkfsその一つではありません(まだ奇妙なことにmount)。

出力は次のとおりですfdisk -lu binary.img

Disk binary.img: 400 MiB, 419430400 bytes, 819200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...

Device           Boot Start    End Sectors  Size Id Type
binary.img1            2048 819199  817152  399M 83 Linux

作成したパーティションにアクセスするには、いくつかのオプションがあります。

  1. 明確なパス

    losetup --offset $((512*2048)) --sizelimit $((512*817152)) --show --find binary.img
    /dev/loop0
    

    出力は/dev/loop0割り当てられたループ装置の名前です。この--offsetパラメータは、単にパーティションのオフセット(Start)とセクタサイズ(512)を掛けたものです。--sizelimitむしろ、パーティションのサイズは次のように計算できます。 End-Start+1(819199-2048+1=817152)、この数にセクタのサイズを掛ける必要があります。

    /dev/loop0その後、パーティショニングの参照として使用できます。

    mkfs -t ext4 -L img1 /dev/loop0
    mkdir -p /mnt/img1
    mount /dev/loop0 /mnt/img1
    ...
    umount /mnt/img1
    losetup -d /dev/loop0
    
  2. 暗黙的なルーティング

    losetup --partscan --show --find binary.img
    /dev/loop0
    

    出力は、/dev/loop0割り当てられたメインループデバイスの名前です。この--partscanオプションは、カーネルにパーティションテーブルからデバイスを検索し、セカンダリループデバイスを自動的に割り当てるように指示します。パーティションを使用している場合は、/dev/loop0p1そのパーティションへの参照として使用することもできます。

    mkfs -t ext4 -L img1 /dev/loop0p1
    mkdir -p /mnt/img1
    mount /dev/loop0p1 /mnt/img1
    ...
    umount /mnt/img1
    losetup -d /dev/loop0
    

答え2

通常、これを行う別の方法がありますkpartxいいえkde 関連)

sudo kpartx -a binary.img

/dev/mapperこれで、すべてのパーティションデバイスを次のように定義する必要があります。ループ0p1ループ0p2、...

それから

sudo mkfs.ext4 /dev/mapper/loop0p1

または、完了したら、以下を実行することもできます。

sudo kpartx -d binary.img

loop0pを削除しますか?装備

答え3

なぜ探しているのかわかりません。binary.img1

(…binary.img2後でコメントで埋められました。)

これは、これらのツールがファイル名が特定のパターンに従うことを期待しているためです。このモードは、システムの物理ディスクとディスクボリュームのデバイスファイルで使用されるモードです。

  • ディスク全体を含むデバイスファイルには名前が付けられますsda(または別の名前で指定)。これがfdisk悪用されると予想されるものです。
  • ディスクの各スライス(対応するパーティションで説明されている)のデバイスファイルの名前は、sda1などsda2sda3指定されます。このようなツールが何をすべきかを知らせるときに期待gpartedするものは次のとおりです。mkfs別々のディスクボリューム

もちろん、通常のファイルはディスクデバイスファイルのように重複しません。ループバックファイルシステムに関する議論は、単一のフルディスクイメージファイルをインポートし、ループバックを使用して目的のパーティションレイアウトをパーティションテーブルに書き込んだ後、その中にある個々のスライスを反映するファイルを作成すること1です。23

答え4

このトピックは直接的な関係はありませんが、同じで関連する情報について多く言及しています。

Debian Wiki | Raspberry Piとqem​​u-user-static

aptこの資料に記載されているコマンドのいくつかをインストールするのに問題がある場合apt-cache search [package_name]。コマンドが別の名前のパッケージから出た場合、結果が表示されないことがあります。

たとえば、以前はを使用してインストールできましたが、losetup今はUbuntuリポジトリの一部です。どのパッケージが他のパッケージのコンテナとして機能するかを調べるには、Linuxディストリビューションのオンラインストアを検索する方法を使用する必要があります。または他のソースからインストールする必要がある場合は、Web検索エンジンを使用してください。losetupapt install losetuputil-linux

確認する価値があるいくつかのパッケージ...

util-linux genisoimage dosfstools squashfs-tools fsarchiver xfsprogs reiserfsprogs reiser4progs jfsutils ntfsprogs btrfs-tools

各Linuxディストリビューションには独自のオンラインマンページもあります。時にはチュートリアルよりもマニュアルページを使用する方が簡単です。マニュアルページには、すべてのコマンドオプションとパラメータに関する情報も表示されます。チュートリアルでは、一般的に使用される内容にのみ焦点を当てています。

関連情報