फिर से शुरू केवीएम गेस्ट पर समय कैसे रखें?


18

अपने मेजबान पर मैं libvirt और KVM अतिथि का उपयोग कर रहा हूं। जब मेजबान बंद हो रहा है, तो libvirt अतिथि को निलंबित कर देता है। जब मेजबान शुरू हो रहा है, तो libvirt अतिथि को फिर से शुरू करता है। समस्या यह है, यदि अतिथि को निलंबित कर दिया जाता है और उदाहरण के लिए 24 घंटे के बाद फिर से शुरू किया जाता है, तो अतिथि का समय अतीत में 24 घंटे है।

मैंने सोचा था कि शायद समस्या घड़ियां के साथ है, लेकिन यह पहले से ही "kvm- घड़ी" पर सेट है।

$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock tsc hpet acpi_pm 

$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock

जवाबों:


11

समस्या

मैं एक ही समस्या है और मैं एक अच्छा समाधान नहीं मिला है। यहाँ मैं क्या पाया:

समस्या यह है कि फिर से शुरू होने के बाद, अतिथि पर सिस्टम और हार्डवेयर घड़ी बार अलग हैं:

जड़ @ अतिथि: ~ # तारीख; hwclock
Sat Oct 11 13:09:38 UTC 2014
Sat Oct 11 13:10:42 2014 -0.454380 सेकंड

मेजबान पर, वे सहमत हैं:

रूट @ चार: ~ # तारीख; hwclock
Sat Oct 11 13:11:35 UTC 2014
Sat Oct 11 13:11:36 2014 -1.000372 सेकंड

समाधान hwclock --hctosysफिर से शुरू होने के बाद अतिथि पर चलना होगा । हालाँकि, मुझे गेस्ट सिस्टम में बदलाव के साथ ऐसा करने का कोई तरीका नहीं मिला है, क्योंकि गेस्ट को यह ध्यान नहीं है कि उसे निलंबित और फिर से शुरू किया गया है।

QEmu अतिथि एजेंट

अतिथि पर QEmu Guest Agent नाम से एक सॉफ़्टवेयर चलाने की संभावना है और अतिथि हार्डवेयर घड़ी से अतिथि सिस्टम घड़ी को अपडेट करने के लिए होस्ट से सूचित करें। हालांकि, पृष्ठ में उल्लेख किया गया है कि अतिथि एजेंट मेजबान और अतिथि को एक दूसरे से हमलों के लिए असुरक्षित बनाता है क्योंकि JSON पार्सर के साथ मुद्दों (कम से कम मेरा मानना ​​है कि प्रभावित कोड भी मेजबान पर चलाया जाता है, मुझे इस बारे में निश्चित नहीं है) )। वैसे भी, यहाँ है कि कैसे स्थापित करने के लिए:

  1. एजेंट के लिए एक गुण धारावाहिक चैनल सेट करें जैसा कि libvirt विकी में वर्णित है ( libvirt डोमेन प्रारूप प्रलेखन भी देखें )।

  2. धारावाहिक चैनल उपलब्ध होने के बाद, अतिथि पर QEmu Guest Agent स्थापित करें और शुरू करें। (डेबियन: apt-get install --no-install-recommends qemu-guest-agent।)

  3. निलंबित, प्रतीक्षा और फिर से शुरू करके घड़ी की गति को ट्रिगर करें। : तो फिर इसे सही करने के मेजबान पर निम्न आदेश चला virsh qemu-agent-command backup '{"execute":"guest-set-time"}'विकि पृष्ठ का उपयोग virsh qemu-agent-commandहै असमर्थित है, लेकिन मैं किसी भी अन्य आदेश है कि काम करता है नहीं मिली है।

मुझे संदेह guest-set-timeसे फिर से शुरू करने के लिए कॉल को libvirt के भीतर स्वचालित करने पर दो चर्चाएँ मिलीं :

हालाँकि, अभी तक कुछ भी लागू नहीं किया गया है जहाँ तक मैं देख सकता हूँ।

मुझे अतिथि एजेंट को stoney-cloud.org की विकि पर कमांड कैसे जमा करें, इस बारे में जानकारी मिली

मैंने भी libvirt टाइमर कॉन्फ़िगरेशनtickpolicy="catchup" में सेटिंग की कोशिश की है, लेकिन इससे समस्या हल नहीं हुई।

एनटीपी

एजेंट का उपयोग करने का एक विकल्प एक एनटीपी डेमॉन का उपयोग करना या एक क्रॉन नौकरी से समय-समय पर एनटीपीपीड को कॉल करना होगा। मैं बाद की सिफारिश नहीं करूंगा, क्योंकि यह समय पीछे जाने का कारण बन सकता है, जो कि कार्यक्रमों को भ्रमित कर सकता है (उदाहरण के लिए, डॉवॉट आईएमएपी सर्वर पीछे जाने वाले समय को संभालने की कोशिश नहीं करता है और समाप्त कर सकता है)।

मैंने निम्नलिखित ntp डेमॉन की कोशिश की:

  • openntpd : मेरे परीक्षण में लगभग 2 सेकंड प्रति 60 मिनट की दर से समय को बहुत धीरे-धीरे सही करता है। समय ऑफसेट 120 सेकंड था। इसके अलावा, अगर ओपनसेट बहुत बड़ी है , तो एक त्रुटि फेंकता है और मेरे परीक्षण में, उस मामले में सही समय पर पूरी तरह विफल हो जाता है। Openntpd के लाभ: चेरोट में नियमित उपयोगकर्ता के रूप में चला सकते हैं।

  • chrony : मेरे टेस्ट में 30 मिनट में 120 सेकंड का समय ऑफसेट ठीक करता है। नियमित उपयोगकर्ता के रूप में चलाने के लिए क्रोनी को कॉन्फ़िगर किया जा सकता है। चेरोट समर्थन लागू नहीं किया गया है। NTP सर्वर मतदान अंतराल को प्रत्येक NTP सर्वर के लिए कॉन्फ़िगर किया जा सकता है।

  • systemd-timesyncd : मेरे परीक्षण में 30 सेकंड में 120 सेकंड का समय ऑफसेट ठीक करता है। डिफ़ॉल्ट रूप से नियमित उपयोगकर्ता के रूप में चलाता है। हालाँकि, NTP सर्वरों का मतदान अंतराल 2048 सेकंड तक बढ़ जाता है, जिससे कि सबसे खराब स्थिति में फिर से शुरू होने के 34 मिनट बाद तक एक सस्पेंड / रिज्यूम का पता नहीं चल पाएगा। यह कॉन्फ़िगर करने योग्य नहीं लगता है। इसके अलावा, मैंने टाइमसैंडी कदम को समय पीछे की ओर देखा है, जो क्रोन में ntpdate को कॉल करने के समान समस्याओं का कारण बनता है (ऊपर देखें)।

क्रॉनी समस्या को हल करता है। Openntpd उपयुक्त नहीं है क्योंकि इसकी सुधार दर बहुत कम है और यह विन्यास योग्य नहीं लगती है। systemd-timesyncd पूरी तरह से समस्या का समाधान नहीं करता है, क्योंकि इसका मतदान अंतराल विन्यास योग्य नहीं है।

मैंने NTP डेमन के निम्नलिखित डेबियन संस्करणों का परीक्षण किया: Openntpd 20080406p-10, chrony 1.30-1 और systemd 215-5 + b1।


3

अतिथि पर कई वर्चुअलाइजेशन मेजबान संचालन एक परिणाम के रूप में - फिर से शुरू कर सकते हैं। यह अतिथि पर सिस्टम घड़ी को नकारात्मक रूप से प्रभावित करेगा। उदाहरण के लिए, किसी VM को क्लोनिंग करते समय एक क्लोन में परिणाम मिलता है। बाद की अतिथि घड़ी पीछे है। एनटीपी प्राप्त करने के लिए आपको उस घड़ी को सिंक करने की आवश्यकता है, जो अतिथि को फिर से शुरू करना है - सुनिश्चित करने के लिए सभी मामलों में एक अच्छा समाधान नहीं। वैकल्पिक आप अतिथि में सिर्फ ntpd को पुनरारंभ कर सकते हैं, लेकिन यह भी इष्टतम नहीं है। आदर्श रूप से एक घटना (वीएम फिर से शुरू) होने की आवश्यकता है जो आप अतिथि के लिए इस प्रकार के सुधार के लिए वैकल्पिक रूप से उपयोग कर सकते हैं।

इस पर शोध करने के बाद कुछ समय बिताने के बाद मैंने मेजबान घड़ी का उपयोग सीधे CentOS 7 अतिथि OS सिस्टम घड़ी के संदर्भ के रूप में करने का निर्णय लिया।

अतिथि में ntpd चलाने के बजाय, मैंने फैसला किया कि हर 15 मिनट में मैं crontab के माध्यम से, अतिथि सिस्टम घड़ी को अतिथि की हार्डवेयर घड़ी से सेट करूंगा। मेहमान की हार्डवेयर घड़ी वर्चुअलाइजेशन होस्ट पर समय को दर्शाती है जिसे वर्चुअलाइजेशन होस्ट पर चलने वाले ntpd के माध्यम से नियंत्रित किया जाता है। यह मुझे अतिथि ओएस में विश्वसनीय समय प्रदान करता है। सबसे खराब स्थिति, अतिथि को फिर से शुरू करने के बाद घड़ी को 15 मिनट तक बंद किया जा सकता है।

# crontab -e

0,15,30,45 * * * * /sbin/hwclock --hctosys

अतिथि के पास एक ऐसी घटना उपलब्ध होना बेहतर होगा जो अतिथि के फिर से शुरू होने पर एक समय के समन्वय की शुरुआत करेगी, लेकिन जाहिर है कि यह उपलब्ध नहीं है। क्रेस्टैब अप्रोच एक वर्कअराउंड है कि यह हर 15 मिनट में एक hwclock कॉल करता है। यह काम हो जाता है, लेकिन उतने भव्य रूप से नहीं, जितना मैं चाहूंगा।


2

kvm- घड़ी अतिथि समय को अतिथि स्टार्टअप पर होस्ट करने के लिए सिंक करती है । आपको अतिथि और एनटीपी क्लाइंट का उपयोग करना चाहिए, और निलंबन / फिर से शुरू करने के बजाय शटडाउन / स्टार्टअप करना चाहिए।


हां, मैं इसकी पुष्टि स्टार्टअप पर सिंक कर सकता हूं, क्योंकि जब मैं अतिथि का शटडाउन / स्टार्टअप करता हूं तो सब कुछ ठीक है। Ntp का उपयोग करना कई कारणों से समाधान नहीं है (यह वर्कअराउंड है, जब समय का अंतर बहुत बड़ा है, तो उसे समय सर्वर तक पहुंच की आवश्यकता होती है)। मैं सस्पेंड / रिज्यूमे के साथ समस्या को हल करने का एक तरीका खोज रहा हूं, क्योंकि यह libvirt में एक दिलचस्प, अच्छा और डिफ़ॉल्ट विकल्प है।
Hristo Hristov

सस्पेंड 1) फ़ाइल करने के लिए VM राज्य माइग्रेट करें और 2) नष्ट करें। जब आप निलंबित से फिर से शुरू करते हैं, तो वीएम राज्य को बहाल किया जाता है (फ़ाइल से वापस वीएम मेमोरी में माइग्रेट किया जाता है)। इस राज्य में वर्तमान टाइमस्टैम्प शामिल होगा। तो हाँ, यह डिफ़ॉल्ट है, लेकिन नहीं, समय अभी भी मायने रखता है, और समय कहीं से आना है, और यह वह जगह है जहाँ मुझे आना चाहिए। मुझे संदेह है कि एक और घड़ी स्रोत मदद करेगा लेकिन आप acpi_pm के साथ कोशिश कर सकते हैं।
डायनासी


4
@ ब्रायन कैन यह बेहद तर्कपूर्ण है, विशेष रूप से बयान के पीछे कोई स्पष्टीकरण या तर्क नहीं है। एक प्रोफाइल प्रदान करने के लिए: docs.redhat.com/docs/en-US/…
dyasny

2

libvirt 2015 से अतिथि समय सिंक का समर्थन करता है । डेबियन स्ट्रेच पर और बाद SYNC_TIMEमें विकल्प की तलाश में /etc/default/libvirt-guests:

# If non-zero, try to sync guest time on domain resume. Be aware, that
# this requires guest agent with support for time synchronization
# running in the guest. For instance, qemu-ga doesn't support guest time
# synchronization on Windows guests, but Linux ones. By default, this
# functionality is turned off.
#SYNC_TIME=1

आप मेजबान सिस्टम के भीतर से समय सिंक का परीक्षण कर सकते हैं:

virsh qemu-agent-command INSERT_YOUR_DOMAIN_HERE '{"execute":"guest-set-time"}'

इस आदेश को {"return":{}}सफलता पर लौटना चाहिए ।


0

मैं वीएम सस्पेंड / फिर से शुरू होने के बाद समय को सिंक्रनाइज़ करने के लिए इसी तरह का उपयोग करता हूं, लेकिन मुझे लगता है कि यह अनुमान लगाने की कोशिश करना बेहतर है, कि यह सही दिशा में सिंक होना चाहिए और कम अंतर से लंबा है, जिसे एनटीपीडी द्वारा तय किया जा सकता है।

https://gist.github.com/jhrcz/7138803

पुनश्च। न्यू सेंटोस 6.7 चैनगॉग का कहना है कि यह केवल kvm- क्लॉक क्लॉक सोर्स के साथ ऑटोमैटिक किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.