ループなしで通常のファイルのボリュームを分割する方法は?

ループなしで通常のファイルのボリュームを分割する方法は?

私はOSを開発しようとしていますが、ステップ0はext4パーティション(最初のLBAで指定)のファイル(inodeで指定)からステップ1をロードするブートローダーで始まります。もちろん、ブートする必要があり、QEMUを選択しました。何をすべきか?

これまでうまく機能するのは次のとおりです。

truncate -s64M /tmp/SomeVolume
/sbin/mke2fs -t ext4 -F /tmp/SomeVolume
yasm phase0.asm
dd if=phase0 of=/tmp/SomeVolume conv=notrunc

約64MBのボリュームを作成してext4でフォーマットし、最初の1024オクテットをPhase0で上書きしました(サイズは常に1024バイトです)。これは素晴らしい作品です。

しかし、もう少し現実的なシナリオに適しているかどうかをテストするために、適切に分割されたファイルを作成したいと思います。/sbin/cfdisk私はボリュームファイルが利用可能であることを知っていますが、mke2fsファイルから範囲を選択できるパラメータはありません。

今知っていますループを利用したソリューションしかし、残念ながら私には機能しないようです(max_partDebian jessieでは変更できないようです)。あるようだ他のモジュールが呼び出されます。nbdただし、モジュールと一緒にサーバーとクライアントがインストールされていません。そして、ユーザー空間で明らかにできることを行うには、ルートアクセスが必要であることは少し面白いです。

ユーザーとしてこれをどのように実行しますか?それとも、私が作成したext4形式のファイルの周りにMBR / GPTパーティションボリュームを構築する必要がありますか?

ベストアンサー1

長い旅行。しかし楽しみのために:

1.一時イメージを作成します。

    $ truncate -s64MiB tmp.img

2.次のコマンドを使用して2つのパーティションを作成しますfdisk

少し詳しく説明していますが、大丈夫です。

$ fdisk tmp.img

最初のパーティション:

: n <Enter>
: <Enter> (p)
: <Enter> (1)
: <Enter> (2048)
: +40M <Enter>

2番目のパーティション:

: n <Enter>
: <Enter> (p)
: <Enter> (2)
: <Enter> (83968)
: <Enter> (131071)

私たちが書きたいものを印刷してください:

: x
: p
Nr AF  Hd Sec  Cyl  Hd Sec  Cyl     Start      Size ID
 1 00  32  33    0  57  52    5       2048      81920 83
 2 00  57  53    5  40  32    8      83968      47104 83

作成して終了します。

:w (Dont! forget ;-) )

40MiBと23MiBの2つのパーティションがあります。

81920 * 512 / 1024 / 1024 = 40MiB
47104 * 512 / 1024 / 1024 = 23MiB

3.2 つのファイルシステムを作成します。

truncate -s40MiB ext4.img
truncate -s23MiB ext3.img
mke2fs -t ext4 -F -L part_ext4 ext4.img
mke2fs -t ext3 -F -L part_ext3 ext3.img

4.すべて一緒に縫います。

2048*512一時イメージから最初のバイトを抽出します。

dd if=tmp.img of=disk.img bs=512 count=2048

それらを結合しなさい:

cat ext4.img ext3.img >> disk.img

美しい。

おすすめ記事