2

qemuブータブルディスクイメージとして使用されるvmイメージファイルを生成する必要があるプロジェクトを行っています。以前は、当社の製品は変更された Linux システムのようなもので、USB インストール ドライブに作成され、起動してベア メタル マシンにインストールされていました。しかし、今はハードウェアを取り除いて仮想マシンで実行したいので、イメージ ファイルが必要です。

既存の USB ドライブを使用して qemu にシステムをインストールし、vm をシャットダウンしてイメージを取得する代わりに、すぐに使えるイメージ ファイルを直接作成し、実マシンまたは仮想マシンでの起動とインストールをすべてスキップするように求められました。ただし、インストール済みのイメージを入手できるので、このイメージを配信するだけで、すぐに使用できる仮想マシン イメージとしてこのイメージをロードできます。

しかし、すべての手順で、ルート権限が必要なコマンドは使用できません! 理由は聞かないでください。私たちのプロジェクトにはたくさんの制限があります。ルート権限を使用できず、sudo も su も使用できず、通常のユーザーだけができることは何でも....

私がすでに達成した部分は、mke2fs -d コマンドの最新バージョンを使用して、このイメージ ファイルのさまざまなパーティションにフォルダーとファイルのツリーを作成することです。

イメージが起動された後、これらのフォルダー構造があるとします。

$ ls /
$ bin dev boot  home lib32   mnt  proc  run srv  tmp var  boot  data   etc  lib lib64  opt  root  sbin  sys  usr  

一部のフォルダは異なるパーティションによってマウントされています

イメージから単一のパーティションを抽出する

dd if=image of=partitionN skip=offset_of_partition_N count=size_of_partition_N bs=512 conv=sparse

フォルダをパーティションに移入する

mke2fs -d root_dir/etc partitionN

パーティションをイメージに戻します

dd if=partitionN of=image seek=offset_of_partition_N count=size_of_partition_N bs=512 conv=sparse,notrunc

イメージの最初のパーティションはブート パーティションとしてあり、これには「boot」フォルダが含まれており、起動後に /boot の下にマウントされます。

このブート パーティションは EFI 互換パーティション (実際には FAT32 フォーマットのようです) です。

しかし、すべてのパーティションがイメージに正常に取り込まれた後、この起動可能なイメージに grub をインストールする方法が見つかりません。これは、このイメージを起動可能にするために必要な最も重要なステップです。

Web で見つけたすべての解決策は、イメージのブート パーティションをループ マウントすることを提案していますが、root 権限がないとイメージをループ マウントできないため、これは実行できません。

それで、これを行う方法を知っている人はいますか?

grub が生の値を mbr に書き込む方法、mbr 内の値からステージ 1 とステージ 2 を見つける方法、ステージ 2 の最初のセクターの最後にあるセクター リストを見つける方法を理解しようとしましたが、それは非常にクレイジーで、最終的に失敗しました。このトリックの仕事を取得します。

4

1 に答える 1