हाइपर- V सर्वर 2012 R2 पर windows.old को ठीक से निकालें


22

मैंने हाइपर- V सर्वर 2012 R2 एक सर्वर पर स्थापित किया है जिसमें हाइपर-वी सर्वर 2012 था। जब मैंने ऐसा किया, तो मानक Windows.oldफ़ोल्डर बनाया गया था। मैं अब उस फ़ोल्डर को सुरक्षित रूप से निकालना चाहता हूं। एक पूर्ण GUI के साथ ऐसा करने का मानक तरीका डिस्क क्लीनअप का उपयोग करना होगा, लेकिन निश्चित रूप से मेरे पास हाइपर-वी सर्वर पर वह विकल्प नहीं है।

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

पूछने का मेरा प्राथमिक कारण, जैसा कि सिर्फ करने rmdir /sया कुछ ऐसा करने का विरोध किया जाता है , यह है कि Windows.oldफ़ोल्डर में बहुत सारे जंक्शन हैं, और मैं ऐसा करने के हिस्से के रूप में उत्पादन ओएस कॉपी में कुछ भी तोड़ना नहीं चाहता हूं।


मैंने पढ़ा cleanmgr.exe कमांड लाइन में चल सकता है ... निश्चित नहीं है कि क्या यह सर्वर कोर या 2012 पर लागू होता है ???
जॉन

जवाबों:


23

मैंने सबसे पहले cleanmgr.exe (डिस्क क्लीनअप टूल) को कॉपी करने और चलाने की कोशिश की, लेकिन इसमें DLL पर बहुत अधिक निर्भरताएं हैं जो Core / Hyper-V सर्वर में मौजूद नहीं हैं।

इसलिए इसके बजाय मैंने निर्देशिका को मैन्युअल रूप से हटा दिया।

पहले मैंने सभी जंक्शन बिंदुओं और प्रतीकात्मक लिंक को हटा दिया। ऐसा करने के लिए मैंने SysInternals से j जंक्शन .exe का उपयोग किया । Exe को अपने पथ में एक निर्देशिका में कॉपी करें। मैंने इसे सभी जंक्शनों की सूची प्राप्त करने के लिए चलाया:

c:\tools\junction.exe -s -q C:\windows.old > %temp%\junc.txt

मैंने एक PowerShell खोला:

start powershell.exe

और संबंधित लाइनों को खोजने और junction.exe को फिर से निष्पादित करने के लिए निम्न स्क्रिप्ट को चलाया:

 foreach ($line in [System.IO.File]::ReadLines("$env:temp\junc.txt"))
 {
     if ($line -match "^\\\\")
     {
         $file = $line -replace "(: JUNCTION)|(: SYMBOLIC LINK)",""
         & c:\tools\junction.exe -d "$file"
     }
 }

इसने मेरे सिस्टम पर सभी जंक्शन बिंदुओं और एकल प्रतीकात्मक लिंक को हटा दिया।

cmd.exe में वापस अब मैंने तीन आदेशों को निष्पादित करने के लिए अनुमतियों को साफ़ करें और सभी फ़ाइलों को हटा दें:

 takeown /F C:\windows.old /R /D Y
 cacls C:\windows.old /T /G Everyone:F
 rd /s /q C:\windows.old

मेरे परीक्षण में, मैंने एक नया हाइपर- V सर्वर 2012 स्थापित किया, फिर 2012 R2 में अपग्रेड किया गया, Windows.old अब चला गया है और सिस्टम सभी पुराने जंक्शन लक्ष्य के साथ ठीक चल रहा है।


Junc.Txt की सामग्री क्या थी? क्या आप इसे पास्टबिन में पोस्ट कर सकते हैं? मैं उत्सुक हूँ अगर ब्याज की कुछ भी जुड़ा हुआ था।
लोंगने

pastebin.com/pYBGR4ap में junc.txt की सभी प्रासंगिक पंक्तियाँ हैं
पीटर

यह ठीक काम करने के लिए प्रतीत होता है, धन्यवाद! मुझे भी पता takeownहै कि मैं मौजूद हूं, जिसे मैं स्वीकार करने के लिए थोड़ा शर्मिंदा हूं।
माइकबाज़ - MSFT

1
फ़ोल्डर को हटाने से पहले जंक्शन बिंदुओं को मैन्युअल रूप से हटाने की आवश्यकता क्यों होगी? जंक्शन पॉइंट फाइल सिस्टम में जमा हो जाते हैं, इसलिए निश्चित रूप से फ़ोल्डर के साथ डिलीट हो जाएंगे ...?
एशले

3
@AshleySteel - क्योंकि जंक्शन रखते समय, टेकऑन जैसी कमांड विफल हो जाती है। यहाँ त्रुटि है: जानकारी: सिस्टम निर्दिष्ट पथ नहीं ढूँढ सकता। ("C: \ windows.old \ Documents and Settings \ All Users \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Microsoft \ Windows \" SystemData \ S-1-5-18 \ ReadOnly ") त्रुटि: फ़ाइल नाम, निर्देशिका नाम या वॉल्यूम लेबल सिंटैक्स गलत है। - यह मेरे लिए एक पुनरावृत्ति समस्या की तरह दिखता है और जब फ़ाइल पथ बहुत लंबा हो जाता है तो यह बंद हो जाता है।
पीटर हैन्डॉर्फ

4

मैंने पीटर एच के उत्तर का उपयोग किया और पुष्टि की कि यह काम करता है, हालांकि मुझे कई सर्वरों पर ऐसा करने की आवश्यकता थी, इसलिए मैंने उनके कोड को एक पॉवरशेल स्क्रिप्ट में संशोधित किया जिसे स्थानीय रूप से या किसी अन्य मशीन से पीएस रीमोटिंग के माध्यम से निष्पादित किया जा सकता है। यह .ps1 फ़ाइल है:

# Script to remove windows.old after an upgrade

# Assumes path to sysinternals is in the PATH env variable


$ErrorActionPreference = "Inquire"

junction.exe -accepteula -s -q C:\windows.old | out-file $env:temp\juncts.txt -force

foreach ($line in [System.IO.File]::ReadLines("$env:temp\juncts.txt"))
 {
     if ($line -match "^\\\\")
     {
         $file = $line -replace "(: JUNCTION)|(: SYMBOLIC LINK)",""
         & junction.exe -d "$file"
     }
 }

 takeown /F C:\windows.old /R /D Y
 echo y | cacls C:\windows.old /T /G Everyone:F

 rm C:\windows.old -recurse -force
 rm "$env:temp\juncts.txt" -force

हाँ, यह एक इलाज का काम करता है। शक्तियों को ऊपर उठाने के लिए मत भूलना। Exe विशेषाधिकार ("प्रशासक के रूप में चलाएँ")
नेक्सस

पंक्ति: गूंज y | cacls C: \ windows.old / T / G हर कोई: F होना चाहिए: echo y | cacls C: \ windows.old / T / G हर कोई: F कोई जगह नहीं <kbd> y </ kbd> और <kbd> | </ kbd>
user437960
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.