파티션의 KVM 게스트 OS

파티션의 KVM 게스트 OS

Linux와 Windows의 이중 부팅 구성이 있습니다. 이제 듀얼 부팅 설정을 유지하고 Linux의 KVM 내에서 Windows를 실행할 수도 있습니다.

다음 구성은 정상적으로 작동합니다. KVM에 전체 디스크( /dev/sda)를 포함시켰습니다. Windows를 실행하기 위해 해당 파티션( )에서 Windows를 부팅 grub-mkresque하도록 구성된 grub( )의 ISO 이미지를 만들었습니다. /dev/sda2그러나 Windows 게스트가 모든 파티션이 포함된 전체 디스크에 액세스할 수 있기 때문에 이 솔루션은 만족스럽지 않습니다.

댓글 작성자 @telcoM 및 @kenneth-b-jensen도 지적했듯이 이는 두 운영 체제의 동시 액세스/설치를 방지하여 손상을 방지하기 위한 내 전략의 일부이며/해야 합니다.

필요한 해결 방법은 Windows 파티션( /dev/sda2)을 포함하고 거기에서 Windows를 부팅하는 것입니다. 파티션이 부팅 가능하지 않기 때문에 이 파티션만으로는 Windows를 부팅할 수 없습니다. KVM은 분명히 자체 파티션 테이블을 사용하여 단일 파티션을 디스크에 바인딩하기 때문에 grub부팅할 이미지에서 해당 파티션을 찾을 수 없습니다.

작동하는 구성을 얻으려면 구성이나 다른 아이디어를 완료해야 합니다.

  • VirtualBox를 사용하면 원시 디스크 액세스를 위한 이미지를 생성하고 파티션 테이블을 유지하면서 필요한 파티션만 지정할 수 있습니다. IMHO KVM이 더 높은 성능을 제공하므로 이는 피해야 합니다.

  • 위에서 언급한 대로 KVM으로 파티션 테이블을 보존하는 솔루션을 찾았습니다.

  • grubKVM 내부에서 올바른 파티션을 사용하도록 설정합니다 . 내 목표에 따라 Grub을 구성하는 방법에 대한 전문가의 안내를 받고 싶습니다.

답변1

동일한 Windows 디스크를 하드웨어와 가상 머신 내부에서 번갈아 실행해 보았는데, 가상 머신 내부에 표시된 장치가 실제 하드웨어와 다르기 때문에 항상 실패했습니다.

하지만 "다른 아이디어”라는 용어를 사용하여 동일한 시스템에서 Linux와 Windows를 실행할 수 있는 방법을 설명하겠습니다.

Windows는 KVM 가상 머신에서 실행되지만 virt-viewer는 가상 콘솔을 제어할 수 있습니다. 콘솔로 전환하면 세상이 전용 Windows 컴퓨터처럼 보입니다. 그리고 Linux와 Windows에 독립적으로 로그인하고 로그아웃할 수 있습니다. (그리고시빈Windows에 설치되어 있으며 sshWindows 간에 전환할 수 있습니다. )

제가 설정하기 위해 취한 대략적인 단계는 다음과 같습니다. Microsoft에서 .iso를 다운로드하고 라이센스를 별도로 구입했습니다. 기존 Windows 라이센스를 다시 설치할 수도 있습니다.

sudo vgcreate vg0 /dev/sd...
sudo lvcreate --size 128G --name win10 vg0
sudo virt-install --name Windows --connect qemu:///system --virt-type kvm --disk path=/dev/vg0/win10,format=raw --cdrom '<path>/Win10_1607_English_x64.iso' --network bridge=br0 --video qxl --chanel spicevm,target_type=virtio --graphics spice,listen=0.0.0.0,port=5900 --os-variant win10 --memorybacking nosharepages=true --memory 2048 --vcpus 1

br0가상 머신을 투명하게 연결할 수 있도록 Linux 호스트에 브리지 장치를 만들었습니다. 그러나 그것은 별도의 주제입니다.

virt-install명령은 처음으로 자동으로 실행되어 virt-viewerWindows 10 설치 프로그램을 시작합니다. 표시되는 유일한 디스크는 virt-install내가 생성하여 명령줄에 입력한 가상 디스크입니다. 그런 다음 다음을 사용하여 실행합니다.

virsh --connect qemu:///system start Windows

이렇게 하면 컴퓨터가 시작되지만 출력은 볼 수 없습니다. 출력을 보려면 사용되지 않은 가상 콘솔로 전환하고 example을 누르고 CTRLALTF6이 명령을 입력합니다. virt-viewer창 관리자 없이 X 서버( )에서 직접 X 응용 프로그램을 시작한다는 점에 유의하세요 .

-k스위치는 virt-viewer를 켭니다.키오스크 모델이는 실제로 가상 머신에서 실행되고 있다는 사실을 효과적으로 숨깁니다.

startx /usr/bin/virt-viewer -a -k -r -w -c qemu:///system Windows -- :6  -config CtrlAltBksp.conf -nolisten tcp -novtswitch

CtrlAltBksp.conf파일은 선택 사항입니다. 를 눌러 virt-viewer를 닫을 수 있습니다 CTRLALTBackspace. 이는 xorg/etc/X11/ 또는 호스트의 다른 알려진 디렉토리에 배치되어야 합니다. 여기있어:

Section "ServerFlags"
        Option "DontZap" "false"
EndSection
Section "InputClass"
        Identifier "CTRL_ALT_BACKSPACE"
        MatchIsKeyboard "on"
        Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

참고: 저처럼 SPICE와 QXL을 설치할 필요는 없지만 설치한다면 설치하는 것이 좋습니다.향신료 도구.

답변2

나는 디스크에 QEMU가 있는 OS를 나란히 설치하여 실행했지만 부트로더가 없는 OS는 하나도 없었던 것 같습니다.

UEFI로 부팅하는 경우 QEMU와 함께 OVMF를 사용해야 하는데, 이는 상황이 더 복잡해지고 제가 아는 범위를 넘어서는 것을 의미합니다.

Windows 파티션에 GRUB를 설치 및 구성하거나 Windows 복구/설치 미디어를 부팅해 보세요.QEMU와 함께(그렇지 않으면 Windows가 GRUB를 먹습니다.) 다시 설치하여 Windows 부트 로더를 복원합니다. GRUB를 설치하려면 grub-install /dev/sdxY를 사용하여 파일 시스템을 마운트한 다음 를 실행합니다 grub-mkconfig -o /mnt/grub/grub.cfg. 그런 다음 기존 grub.cfg에서 필요한 내용을 복사하고 필요에 따라 편집하세요. 이 스레드에서 언제든지 도움을 요청하세요.

또 다른 옵션은 Windows에 로컬로 부트로더를 설치하는 방법에 대해 조사하는 것입니다.

핵심 옵션은 qemu-img를 사용하여 Windows 파티션과 동일한 크기의 .img 파일을 만들고, QEMU를 통해 해당 파일에 Windows를 다시 설치하고, 특정 오프셋 이후의 모든 항목을 파티션에 복사하는 것입니다(아마도 첫 번째 오프셋 바로 뒤). 이동(약 1024개의 실린더) dd를 사용하여 .img 파일에 복사합니다.

매우 위험한 옵션은 읽기 전용 옵션이 있는 모든 디스크를 사용하여 Windows로 체인 부팅하여 기존 GRUB를 계속 사용하는 것입니다. OP에 대한 @telcoM의 의견을 참조하세요.호스트에서 사용 중인 디스크에서는 가상 머신을 실행하지 마세요! 파일 시스템이 손상되어 복구할 수 없습니다!(게스트가 읽기 전용으로 사용하지 않는 한) 시도해 보세요 qemu-xxxxxxx -drive file=/dev/sdxX,format=raw,readonly.

그럼에도 불구하고 QEMU는 원시 디스크를 실행할 수 있습니다.

qemu-xxxxxxxx -drive file=/dev/sdxY,format=raw( man 1 qemu자세한 내용은 -drive를 참조하고 검색하세요.)

QEMU/KVM에 대한 경험이 많지 않은 경우 명령줄에서 직접 실행하고 구성하는 것이 두렵고 실망스러울 수 있습니다. 건강을 위해 프런트 엔드 사용을 고려해보세요.

답변3

당신은 그것을 사용할 수 있습니다dmsetup~에서도구 및--table옵션 "빌드"/dev/sda귀하와 유사한 것을 지정함으로써table file("테이블 형식"을 검색하세요).

일부 파티션의 읽기 전용 맵(또는 복사본)을 사용할 수 있습니다.EFIBOOT파티션 및/, 그리고 zero맵의 Linux 파티션을 "교체"하기 위한 일부 대상이 있습니다. 테이블 맵에 실제 Windows 파티션이 포함되어 있는지 확인하고올바른 위치에테이블에.

나는 과거에 이것과 비슷한 것을 시도했는데 이것이 메커니즘일 가능성이 높습니다.Linux에서 맞춤형으로 구성된 블록 장치를 구축하는 데 사용됩니다.

여러 운영 체제에서 동시에 파티션을 마운트/액세스하지 않도록 하세요.

관련 정보