मैंने बस "/ बिन" हटा दिया। उबरने का सबसे अच्छा तरीका क्या है?


10

मैं बस भाग गया (उद्देश्य पर नहीं!) rm -rf /bin

मैंने कंप्यूटर को बूट किया है और इससे ठीक होने का प्रयास करने के लिए फिनिक्स का उपयोग कर रहा हूं। मैं ड्राइव को माउंट करने में सफल रहा हूं, और पुष्टि की है कि, हां, पूरा /binफ़ोल्डर हटा दिया गया है।

क्या ओएस को फिर से स्थापित किए बिना इससे उबरना संभव है?

मैं सोच रहा हूं कि मैं एक ही ओएस और आर्किटेक्चर (उबंटू सर्वर 11.10 अल्फा रिलीज, एक्स 86) के साथ एक वीएम सेटअप कर सकता हूं और सर्वर पर मेरे द्वारा स्थापित सभी पैकेज स्थापित कर सकता हूं, फिर बस /binफ़ोल्डर की प्रतिलिपि बनाएँ।

यह काम करेगा? क्या मैं अभी शुरू करने से बेहतर हूं?

जवाबों:


15

सामान्य तौर पर, मैं एक पुनर्स्थापना की ओर झुकाव करता हूं (बैकअप से आपके पास बिल्कुल होना चाहिए)। लेकिन मैं हैकिंग महसूस कर रहा हूं, इसलिए यहां एक और तरीका है (यह मानते हुए कि आपका सिस्टम चालू है /target):

  1. उन सभी स्थापित पैकेजों की सूची प्राप्त करें, जिनमें फ़ाइलें हैं /bin:

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (मेरे डेबियन स्क्वीज़ सिस्टम पर कुल 34 पैकेज हैं, जिनमें से बहुत सारे कोर हैं)

  2. उन पैकेजों में से प्रत्येक को डाउनलोड करें (मुझे इस स्क्रिप्ट को परेशान नहीं किया जा सकता है, इसलिए सिर्फ संकुल .ubuntu.com को हिट करें और उन्हें नीचे कहीं डाउनलोड करें /target)। यदि आप भाग्यशाली हैं कि कुछ पैकेज अभी भी अंदर तैर रहे हैं /target/var/cache/apt/archives

  3. प्रत्येक पैकेज के लिए, चलाएं /target/usr/bin/dpkg -x <package> /target। मैं निश्चित रूप dpkgसे इन दिनों सभी आत्म-निहित हूं , और /binअपने आप में कुछ भी नहीं कहना चाहिए ।

एक बार जब आपको सिस्टम वापस पैरों पर मिल जाता है, तो आपको यह सुनिश्चित करना चाहिए और उसे चलाना चाहिए apt-get --reinstall install <all the packages from step 1>, क्योंकि (जब से आप एक पूर्व-रिलीज़ चला रहे हैं, जो Sysadmin कैट का कहना है कि उत्पादन प्रणाली पर एक नहीं-नहीं है) संकुल के संस्करण आप अभी निकाले गए उन लोगों से अलग होने की संभावना है जो पहले सिस्टम पर थे, और आप यह सुनिश्चित करना चाहते हैं कि सिस्टम को पता है कि वास्तव में क्या है।


अच्छा जवाब, लेकिन क्या मुझे कुछ याद आ रहा है? dpkg-query -S /binआपके grep .. | sedश्लोक से भी ऐसा नहीं होगा ? यदि प्रति पंक्ति एक पैकेज नाम को सूचीबद्ध करने के लिए सूची को साफ करने की आवश्यकता है, तो dpkg-query -S /bin | sed 's/\,\ /\n/g'काम करता है (हालांकि अंतिम पंक्ति पर अतिरिक्त: / बिन होने पर)।
५५ पर जेन पिक्कारेनैन

1
हां, यह होगा - मैं लक्ष्य प्रणाली में चलने वाले सामान की मात्रा को कम करने की कोशिश कर रहा था, जब भी किसी चीज की जरूरत थी /bin, और मैं इसे बनाने के लिए बचाव प्रणाली में कुछ भी डेबियन-विशिष्ट पर भरोसा नहीं करना चाहता था भविष्य के खोजकर्ताओं के लिए सामान्य संभव है।
Womble

ऐसा लगता है कि यह केवल आवश्यक सिस्टम उपयोगिताओं की एक सूची है - क्या अन्य पैकेज भी नहीं हैं जिनमें फाइलें हैं /bin? क्या मुझे अपने सिस्टम पर हर पैकेज को फिर से स्थापित करना चाहिए, या सूची के परिणाम के रूप में उत्पन्न होने वाले लोगों को? (यह भी: धन्यवाद, मैं तुमसे प्यार करता हूँ!)
टॉम Marthenal

1
आमतौर पर, केवल आवश्यक पैकेजों में ही फाइलें होती हैं /bin- अधिकांश पैकेजों में अपना सारा डेटा डालना चाहिए /usr। मेरे सिस्टम पर, केवल गैर-आवश्यक पैकेजों के एक जोड़े (जैसे। zsh) "में सामान है /bin" सूची में हैं। Upvotes प्यार, वैसे दिखाने के लिए एक शानदार तरीका है ...
Womble

1
मैंने आपके निर्देशों का पालन किया और उन्होंने पूरी तरह से काम किया- मेरा सर्वर बैक अप और रनिंग है। मदद के लिए एक टन धन्यवाद!
टॉम मार्थेनल

5

जबकि आपकी रणनीति काम कर सकती है (इसके लिए अच्छे मौके हैं, अधिक यदि आप एक बार बिन निर्देशिका को वापस कॉपी करते हैं, तो आप अपने सिस्टम में सभी पैकेजों को पुनः प्राप्त करते हैं), यह भविष्य में समस्या उत्पन्न कर सकता है क्योंकि आपको मिल सकता है एक अस्थिर सर्वर।

यदि मेरे साथ ऐसा होता है, तो मैं दैनिक बैकअप से पुन: स्थापित और पुनर्स्थापित करूंगा। आपके पास एक दैनिक बैकअप है - एक आपदा वसूली योजना - क्या आप नहीं?

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


1
यह अनुमान लगाने के बाद से कि वह यहाँ कैसे / बिन फ़ोल्डर को पुनर्प्राप्त करता है, उसके पास बैकअप नहीं है।
गोएज

दुर्भाग्य से, मेरे पास कोई दैनिक बैकअप नहीं है। बाश स्क्रिप्ट जो मैं उस समय लिख रहा था, विडंबना थी, एक दैनिक बैकअप स्क्रिप्ट। लगता है कि मैं पुनः स्थापित करूंगा- सलाह के लिए धन्यवाद।
टॉम मार्थेनल

पुन: स्थापित करने की आवश्यकता नहीं है; मेरा जवाब देखिए।
Womble

फाइल सिस्टम स्नैपशॉट इस तरह की चीजों से उबरने के लिए बेहद उपयोगी है। दुर्भाग्य से ext2 / 3/4 फ़ाइल सिस्टम उन्हें लागू नहीं करता है और LVM के साथ ऐसा करने पर बड़ा प्रदर्शन जुर्माना लगता है। यदि मैं अपने FreeBSD बॉक्स पर गलती से / बिन हटा देता हूं, तो मैं बस एक पुराने स्नैपशॉट को माउंट करता हूं और फाइलों को फाइल सिस्टम के लाइव संस्करण पर वापस कॉपी करता हूं। माना जाता है कि ओएस एक्स में यह भी है (इसे "टाइम मशीन" कहा जाता है)।
स्नैप करें

3

मैं /binआपके क्षतिग्रस्त मशीन की सामग्री की नकल करते हुए एक वीएम बनाने की कोशिश करूंगा । कि आपको उठना और दौड़ना चाहिए। फिर भागो

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

जो आपके सिस्टम पर थे सभी संकुल को फिर से स्थापित करना चाहिए।


1

सबसे आसान तरीका है, यदि आपके पास मशीन तक पहुंच है, तो फाइलसिस्टम को माउंट करना है, अपने सभी डेटा (बस एहतियात के रूप में) का बैकअप लें।

फिर आप एक सामान्य स्थापित की तरह ubuntu को फिर से स्थापित कर सकते हैं; सिद्धांत रूप में आपके सभी डेटा (गृह dir, आदि और var) अभी भी होने चाहिए।

सभी पैकेजों को पुनर्स्थापित करने का एक तरीका है ताकि / बिन को फिर से खोला जाए, लेकिन यह काफी जटिल है।


0

फाइलें चली गई हैं। जब आप फ़ाइलों को "हटाना रद्द" करने का प्रयास कर सकते हैं - मैं इसकी सिफारिश नहीं करूंगा।

नोट: मैं उबंटू नहीं चलाता (और थोड़ी देर के लिए डेबियन डिस्ट्रोस का उपयोग नहीं किया है)। हालाँकि मैंने अतीत में सभी समान परिदृश्यों के बाद विभिन्न विकृतियाँ की हैं।

कार्रवाई का आपका सबसे अच्छा कोर्स:

  • liveCD से बूट करें
  • liveCD का उपयोग करके किसी दिन अपने सिस्टम को माउंट करें (कहें, /mnt/mint)
  • सभी स्थापित पैकेजों में dpkg क्वेरी का उपयोग करना :
# dpkg --admindir = / mnt / टकसाल / var / lib / dpkg -l
  • उन सभी पैकेजों को अपने / mnt / टकसाल गंतव्य में स्थापित करें, जिनका उपयोग करके उपयुक्त-प्राप्त करें:
# apt-get -o RootDir = / mnt / टकसाल ...। 
  • (वैकल्पिक # 1) आपको डेबोस्ट्रैप करना पड़ सकता है /mnt/mint- निश्चित नहीं
  • (वैकल्पिक # 2) आप /binलाइवसीडी की सामग्री को कॉपी कर सकते हैं, /mnt/mint/binलेकिन मुझे नहीं पता कि मिंट के लिए लाइवसीडी व्यस्त बॉक्स का उपयोग करता है जो मामलों को जटिल कर सकता है - उस स्थिति में वैकल्पिक # 1 सुरक्षित लगता है।

आम तौर पर यह आपकी फ़ाइलों को आपके पास मौजूद सभी चीजों के "जानवर-पुनर्स्थापना" द्वारा वापस करना चाहिए। आप उन सभी पैकेजों के लिए अधिक "चतुर" चालें और क्वेरी कर सकते हैं जो बायनेरिज़ / बिन में गिरा दिए गए थे

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