web-dev-qa-db-ja.com

ファイルにディスクデバイスを作成する

次のファイルでディスクデバイスを作成しようとしています:

dd if=/dev/zero of=file.img bs=516096 count=1000
Sudo losetup /dev/loop0 file.img
(echo n; echo p; echo 1; echo ""; echo ""; echo w;) | Sudo fdisk -u -C1000 -S63 -H16 file.img
Sudo mke2fs -b1024 /dev/loop0 503968

私はそれをマウントしてくれてありがとう:

Sudo mkdir /mnt/fcd
Sudo mount -t ext2 /dev/loop0 /mnt/fcd

自作のブートローダーの作成:

Sudo dd if=loader.bin of=file.img bs=512 count=1 conv=notrunc

そしてそれをアンマウントします:

Sudo umount /dev/loop0
Sudo losetup -d /dev/loop0

2つの質問があります:

1.fdiskに次の出力があります:

Using default response p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-1007999, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1007999, default 1007999): 

最初のセクターが0からではなく2048から始まるのはなぜですか? ext2のMBRまたは他の何かのために0-2048ですか?

2.ディスクを作成した後、次を実行します。

fdisk -l file.img

そして、その出力は次のとおりです。

Disk file.img: 516 MB, 516096000 bytes
255 heads, 63 sectors/track, 62 cylinders, total 1008000 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
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System

なぜ1つのパーティションがないのですか?

ありがとうございました。

3
0xAX

1.-元々、fdiskは、MBR、patition tableなどに使用されるため、ディスク上の最初のシリンダーを空けたまま、シリンダーの境界に揃えようとしてパーティションを作成しました。このように、最初のパーティションは通常ブロック63で開始されます(各ブロックは512バイトです)。 RedHat 6.xなどのディストリビューションのfdiskは引き続きこのように機能しますが、警告が表示され、DOS互換ではないスキーマを選択できます。

新しいfdiskバージョンでは、MB境界に揃えられたパーティションを作成し、パーティションがページに揃えられるようにします。これはパフォーマンスに大きな影響を与えるためです(これについて知りたい場合は、私のブログで詳細を読むことができます: http: //sinrega.org/?p=14 および http://sinrega.org/?p=1 )。 2048は1MB(2048 * 512)です。

2.-ファイルバックアップデバイスでext2ファイルシステムを作成すると、パーティションテーブルが上書きされます。パーティションを作成したら、作成したパーティションと同じブロックから始まる別のループデバイスを接続する必要があります。あなたの場合、パーティションは2048から始まるので、オフセットは1048576(2048 * 512)である必要があります。

losetup -o 1048576 /dev/loop1 file.img
mkfs.ext2 /dev/loop1
mount /dev/loop1 /mnt
# Do whatever you want with the partition here
umount /mnt
losetup -d /dev/loop1
losetup -d /dev/loop0

これでうまくいくはずです。

3

sfdisk + mke2fs

これらの2つのツールを組み合わせて+いくつかの注意深いオフセット計算を行うことでそれを行うことができます。

これは、Sudoなしでも完全に実行できます。

ここでは、そのような最小限の実行可能な例について説明します: https://stackoverflow.com/questions/10949169/how-to-create-a-multi-partition-sd-image-without-root-privileges/52850819# 52850819