전용 컴퓨터에 어플라이언스로 설치하기위한 소프트웨어 시스템을 실행해야합니다. 에너지를 절약하기 위해 VirtualBox VM에서 시스템을 대신 실행할 계획입니다.
호스트는 SysV-Init 시스템이있는 표준 Linux 박스이며 게스트는 크게 수정 된 Linux이므로 더 이상 변경하지 않아도됩니다. VirtualBox는 OSE 버전에서 사용됩니다.
호스트 부팅시 VM을 시작하는 방법을 이미 알아 냈습니다 ( 편집 : Nikhil이 아래에서 언급 한 것처럼 명령을 통해 수행 됨 VBoxManager startvm
) 어떻게 VM을 정상적으로 종료 할 수 있습니까? 호스트에서 실행중인 모든 스크립트는 게스트가 완전히 종료 될 때까지 기다려야합니다.
예를 들어 이것을 수행하는 서비스 파일이 어떻게 보일지를 제안 할 수 있습니까?
답변
acpipowerbutton
이 명령 세트 를 사용해 보셨습니까 ?
VBoxManage controlvm <uuid>|<name>
pause|resume|reset|poweroff|savestate|
acpipowerbutton|acpisleepbutton|
주석을 읽은 후 편집하십시오.
당신은 사용할 수 있습니다 acpid
또는 다른 ACPI 유틸리티는 우아하게. 또한 현재 시스템을 종료하는 방법에 대한 자세한 정보를 제공 할 수 있습니까?
평범한 shutdown
미완료 작업을 기다리지 않으면 시간 지연이 너무 길 수 있습니다.
나는 당신이 그렇게하려고 윈도우 매니저를 사용하지 않는 가정 이 도구를.
이 데몬을 보았습니다 . 유용 할 수 있습니다.
답변
이를 직접 코딩하는 대신 가상 상자 인스턴스를 인스턴스화하고 제어하기 위해 구축 된 Vagrant 사용을 고려하십시오 . 문서는 훌륭하므로 직접 롤백하지 말고 확인하는 것이 좋습니다.
짧고 간단한 것은 간단한 제어 파일을 만든 다음 vagrant up
원하는만큼 VirtualBox 인스턴스를 시작하도록 실행 한다는 것입니다. vagrant ssh
호스트에 로그인하고 호스트 vagrant halt
를 종료하지 않고 종료 하는 데 사용할 수 있습니다 . vagrant destroy
인스턴스를 제거합니다.
퍼펫, Ansible 또는 Chef를 사용한 프로비저닝을 지원하며 노출 된 VBox 구성 설정을 대부분 제어 할 수 있습니다.
답변
한 가지 차이점을 제외하고는 비슷한 응용 프로그램이 있습니다. 시스템을 다시 시작하고 스냅 샷에서 복구해야합니다.
관심있는 것은 headless-mode 입니다.
그러한 서비스가 몇 가지 있으므로 다음 스크립트를 사용합니다.
VBox_StopRestoreStart.sh
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 VMNAME_or_UUID"
exit 1
fi
set -x
VBoxManage controlvm "$1" poweroff #enforce turnoff
VBoxManage snapshot "$1" restorecurrent #retore state
VBoxManage showvminfo "$1" | grep State #display state to ensure
VBoxHeadless -s "$1" #run in headless mode in background
VM을 정상적으로 종료하려면 어떻게해야합니까?
VM을 정상적으로 끄려면 응용 프로그램에 따라 두 가지 옵션이 있습니다.
- “종료 버튼” 또는 “슬립 버튼”을 에뮬레이션 하고 VM이 반응하도록 준비 (정상적으로 종료)
VBoxManage controlvm <uuid>|<VMname> acpipowerbutton
VBoxManage controlvm <uuid>|<VMname> acpisleepbutton
- 나중에 복원하기 위해 VM 상태 저장
VBoxManage controlvm <uuid>|<VMname> savestate
팁 : 유용한 정보는 다음과 같습니다.
VBoxManage list vms
-사용 가능한 vms 목록rdesktop IP-ADDR:3389
또는rdesktop-vrdp IP-ADDR:3389
– 헤드리스 모드로 실행할 때 GUI를 원할 때 ( 원격 에서도 ) :VBoxHeadless -s <uuid>|<VMname>
VBoxManage startvm
-로컬 디버깅을위한 GUI로 시작
관련 VirtualBox 매뉴얼 장 : 7 장. 원격 가상 머신-단계별 : 헤드리스 서버에서 가상 머신 작성
PS 이미 구현 된 모든 기능을 갖춘 솔루션에 관심이 있다면 OpenStack 은 흥미로운 선택입니다.
답변
http://www.virtualbox.org/manual/ch08.html 에서 VirtualBox VM 관리 설명서를 보면
VM을 나열하려면 다음 명령을 사용하십시오. VBoxManage list vms
VM을 시작하려면 다음 명령을 사용하십시오. VBoxManage startvm
http://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm
VM을 제어하려면 VBoxManage controlvm
controlvm
부속 명령은 현재 실행중인 가상 머신의 상태를 변경할 수 있습니다. 다음을 지정할 수 있습니다.
VBoxManage controlvm <vm> pause
상태를 변경하지 않고 가상 머신을 일시적으로 보류 상태로 만듭니다. VM 창은 회색으로 칠해져 VM이 현재 일시 중지되었음을 나타냅니다. (이것은 GUI의 “기계”메뉴에서 “일시 정지”항목을 선택하는 것과 같습니다.)
VBoxManage controlvm <vm> resume
이전 일시 중지 명령을 실행 취소하는 데 사용 합니다. (이것은 GUI의 “기계”메뉴에서 “재개”항목을 선택하는 것과 같습니다.)
VBoxManage controlvm <vm> reset
실제 컴퓨터에서 “재설정”단추를 누르는 것과 같은 가상 컴퓨터의 효과는 가상 컴퓨터의 콜드 재부팅으로 게스트 운영 체제를 다시 시작하고 즉시 다시 부팅합니다. VM의 상태는 미리 저장되지 않으며 데이터가 손실 될 수 있습니다. (이것은 GUI의 “기계”메뉴에서 “재설정”항목을 선택하는 것과 같습니다.)
VBoxManage controlvm <vm> poweroff
실제 컴퓨터에서 전원 케이블을 뽑는 것과 가상 시스템에 동일한 영향을 미칩니다. 다시 말하지만 VM의 상태는 미리 저장되지 않으며 데이터가 손실 될 수 있습니다. (이것은 GUI의 “기계”메뉴에서 “닫기”항목을 선택하거나 창의 닫기 버튼을 누른 다음 대화 상자에서 “기기 전원 끄기”를 선택하는 것과 같습니다.)
그런 다음 VM의 상태는 “전원이 꺼집니다”.
답변
시스템 기반 시스템의 경우이를 시도 할 수 있습니다.
1 단계 : 서비스 파일 작성
[Unit]
Description=VBox Virtual Machine %i Service
Requires=systemd-modules-load.service
After=systemd-modules-load.service
[Service]
User=user
Group=vboxusers
ExecStart=/usr/bin/VBoxHeadless -s %i
ExecStop=/usr/bin/VBoxManage controlvm %i savestate
[Install]
WantedBy=multi-user.target
2 단계 : 서비스 파일 사용
$ sudo systemctl enable vboxvmservice@vm_name.service
참고 문헌
답변
ssh를 통해 호스트에서 게스트로 명령을 보내는 방법은 무엇입니까?
그것이 작동하는지 확실하지 않으며 나중에 기계의 상태를 확인하거나 출구 상태와 같은 것을 얻을 수 있는지는 모르겠지만 적어도 깨끗하게 내려야합니다.
답변
내 솔루션 :이 셸 스크립트에서 ‘root’는 호출자이며 ‘theuser’는 ‘thevm’의 소유자입니다.
명령의 출력이 VBoxManage list runningvms
빈 문자열을 반환 할 때 vms가 종료되었음을 알고 있습니다.
...
start(){
su -c "VBoxHeadless --startvm thevm" -s /bin/bash theuser &
# maybe another vbox command
}
stop(){
su -c "VBoxManage controlvm thevm acpipowerbutton" -s /bin/bash theuser
# maybe another vbox command
while [ "`su -c 'VBoxManage list runningvms' -s /bin/bash theuser`" != "" ]
do
echo waiting for VMs to shutdown
sleep 3
done
}
...