स्नैपशॉट और ड्रिफ्ट
हर दूसरा टूल बताता है कि मशीन अभी कैसी दिखती है। एक व्यवस्थापक का असली सवाल है जब यह काम करती थी तब से अब क्या अलग है, और स्टॉक Windows पर कुछ भी इसका जवाब नहीं देता।
स्नैपशॉट में क्या होता है
एक पल में पूरी मशीन: हर सेवा और ड्राइवर, उसके स्टार्टअप प्रकार, खाते, लॉन्च पथ और आर्ग्युमेंट, उस फ़ाइल के हैश और हस्ताक्षरकर्ता जिसे वह चलाता है, उसकी निर्भरताओं और जो उस पर निर्भर है, उसके ट्रिगर, उसके ज़रूरी विशेषाधिकार, उसके SID प्रकार और उसके security descriptor के साथ, और मशीन का नाम, उसे लेने वाला खाता, और क्या वह खाता व्यवस्थापक था।
bws snapshot create before.json --note "before the patch"
यह JSON है जिसमें हर पंक्ति में एक फ़ील्ड है। यह जानबूझकर है: इसका मतलब है कि स्नैपशॉट रिपॉज़िटरी में रखा जा सकता है और git diff उसे पढ़ लेता है, इसलिए टूल की अपनी तुलना उसे देखने का अकेला तरीका नहीं है।
इसे वैसे रखें जो यह है। स्नैपशॉट पूरी मशीन का वर्णन करता है, हर लॉन्च पथ और security descriptor तक। यह उन्हीं अनुमतियों के साथ लिखा जाता है जो उसकी डायरेक्टरी में पहले से हैं, और टूल कुछ भी सीमित नहीं करता, इसलिए जिस डायरेक्टरी को दूसरे लोग पढ़ सकते हैं, उसमें वे यह सब पढ़ सकते हैं।
फिर पूछें कि क्या अलग है
$ bws snapshot diff before.json --live --exit-code
Changed (2):
Spooler Print Spooler
startType: Manual -> Automatic
status: Stopped -> Running (running state, not configuration)
wlidsvc Microsoft Account Sign-in Assistant
status: Stopped -> Running (running state, not configuration)
Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
- कॉन्फ़िगरेशन और चलने की स्थिति अलग-अलग बताई जाती हैं। एक दिन के अंतर से लिए गए दो स्नैपशॉट इसमें अलग होते हैं कि क्या चल रहा है, और उसमें से लगभग कुछ भी ड्रिफ्ट नहीं होता। सब मिला दें तो वह एक पंक्ति जो मायने रखती है, यानी किसी का बदला हुआ स्टार्टअप प्रकार, उन चालीस के नीचे दब जाती है जो मायने नहीं रखतीं।
- जिसकी तुलना नहीं हो सकी वह सूचीबद्ध है, छिपा नहीं। जो फ़ील्ड दोनों में से किसी एक स्नैपशॉट ने कभी पढ़ा ही नहीं, क्योंकि उस सत्र के पास उसके अधिकार नहीं थे, वह अपनी प्रविष्टि के नीचे तुलना नहीं की गई के रूप में सामने आता है, और सारांश उन प्रविष्टियों को गिनता है। इसलिए जो diff कुछ नहीं बदला कहता है उसका मतलब है कि जो दोनों पक्ष देख सके उसमें कुछ नहीं बदला।
- उन्नत अधिकारों वाले स्नैपशॉट की बिना अधिकारों वाले से तुलना झूठ बोलती, ऐसी प्रविष्टियाँ हटाई हुई बताती जिन्हें किसी ने हटाया नहीं। हर फ़ाइल दर्ज करती है कि उसे लेने वाला खाता व्यवस्थापक था या नहीं, और तुलना यह बता देती है।
- दो फ़ाइलें, सिर्फ़ फ़ाइल और यह मशीन नहीं। स्टेजिंग पर एक लें और प्रोडक्शन पर एक और उनकी तुलना कहीं भी करें। स्टेजिंग अलग क्यों है का जवाब पाने के लिए किसी भी मशीन का मौजूद होना ज़रूरी नहीं।
विंडो यही काम Audit... के तहत करती है। Take snapshot... वही फ़ाइल लिखता है, एक नोट के साथ अगर आप टाइप करें, और Compare with this machine... या Compare two snapshots... सूची की जगह दिखाता है कि क्या बदला, हर फ़ील्ड के लिए एक पंक्ति, और वह सब जो तुलना को पूरी तरह सटीक होने से रोकता है तालिका के ऊपर कहा गया होता है। Show उसे अंतरों तक या एक फ़ील्ड तक सीमित करता है, और Export... उसे CSV फ़ाइल में लिखता है।
एग्ज़िट कोड ही असली बात है
--exit-code कॉन्फ़िगरेशन अलग होने पर 5 के साथ खत्म होता है, यानी कोई प्रविष्टि जुड़ी या हटी हो, या किसी का सेटअप अलग हो। जो सेवा अपने आप सिर्फ़ रुकी या शुरू हुई उसकी रिपोर्ट होती है पर वह गिनी नहीं जाती, और Windows हर साइन-इन किए गए सत्र के लिए जो प्रति-उपयोगकर्ता प्रतियाँ बनाता है वे भी नहीं गिनी जातीं, उन्हें छोड़ दिया जाता है और गिना जाता है। यह विफलता नहीं है, क्योंकि ड्रिफ्ट वही है जिसे ढूँढने के लिए यह टूल बना है और उसे ढूँढना विफलता नहीं है, इसीलिए इसका अपना एक नंबर है, उस नंबर से उधार नहीं लिया गया जिसका मतलब है कि कुछ गलत हुआ।
# जिस दिन मशीन सेवा में जाती है
bws snapshot create C:\baselines\web01.json --note "after the build"
# हर रात, शेड्यूल किए गए टास्क से
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - कोई कॉन्फ़िगरेशन ड्रिफ्ट नहीं
# 5 - कॉन्फ़िगरेशन ड्रिफ्ट हुआ, और drift.json बताता है कि क्या
# 3 - यह चला और सब कुछ नहीं पढ़ सका, इसलिए जवाब आंशिक है
यही पूरी व्यवस्था है: मशीन के ठीक होने पर ली गई एक बेसलाइन, और हर रात पूछा गया एक सवाल। जिस पहली रात यह 5 जवाब देता है, किसी को उसी रात पता चल जाता है, उस सुबह नहीं जब कुछ टूटता है।