VHDへのLinuxのデプロイとVHDからの起動

VHDへのLinuxのデプロイとVHDからの起動

Microsoft Windows 7のリリース以来、WindowsプラットフォームはNative VHD Bootという非常にクールな機能をサポートしてきました。これにより、Windowsを物理ボリュームに直接インストールするのではなく、VHDXファイルにインストールできます。

この構成では、Windows のインストールはハイパーバイザー内部ではなく「ベアメタル」で完全に実行されます。

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

私はLinuxで似たようなことをしたいのですが、このようなことをした経験はありません。どうすればいいですか?

答え1

1つの方法は次のとおりです。ストレージディスクddあるいは、これと同様のものを使用して、既存のシステムから生の画像を簡単に作成できます。libvirt/virt-managerまたはなどを使用してvirtualbox簡単に仮想マシンを作成することもできます。たとえば、virt-manager仮想ディスクを作成し、ISOファイルを使用してオペレーティングシステムをここにインストールできます。 memdiskがどのフォーマットをサポートしているのか100%確信できないので、事前に割り当てられrawた固定サイズのイメージフォーマットを使用する方が良いと思います。

単一の物理パーティションにブート可能な複数のLinuxシステムを置くことが目標である場合、LVMはより簡単な選択です。これには、物理​​パーティション、論理ボリュームグループ、複数の論理ボリューム(および各論理ボリュームのファイルシステム)の作成、各論理ボリュームへのシステムのマウントまたはコピー(後者の場合はgrubを編集する必要があります)が含まれます。多くの手順のように聞こえますが、ほとんどのLinuxディストリビューションインストーラを使用すると簡単に設定できます。

答え2

このアイデアを数日間悩みましたが、いよいよ実現しました。

まず、VHDファイルをマウントするためのバイナリファイルをコンパイルする必要があります。ただし、VMDK、VDI、およびRAWディスクイメージもマウントできます。ここからこのプログラムをコンパイルするためのソースコードを入手できます。 https://github.com/SophosLabs-zz/vdfuse

しかし、コンパイルする前に電圧ヒューズこのコマンドを実行する必要があります。

sudo apt install libfuse-dev virtualbox pkg-config

libfuse-devvdfuse コンパイルに必要なヘッダファイルがあります。
仮想ボックスディスクイメージをインストールするために必要なプリコンパイルされたドライバがあります。
パッケージ構成vdfuseをコンパイルするときにスクリプトによって使用されます。
これで必要なファイルとバイナリの両方が用意されているので、vdfuseをコンパイルしてみましょう。

したがって、コンパイルコマンドを実行する必要があります。電圧ヒューズ以下に示すように:

./autogen.sh
./configure
make
sudo make install

次に、intird.imgでinitの前に実行するスクリプトをいくつか追加する必要があります。

次のようにこれらのファイルを作成します。

/usr/share/initramfs-tools/hooks/vdfuse

#!/bin/sh -e
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /usr/local/bin/vdfuse /sbin

/usr/share/initramfs-tools/scripts/init-top/vdfuse

#!/bin/sh -e
PREREQ="udev"
prereqs()
{
    echo "$PREREQ"
}

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

if [ ! -z $vdisk ]; then
    mkdir /vdhost
    mkdir /dev/vdhost
    mount -t ntfs $host /vdhost/
    vdfuse -t VHD -f /vdhost$vdisk /dev/vdhost
    mount -t ext4 $ROOT /root
fi

/usr/share/initramfs-tools/scripts/init-bottom/vdhost

#!/bin/sh -e
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

if [ -d ${rootmnt}/vdhost ]; then
    mount -n -o move /vdhost ${rootmnt}/vdhost
fi

次に、次のコマンドを実行してこれらのファイルを実行可能にする必要があります。

sudo chmod +x /usr/share/initramfs-tools/hooks/vdfuse
sudo chmod +x /usr/share/initramfs-tools/scripts/init-top/vdfuse
sudo chmod +x /usr/share/initramfs-tools/scripts/init-bottom/vdhost

次に、次のコマンドを使用して新しいカーネルを構築する必要があります。sudo update-initramfs -k all -c

これがLinuxでやるべきことです。最後に、仮想ディスクイメージを起動するようにグラブを設定します。

以下は、grub.cfgファイルに追加する必要があるコマンドです。

 set vhd=/vhd/Ubuntu.vhd
 set vdhost
 search --no-floppy -s root -f $vhd
 loopback lp0 $vhd tdisk=VHD
 linux   (lp0,1)/vmlinuz root=/dev/vdhost/Partition1 vdisk=$vhd host=/dev/sda1 quiet splash
 initrd  (lp0,1)/initrd.img

/dev/sda1をVHDのあるデバイスに変更します。

答え3

また、VHDからLinuxを起動し、VHDをHD/USB/SD/などに保存したいと思います。

Debian ベースが私の最初の選択になります...

GRUB4DOSにはいくつかの興味深い実験があります。
http://reboot.pro/topic/20603-linux-from-vhd-how-to/
「UBT-small.vhd」という事前に構築された画像を使用しています...

少しだけ修正すれば、他のブートローダでも動作できると思います。

答え4

私はUbuntuのWUBIが原則としてデフォルトのvdiskブートのLinuxバージョンだと思います。この機能は長い間Ubuntuによって正式に終了しましたが、まだサードパーティ版のwubi uefiが続いています。 Wubiは通常の人々がUbuntuを実行できるように設計されているため、デフォルトのブートとは異なる意図があります。

関連情報