web-dev-qa-db-ja.com

mkfs.ext4:デバイスdevice.imgの無効なブロックoffset = X

私の目標は、通常のファイルを作成し、その中にパーティションとファイルシステム(文字通り仮想ハードドライブ)を作成し、最後にそれをマウントすることです。

Sudo dd if=/dev/zero of=imagem-zero.img count=20480000

約20Gbでファイルを作成します。次に、cfdiskでパーティションを作成しました。その後、ファイルのステータスは次のようになりました。

$ gdisk -l imagem-zero.img

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk imagem-zero.img: 40960000 sectors, 19.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 544A9633-7FA3-4BE8-BEE7-612C151A4504
Partition table holds up to 128 entries
First usable sector is 2048, last usable sector is 40959966
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        16779263   8.0 GiB     8304  
   2        16779264        40959966   11.5 GiB    8302  

ここで、これら2つのパーティションの両方でファイルシステムをext4にしたいのですが、質問のタイトルにエラーメッセージが表示されて失敗します。

$ Sudo mkfs.ext4 imagem-zero.img offset=$((2048*512))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=1048576' on device 'imagem-zero.img'

$ Sudo mkfs.ext4 imagem-zero.img offset=$((2048))
mke2fs 1.43.4 (31-Jan-2017)
mkfs.ext4: invalid blocks 'offset=2048' on device 'imagem-zero.img'

私の質問は、両方のパーティションでファイルシステムを作成するための正しいオフセットを見つける方法です。

1
Fabiotk

_-E_スイッチの使用を忘れました!

さらに、必要のない場合はSudoを使用しないことをお勧めします。

  1. ゼロ化されたファイルを作成します。ここでSudoは必要ありません。

    _dd if=/dev/zero of=image-zero.dd count=20480000 status=progress
    _
  2. ゼロ化された画像を必要に応じてcfdiskで分割します。ここでは、Sudoは必要ありません。

    _cfdisk image-zero.dd
    _
  3. ここでSudoを必要とせずに、を使用してパーティション上にファイルシステムを作成します。

    _mkfs.ext4 image-zero.dd -E offset=$(( 512 * 2048 ))
    _
  4. マウントポイントディレクトリを作成します。

    _mkdir mnttest
    _
  5. でイメージをマウントします。ここでSudoが必要であることに注意してください。

    _Sudo mount -t ext4 -o offset=$(( 512 * 2048 )) image-zero.dd ./mnttest
    _

Linux Mint 19でテスト済み


適切なオフセットを見つける方法

あなたの画像は:

  • 論理セクターサイズ:512バイト

  • 最初のパーティションの開始セクター:2048

  • 2番目のパーティションの開始セクター:16779264

計算:

論理セクターのサイズにパーティションの開始セクターを掛けて、シェルで計算してみましょう。

結果:

  • 1番目のパーティション:offset=$(( 512 * 2048 ))

  • 2番目のパーティション:offset=$(( 512 * 16779264 ))

3

offset=オプションを使用してファイルシステムを作成できるとすると、どのように使用しますか?

マニュアルページには

-E拡張オプション

ファイルシステムの拡張オプションを設定します。拡張オプションはコンマで区切られ、等号( '=')を使用して引数を取ることができます。

オフセット=オフセット

デバイスまたはファイルの先頭からオフセットしてファイルシステムを作成します。これは、仮想マシンのディスクイメージを作成するときに役立ちます。

したがって、正しい構文は次のようになります。

Sudo mkfs.ext4 imagem-zero.img -E offset=$((2048))

これにより、ファイルシステムを作成できますが、いくつかのファイルを作成することもできます。したがって、ループデバイスを使用することをお勧めします。

losetup -P -f imagem-zero.img

これにより、/dev/loopXとパーティション/dev/loopXp0/dev/loopXp1が得られます。これらのパーティションでmkfsを使用してマウントし、これらのパーティションにファイルを書き込むことができます。パーティションをアンマウントした後、

losetup -d /dev/loopX
0
RalfFriedl