ভার্চুয়ালবক্স উইন্ডোজ হোস্ট শটডাউনে অতিথিদের ক্রেফুল শাটডাউন


19

হোস্ট কম্পিউটারটি বন্ধ হয়ে গেলে বা পুনরায় চালু করার সময় ভার্চুয়ালবক্স উইন্ডোজের অধীনে চলমান যে কোনও অতিথি ভিএমকে চূড়ান্তভাবে শাটডাউন করার সমাধানের চেষ্টা করার চেষ্টা করছি।

এটি দেখে মনে হয় যে হোস্টটি বন্ধ হওয়া শুরু করার পরে "সেভ স্টেট" কমান্ডটি ট্রিগার করা সবচেয়ে নিরাপদ বিকল্প হবে, তবে হোস্ট ভিএমএসের স্ট্যান্ড এবং পাওয়ার অফ বন্ধ করে দেওয়ার জন্য হোস্টটি যথেষ্ট দীর্ঘ অপেক্ষা করবে কিনা তা এখনও পরিষ্কার নয়।

এই (আপাতদৃষ্টিতে বেসিক) ইস্যুটির জন্য কারও কাছে কি শক্ত সমাধান রয়েছে?


অতিথি সংযোজন ইনস্টল করবেন? এটি প্রয়োজনীয় কার্যকারিতা সরবরাহ করে না?
কানাডিয়ান লিউক মনিস্কা পুনরায় ইনস্টল করুন

পছন্দ করেছেন :)
ম্যাট জেনকিনস

উত্তর:


6

আমার অনুরূপ সমস্যা হয়েছিল এবং ভার্চুয়ালবক্সকে পরিষেবা হিসাবে চালিয়ে সমাধান করেছি:

http://vboxvmservice.sourceforge.net/

ভিবক্সভিএমএস সার্ভিসের সাহায্যে আপনি কীভাবে মেশিনটি শাটডাউন (স্টেট স্টেট, পাওয়ার অফ) এবং স্টার্টআপ চান তা চয়ন করতে পারেন। যেহেতু এটি একটি পরিষেবা হিসাবে চলছে, উইন্ডোজ স্বয়ংক্রিয়ভাবে সিস্টেম শাটডাউন প্রক্রিয়া চলাকালীন এটি বন্ধ হয়ে যাওয়ার জন্য অপেক্ষা করবে।


উইন্ডোজ ১০-এ সেটআপ প্রক্রিয়াটি এত স্বয়ংক্রিয় নয় wrong সমস্যাটি দেখার জন্য আমাকে সমস্যার শুটিংয়ের কথা উল্লেখ করতে হবে। তবে, সঠিকভাবে কনফিগার করার পরে, এই সফ্টওয়্যারটি আমার যা প্রয়োজন ঠিক তা করে। আপনাকে দুর্দান্ত কাজের জন্য ধন্যবাদ
iuradz

3

দুর্ভাগ্যক্রমে ভার্চুয়ালবক্স জিইউআইয়ের মাধ্যমে ভিএমগুলি শুরু করা সম্ভব বলে মনে হচ্ছে না। যদিও জিইউআই হোস্ট শাটডাউন ইভেন্টটি ধরে ফেলতে পারে এবং প্রতিক্রিয়া জানায়, ভার্চুয়ালবক্স পরিষেবাটি সমাপ্ত হবে: https://forums.virtualbox.org/viewtopic.php?p=278668#p278668

আপনার যদি গ্রাফিকাল কনসোলের প্রয়োজন না হয় তবে ভিবক্সহিডলেসট্রে বা ভিবক্সভিএমএসসিভারের উপায় হতে পারে। উভয় উইন্ডোজ হোস্ট শাটডাউন এবং পুনরায় আরম্ভ করার জন্য স্বয়ংক্রিয় সংরক্ষণ এবং পুনরায় শুরু সমর্থন করে।

ভার্চুয়ালবক্স 5.0 একটি "বিচ্ছিন্ন UI" প্রারম্ভ মোডটি উপস্থাপন করে। এই মোডটি পৃথক ইউআই প্রক্রিয়া সহ একটি মাথা বিহীন ভিএম শুরু করে। গ্রাফিকাল কর্মক্ষমতা ভুগছে এবং 3 ডি ত্বরণ এখনও সমর্থিত নয়। তবে ভবিষ্যতে এটি VBoxHeadlessTray এর সাথে একত্রিত হতে পারে (VBoxHeadlessTray এখনও 5.0 সমর্থন করে না।) VBoxHeadlessTray GitHub সংগ্রহস্থলের লিঙ্ক এবং ভার্চুয়ালবক্স 5 সমর্থন যুক্ত করার জন্য সংশ্লিষ্ট গিটহাব পুল অনুরোধের সাথে

সম্পাদনা করুন: VBoxVmService সংস্করণ 5.0 হিসাবে নতুন পৃথকযোগ্য মোড সমর্থন করে না । এখন পর্যন্ত কেবল মাথাছাড়া । আমি এটির জন্য একটি বৈশিষ্ট্য অনুরোধ যুক্ত করেছি ।


যেহেতু আমাকে প্রতি পোস্টে দু'টির বেশি লিঙ্ক পোর্ট করার অনুমতি নেই, এখানে VBoxHeadlessTray এর লিঙ্কগুলি এবং ভার্চুয়ালবক্স 5 সমর্থন যুক্ত করার জন্য সংশ্লিষ্ট গিটহাব পুল অনুরোধের লিঙ্কগুলি এখানে রয়েছে ।
লিও বি

থ্রেডে বর্ণিত বিষয়গুলি আমি অভিজ্ঞতা করি না। এই বিষয়ে আমার উত্তর দেখুন। আমি উইন্ডোজ হোস্ট শাটডাউন চালিয়ে চলে যেতে পারি। আমার সমস্ত ভিএম বন্ধ না হওয়া অবধি শাটডাউন ব্লক হয়ে গেছে এবং ক্লিন শাটডাউন বা সেভ স্টেট করার জন্য আমি ডিফল্ট ক্রিয়াটি পরিবর্তন করেছি।
ক্রিস বাহনসেন

2

আমার কাছে 3 ব্যাচের স্ক্রিপ্ট রয়েছে যা আমি স্টার্টমেনু পাওয়ার বোতামগুলির পরিবর্তে ব্যবহার করি।

do_shutdown.bat (10 সেকেন্ড ওয়েটিং পিরিয়ড সহ শাটডাউন পিসি, ভিএম এর 10 সেকেন্ড সময় সঞ্চয় করার জন্য নয়, তবে আমাকে 10 সেকেন্ডের মধ্যে শটডাউনটি বাতিল করতে দেয় v ভিএম এর বন্ধ হয়ে যাওয়ার পরে কাউন্টডাউন শুরু হয়)

"C:\VirtualBox\VBoxManage.exe" controlvm "Ubuntu Server" savestate
"C:\VirtualBox\VBoxManage.exe" controlvm "Ubuntu Minimal" savestate
shutdown /s /t 10

do_reboot.bat ( ভিএম বন্ধ হয়ে যাওয়ার সাথে সাথেই পুনরায় বুট হয়)

"C:\VirtualBox\VBoxManage.exe" controlvm "Ubuntu Server" savestate
"C:\VirtualBox\VBoxManage.exe" controlvm "Ubuntu Minimal" savestate
shutdown /r /t 0

do_cancel.bat (10 সেকেন্ড অপেক্ষার সময়কালের মধ্যে আমাকে পিসি-শাটডাউনটি বাতিল করতে দেয়। এটি আবার ভিএম পুনরায় চালু করে, যেহেতু তারা do_shutdown.bat দিয়ে বন্ধ হয়ে গেছে)

shutdown /a
C:\VirtualBox\VBoxManage.exe startvm "Ubuntu Minimal" --type headless
C:\VirtualBox\VBoxManage.exe startvm "Ubuntu Server" --type headless

পরিবর্তে savestateআপনি নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করতে পারেন

poweroff        - pulls the plug
                  (probably not a good idea...)

acpipowerbutton - presses the power off button for a clean shutdown
                  ("The system is going down for power off NOW!" to all consoles)

acpisleepbutton - tells the os to go to sleep
                  (probably just as bad as poweroff)

1
ধন্যবাদ, এটি আকর্ষণীয়। দুর্ভাগ্যক্রমে, অন্যান্য নন-ম্যানুয়াল শটডাউন / রিবুট পরিস্থিতি রয়েছে যা আমারও হ্যান্ডেল করা দরকার। উদাহরণস্বরূপ, উইন্ডোজ আপডেট দ্বারা নির্ধারিত পুনরায় সূচনা, বা কম ব্যাটারি পাওয়ার অফ / শাটডাউন ইভেন্টগুলি।
ম্যাট জেনকিনস

1
ওহ ঠিক আছে. এর রয়েছে গোষ্ঠী নীতি সম্পাদক সঙ্গে "স্ক্রিপ্ট (শাটডাউন / স্টার্টআপ)" অধ্যায় lifehacker.com/... আমি ব্যবহার করছি শাটডাউনে খুব অল্প কমান্ড যে এক (এক কার্ল কল) তাই আমি কিভাবে এটা আচরণ করবে জানি না স্ক্রিপ্টগুলিতে যা সম্পূর্ণ হতে কিছু সময় নেয়।
ড্যানিয়েল এফ

2

দুঃখিত আমি পার্টিতে দেরি করেছি। এটির জন্য একটি সঠিক উত্তর রয়েছে, যদিও এর জন্য কিছু কমান্ডলাইন-ফু দরকার requires আরও তথ্যের জন্য এই থ্রেড পোস্টটি দেখুন: https://forums.virtualbox.org/viewtopic.php?f=6&t=53684#p285540

আপনি যে আদেশটি সন্ধান করছেন তা হ'ল:

"সি: \ প্রোগ্রাম ফাইলসমূহ rac ওরাকল \ ভার্চুয়ালবক্স \ ভিবক্সমনেজ.এক্সে" সেক্টেস্ট্রাডাটা "ভিএম নাম" জিইউআই / ডিফল্টক্লসঅ্যাকশন শাটডাউন

আমি একাধিক ভিএম এ এটি ব্যবহার করি, উইন্ডোটি বন্ধ করুন এবং এটি স্বয়ংক্রিয়ভাবে একটি নিরাপদ শাটডাউন শুরু করে। উইন্ডোজ বন্ধ করুন এবং সমস্ত কিছু বন্ধ করার প্রয়াসে, এই প্রক্রিয়াগুলি সম্পূর্ণ হওয়ার জন্য এটি অপেক্ষা করবে।


1

আমারও অনুরূপ প্রশ্ন ছিল এবং এই পৃষ্ঠাটি খুঁজে পেয়েছি। আমি ভার্চুয়ালবক্সকে পরিষেবা হিসাবে চালাতে চাই না, কারণ পরীক্ষার জন্য আমার প্রচুর ভিএম রয়েছে এবং ভার্চুয়ালবক্স ইউআইতে চালানোর জন্য সাধারণত বিভিন্নগুলি চয়ন করি। আমি যখন আমার কম্পিউটারটি শাটডাউন করি, তখন প্রতিটি ভিএমের অবস্থা ম্যানুয়ালি সংরক্ষণ করতে বিরক্ত হয় is সমস্ত চলমান ভিএম সংরক্ষণ করতে স্ক্রিপ্ট ব্যবহার করা এক্ষেত্রে ব্যবহারিক সমাধান বলে মনে হচ্ছে। ড্যানিয়েল এফ এর উত্তরকে আরও সাধারণ করে তোলার জন্য, আমি এই স্ক্রিপ্টগুলি লিখেছিলাম যা স্পষ্টভাবে নামকরণ না করে সমস্ত চলমান ভিএম-এর অবস্থা স্বয়ংক্রিয়ভাবে সংরক্ষণ করে।

উইন্ডোজ জন্য saveRunningVMs.bat :

set VBoxManageEXE="%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe"
set ListRunningVMS=%VboxManageEXE% list runningvms
for /f tokens^=2^,4^ delims^=^" %%p in ('%ListRunningVMS%') do %VBoxManageEXE% controlvm %%p savestate

echo all vms saved, you can shutdown now.

rem shutdown /s /t 10

লিনাক্সের জন্য saveRunningVMs.sh :

#!/bin/bash
vboxmanage list runningvms | while read line; do
  #echo "VBoxManage controlvm $uuid savestate;"
  echo $line
  if [[ $line =~ \{(.*)\} ]]
  then
    vboxmanage controlvm ${BASH_REMATCH[1]} savestate
  fi
done

0

আমি একটি পাইথন স্ক্রিপ্ট তৈরি করেছি যা চলমান সমস্ত ভার্চুয়ালবক্স ভিএম স্থগিত করবে এবং তারপরে একটি নির্ধারিত টাস্ক হিসাবে লগআউটে স্ক্রিপ্টটি চালানোর জন্য সিস্টেমটি সেট আপ করবে।

এই পদ্ধতিটি ঠিক কতটা নির্ভরযোগ্য তা আমি জানি না। অন্যরা যেমন বলেছে যে উইনলগন 7002 টাস্কটি শেষ হওয়ার জন্য সিস্টেম কতক্ষণ অপেক্ষা করবে তার সীমা রয়েছে। তবে সামগ্রিকভাবে ভিএম র‌্যামের 4+ গিগাবাইট জুড়ে একাধিক চলমান ভিএম ব্যবহার করেও ব্যক্তিগতভাবে এটি ব্যবহারযোগ্য সেভ স্টেটগুলি দেওয়ার ক্ষেত্রে আমার ব্যক্তিগত কোনও সমস্যা হয়নি।

এটি সেট আপ করার পদক্ষেপ এখানে:

  1. পাইথন.আর.জি. থেকে পাইথন ২.7.x ডাউনলোড এবং ইনস্টল করুন
  2. নোটপ্যাড বা অন্য কোনও সাধারণ পাঠ্য সম্পাদক ব্যবহার করে আপনার সিস্টেমে পাইথন স্ক্রিপ্ট ফাইলটি তৈরি করুন (নীচে দেখুন)
  3. টাস্ক শিডিয়ুলার খুলুন
  4. অ্যাকশন চয়ন করুন -> একটি বেসিক টাস্ক তৈরি করুন ... এবং নীচের সেটিংসের সাহায্যে কোনও কার্য তৈরি করতে উইজার্ডটি ব্যবহার করুন
    • আপনার পছন্দের একটি নাম
    • একটি নির্দিষ্ট ইভেন্ট লগ করা হলে কাজটি শুরু করুন
    • লগ: সিস্টেম
    • সূত্র: উইনলগন
    • ইভেন্ট আইডি: 7002
    • একটি প্রোগ্রাম শুরু করুন
    • পরবর্তী প্রোগ্রাম / স্ক্রিপ্ট , আপনার সম্পূর্ণ পাথ লিখুন python.exeউদাহরণস্বরূপ,c:\Python27\python.exe
    • পরবর্তী আর্গুমেন্ট যোগ করুন উদাহরণস্বরূপ, সম্পূর্ণ পাথ যেখানে আপনি পাইথন স্ক্রিপ্ট ফাইল করা লিখুন, আমি আমার নথি ফোল্ডারটির একটি subfolder খনি করা তাই এই হলC:\Users\rakslice\Documents\vboxsuspend\vboxsuspend.py
    • সমাপ্তি নির্বাচন করুন।

এখন ভার্চুয়ালবক্স ভিএমগুলি লগআউট / পুনঃসূচনা / শাটডাউনে স্থগিত করা উচিত।

শাটডাউনটি করার জন্য অজগর স্ক্রিপ্টটি নীচে রয়েছে:

# A script to suspend all running VirtualBox VMs

import os

import subprocess

import sys


class VM(object):
    def __init__(self, name, uuid):
        self.name = name
        self.uuid = uuid

    def __repr__(self):
        return "VM(%r,%r)" % (self.name, self.uuid)


class VBoxRunner(object):
    def __init__(self):
        program_files = os.environ["ProgramW6432"]
        vbox_dir = os.path.join(program_files, "Oracle", "VirtualBox")
        self.vboxmanage_filename = os.path.join(vbox_dir, "VBoxManage.exe")

    def vbox_run(self, *args):
        subprocess.check_call([self.vboxmanage_filename] + list(args))

    def vbox_run_output(self, *args):
        return subprocess.check_output([self.vboxmanage_filename] + list(args))

    def list(self, running=True):
        if running:
            list_cmd = "runningvms"
        else:
            list_cmd = "vms"

        return [self.parse_vm_list_entry(x) for x in self.vbox_run_output("list", list_cmd).strip().split("\n")]

    def suspend_all(self):
        success = True
        stopped_some_vms = False
        vms = self.list(running=True)
        for vm in vms:
            if vm is None:
                continue
            # noinspection PyBroadException
            try:
                self.suspend_vm(vm)
            except:
                success = False
            else:
                stopped_some_vms = True
        if not stopped_some_vms:
            self.message("No running vms")
        return success

    @staticmethod
    def parse_vm_list_entry(x):
        """:type x: str"""
        if not x.startswith('"'):
            return None
        end_pos = x.find('"', 1)
        if end_pos == -1:
            return None
        name = x[1:end_pos]
        assert x[end_pos + 1: end_pos + 3] == " {"
        assert x.endswith("}")
        uuid = x[end_pos + 2:]

        return VM(name, uuid)

    @staticmethod
    def message(msg):
        print >>sys.stderr, msg

    def suspend_vm(self, vm):
        assert isinstance(vm, VM)
        self.vbox_run("controlvm", vm.uuid, "savestate")


def main():
    vr = VBoxRunner()
    success = vr.suspend_all()
    if not success:
        sys.exit(1)


if __name__ == "__main__":
    main()

1
অন্যদের ব্যাচের স্ক্রিপ্টটি ব্যবহার করার পরামর্শ আপনি ম্যানুয়ালি চালাতে পারেন যা সভেস্টেটগুলি করে এবং তারপরে আপনার ব্যবহারের ক্ষেত্রে ফিট করে তবে শাট ডাউনটি দুর্দান্ত। তবে আমি আসলে যা চাই তা উইন্ডোজ আপডেট স্বয়ংক্রিয় রিবুটগুলির পরে, আমি যে ভিএম এর সাথে কাজ করেছিলাম তার পরে গত দু'দিন ধরে উইন্ডোজ আপডেট পুনরায় চালু করে রাতারাতি কঠোরভাবে চালিত হয়েছিল ...
রাকস্লাইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.