VHD에 Linux 배포 및 VHD에서 부팅

VHD에 Linux 배포 및 VHD에서 부팅

Microsoft Windows 7 출시 이후 Windows 플랫폼은 Native VHD Boot라는 매우 멋진 기능을 지원해 왔습니다. 이를 통해 Windows를 물리적 볼륨에 직접 설치하는 대신 VHDX 파일에 설치할 수 있습니다.

이 구성을 사용하면 Windows 설치가 하이퍼바이저 내부가 아닌 "베어 메탈"에서 완전히 실행됩니다.

여기에 이미지 설명을 입력하세요.

나는 리눅스로 비슷한 일을 하고 싶지만, 이런 일을 해본 경험은 없습니다. 어떻게 해야 하나요?

답변1

한 가지 방법은 다음과 같습니다.저장 디스크. dd또는 이와 유사한 것을 사용하여 기존 시스템에서 원시 이미지를 쉽게 만들 수 있습니다 . libvirt/ virt-manager또는 등을 사용하여 virtualbox쉽게 가상 머신을 생성 할 수도 있습니다 . 예를 들어 를 사용하면 virt-manager가상 디스크를 생성하고 ISO 파일을 사용하여 여기에 운영 체제를 설치할 수 있습니다. memdisk가 어떤 형식을 지원하는지 100% 확신할 수 없으므로 raw미리 할당된 고정 크기 이미지 형식을 사용하는 것이 더 낫다고 생각합니다 .

단일 물리적 파티션에 부팅 가능한 여러 Linux 시스템을 두는 것이 목표라면 LVM이 더 간단한 선택입니다. 여기에는 물리적 파티션, 논리 볼륨 그룹, 여러 논리 볼륨(및 각 논리 볼륨의 파일 시스템) 생성, 각 논리 볼륨에 시스템 마운트 또는 복사(후자의 경우 grub을 편집해야 함)가 포함됩니다. 많은 단계처럼 들리지만 대부분의 Linux 배포판 설치 프로그램을 사용하면 쉽게 설정할 수 있습니다.

답변2

이 아이디어를 며칠 동안 고민했는데, 드디어 실현됐습니다.

먼저 VHD 파일을 탑재하기 위한 바이너리 파일을 컴파일해야 합니다. 그러나 VMDK, VDI 및 원시 디스크 이미지도 마운트할 수 있습니다. 여기에서 이 프로그램을 컴파일하기 위한 소스 코드를 얻을 수 있습니다. 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을 설정하는 것입니다.

다음은 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/등에 저장하고 싶습니다.

데비안 기반이 나의 첫 번째 선택이 될 것입니다 ...

GRUB4DOS에는 몇 가지 흥미로운 실험이 있습니다.
http://reboot.pro/topic/20603-linux-from-vhd-how-to/
"UBT-small.vhd"라는 사전 빌드된 이미지 사용 중...

약간만 수정하면 다른 부트로더에서도 작동할 수 있을 것 같아요...

답변4

나는 Ubuntu의 WUBI가 원칙적으로 기본 vdisk 부팅의 Linux 버전이라고 생각합니다. 이 기능은 오랫동안 Ubuntu에 의해 공식적으로 종료되었지만 여전히 타사 버전 wubi uefi가 계속되고 있습니다. Wubi는 일반 사람들이 Ubuntu를 실행할 수 있도록 설계되었으므로 기본 부팅과는 다른 의도를 가지고 있습니다.

관련 정보