Не удалось загрузить после форматирования дополнительного жесткого диска

Я бы рекомендовал более сложный подход, включая выскочку, сценарий начала и остановки. В качестве примера я использую Windows XP, так как мой домашний каталог позволяет использовать tombert ... который вы должны соответствующим образом изменить. У этого есть преимущество, что бы вы ни делали (перезагрузка, выключение, нажатие кнопки питания), он отлично справляется с вашей виртуальной машиной.

Сначала выскочите, задайте в /etc/init/winxpvm.conf:

description "WinXP VirtualBox job"
author "Thomas Perschak"

## 0: system halt
## 1: single-user mode
## 2: graphical multi-user plus networking
## 6: system reboot
start on started rc RUNLEVEL=[2]
stop on starting rc RUNLEVEL=[!2]

## upstart config
kill timeout 120
kill signal SIGCONT
nice -10

## start WinXP VirtualBox
exec /home/tombert/scripts/winxpvm-start.sh

## stop WinXP VirtualBox
pre-stop exec /home/tombert/scripts/winxpvm-stop.sh

Стартовое задание запускает виртуальную машину на уровне запуска 2 (которая находится в графическом режиме), и в моем случае она увеличивает приоритет с помощью nice. Чтобы приятно закрыть виртуальную машину, мне нужно «отключить» завершение выскочки с помощью инструкции kill signal SIGCONT. Это приводит к тому, что виртуальная машина работает вначале (избегая значения по умолчанию SIGTERM). Через 120 секунд SIGKILL отправляется в любом случае. Вместо этого я запускаю скрипт winxpvm-stop.sh.

tombert

Боковое примечание 2: То, что сбивает с толку также руководство по выскочке: kill signal stanza определяет сигнал, отправленный через 5 секунд. В этом примере я установил его с SIGTERM (по умолчанию) на SIGCONT - но 5-секундный таймаут мне не удалось изменить. Строка kill timeout определяет тайм-аут, после которого отправляется SIGKILL - какой сигнал нельзя изменить. Следовательно, улучшение должно было бы определять новые строфы term signal и term timeout.

Здесь стартовый скрипт winxpvm-start.sh:

#! /bin/bash -e

function dostart()
{
    echo -n "Running WinXP ... "
    vboxheadless --startvm WinXP
    echo "now closed"
}
export -f dostart

if [ $(whoami) != "tombert" ]; then
    su -c dostart tombert
else
    dostart
fi

Поскольку все настройки и т. Д. выполняются в пользовательском режиме (так как мой логин Side-Note 2: то, что вводит в заблуждение также из руководства по выходу: Строка kill signal определяет сигнал, отправленный через 5 секунд. В этом примере я установил его с SIGTERM (по умолчанию) для SIGCONT - но 5-секундный таймаут, который я не смог изменить. Строка kill timeout определяет тайм-аут, после которого отправляется SIGKILL - какой сигнал нельзя изменить. Следовательно, улучшение должно было бы определять новые строфы [ f18] и term timeout. ), даже если вы выполняете роль root, я меняю учетную запись на tombert. Конечно, пользователь может быть изменен в конфигурации выскочки, но это решение оставляет мне возможность запускать / останавливать виртуальную машину «вручную» с консоли.

Чем интереснее сценарий выключения в winxpvm- stop.sh:

#! /bin/bash

function dostop()
{
    ## check if WinXP is running
    vboxmanage showvminfo WinXP --machinereadable | grep -q 'VMState="running"' &> /dev/null
    if [ $? -ne 0 ]; then
        echo "WinXP not running"
        exit
    fi
    ## try gracefully shutdown
    echo -n "Shutting down WinXP ... "
    #vboxmanage controlvm WinXP acpipowerbutton
    vboxmanage guestcontrol WinXP execute --image "%SystemRoot%\system32\shutdown.exe" --username tombert --password <mypassword> --wait-exit -- "-s" "-f" "-t" "0" &> /dev/null
    ## check vm status
    INDEX=60
    while [ $INDEX -gt 0 ]; do
        echo -n "$INDEX "
        vboxmanage showvminfo WinXP --machinereadable | grep -q 'VMState="running"' &> /dev/null
        if [ $? -ne 0 ]; then
            echo "gracefully done"
            break
        fi
        sleep 1
        let INDEX+=-1
    done
    ## close forcefully
    if [ $INDEX -eq 0 ]; then
        vboxmanage controlvm WinXP poweroff &> /dev/null
        echo "forcefully done"
    fi
}
export -f dostop

if [ $(whoami) != "tombert" ]; then
    su -c dostop tombert
else
    dostop
fi

Сначала я делаю то же самое, что и в стартовом скрипте - я меняю пользователя с root на мою учетную запись tombert . Теперь рассмотрим функцию dostop. Сначала я проверяю, работает ли виртуальная машина. Затем я пытаюсь «тихо» завершить работу, отправив shutdown непосредственно в WinXP с помощью guestcontrol. Здесь вы должны предоставить учетные данные для учетной записи WinXP, которая в моем случае - tombert и пароль. Windows shutdown изящно закрывает все приложения и отключает операционную систему (обычно). Затем можно непрерывно проверять состояние виртуальной машины, используя showvminfo. Выполняя это по меньшей мере 60 раз с 1 секундой тайм-аута (делайте все, что вы считаете подходящим здесь), должно оставить виртуальную машину достаточно времени, чтобы закончить работу. Обратите внимание, что вызов showvminfo также занимает немного меньше секунды (по крайней мере, на моем компьютере), поэтому это дает нам ~ 120 секунд в моем случае. Если все тормоза будут принудительно отключены с помощью инструкции poweroff.

Вы также должны видеть acpipowerbutton, но не использовать. Это потому, что оно не работает надежно. Если вы вошли в систему Windows или, что еще хуже, несколько пользователей, Windows отобразит диалоговое окно подтверждения, которое предотвратит выключение системы. Это также является причиной того, что acpibutton в /etc/default/virtualbox не будет работать на 100% надежнее. Также poweroff принудительно завершает работу виртуальной машины - так же, как кнопка длительного нажатия. Поэтому лучше всего установить это на пустое:

Выдержка из / etc / default / virtualbox:

# SHUTDOWN_USERS="foo bar"  
#   check for running VMs of user 'foo' and user 'bar'
#   'all' checks for all active users
# SHUTDOWN=poweroff
# SHUTDOWN=acpibutton
# SHUTDOWN=savestate
#   select one of these shutdown methods for running VMs
#   acpibutton and savestate causes the init script to wait
#   30 seconds for the VMs to shutdown
SHUTDOWN_USERS=""
SHUTDOWN=""

Чтобы сделать его идеальным, вы можете изменить поведение кнопки питания:

Выдержка из /etc/acpi/powerbtn.sh:

#!/bin/sh
# /etc/acpi/powerbtn.sh
# Initiates a shutdown when the power putton has been
# pressed.

# @backup
# plain shutdown
/sbin/shutdown -h now "Power button pressed"

# fini
exit 0
...
...

Остался один маленький недостаток. Когда виртуальная машина все еще загружается, а служба управления гостями не работает (на виртуальной машине), она не получит команду завершения работы. Редкий случай ... но подумайте об этом.

Thats it, надеюсь, что это поможет.

0
задан 1 April 2018 в 18:43

3 ответа

После форматирования диска, / etc / fstab больше не точен. Как только он был соответствующим образом обновлен, все снова начало нормально функционировать.

0
ответ дан 22 May 2018 в 11:40

После форматирования диска, / etc / fstab больше не точен. Как только он был соответствующим образом обновлен, все снова начало нормально функционировать.

0
ответ дан 17 July 2018 в 17:40

После форматирования диска, / etc / fstab больше не точен. Как только он был соответствующим образом обновлен, все снова начало нормально функционировать.

0
ответ дан 23 July 2018 в 18:32

Другие вопросы по тегам:

Похожие вопросы: