Khởi động VirtualBox không đầu ảo khi khởi động


5

Tôi đang chạy hai máy ảo không đầu VirtualBox trên máy chủ Ubuntu 12.04. Tôi muốn các VM này khởi động tự động khi hệ thống khởi động.

Tôi có hai mục crontab được đặt như thế này (bên dưới người dùng sở hữu máy ảo):

@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx

Nhưng có vẻ như điều đó không làm nên chuyện. Nếu tôi chạy lệnh trực tiếp từ thiết bị đầu cuối, các máy sẽ khởi động mà không gặp trở ngại nào, nhưng dường như tôi không thể bắt chúng khởi động một khi hệ thống khởi động. Tôi nghĩ có lẽ crontab đang chạy trước khi chương trình / thư viện VirtualBox được tải.

Làm cách nào để tự động khởi động các máy ảo này?

Câu trả lời:


6

Đây là những gì tôi sử dụng. Nó khởi động máy ảo khi khởi động và lưu trạng thái của chúng khi tắt / khởi động lại

#!/bin/bash
### BEGIN INIT INFO
# Provides:       vmboot
# Required-Start: vboxdrv
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: Stop/Start VMs on System shutdown
### END INIT INFO

VBOXUSER=vboxuser
SU="sudo -H -u $VBOXUSER"
VBOXMANAGE=/usr/bin/VBoxManage
VBOXHEADLESS=/usr/bin/VBoxHeadless
RUNNINGVMS=$($SU $VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/')
ALLVMS=$($SU $VBOXMANAGE --nologo list vms | sed -e 's/^".*".*{\(.*\)}/\1/')

case $1 in
stop)
if [[ -n $RUNNINGVMS ]]; then
echo "Saving the state of all running VMs..."
for v in $RUNNINGVMS; do
    $SU $VBOXMANAGE --nologo controlvm $v savestate
done
fi
;;
start)
for v in $ALLVMS; do
if [[ -n $($SU $VBOXMANAGE --nologo showvminfo $v | grep saved) ]]; then
    echo "Restoring VMs..." && $SU $VBOXHEADLESS -s $v & > /dev/null
fi
done
;;
*)
echo "Usage: /etc/init.d/vmboot start | stop"; exit 1
;;
esac
exit 0

Chỉ cần lưu nó trong /etc/init.d. Tôi đặt tên cho vbox của tôi. Chạy update-rc.d <script name> defaults và bạn nên tốt để đi.


1

Tôi nghi ngờ rằng bạn đã đăng nhập bằng tài khoản không phải root khi bạn khởi động VM bằng tay, trong khi cron chạy bằng root và do đó không biết về máy ảo của bạn. Bạn có thể kiểm tra bằng cách chạy lệnh

sudo /usr/bin/vboxheadless -startvm io

Nếu bạn gặp lỗi

Invalid machine name or UUID!

VM không được đăng ký với tài khoản root. Trong trường hợp đó, hãy tạo tập lệnh shell để chạy các lệnh trong tài khoản của bạn và lên lịch cho tập lệnh đó với cron:

#!/bin/sh

USERNAME=...

su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME

Cronjob đang chạy với tư cách là người dùng mà VM được đăng ký.
muncherelli

Sau đó kiểm tra /.../VMNAME/Logs/VBox.log.
Ansgar Wiechers

Tệp nhật ký dường như không hiển thị bất cứ điều gì liên quan đến VM không khởi động. Tất cả các lần lặp của nhật ký cho thấy một khởi đầu VM thành công. Tuy nhiên tôi tin rằng nó có thể có liên quan đến cron chạy trước khi hộp ảo khởi động.
muncherelli

Bước tiếp theo sẽ là kiểm tra /var/log/syslog và đầu ra của dmesg.
Ansgar Wiechers

0

Một tùy chọn phụ cũng nếu MB / CPU của bạn hỗ trợ trực quan hóa phần cứng là ProxMox. Đây là bản cài đặt độc lập của Linux, KVM và giao diện web. nó có hiệu năng tốt hơn nhiều so với hộp ảo khi nó chạy ở cấp độ kernel và thay vì các ổ đĩa chỉ "ảo" như virtualbox sử dụng, bạn thực sự có thể kết nối một khách trong KVM với một ổ đĩa vật lý sử dụng Io ít đĩa hơn.

Kiểm tra nhanh nếu hệ thống của bạn hỗ trợ trực quan hóa phần cứng:

egrep -c '(vmx|svm)' /proc/cpuinfo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.