क्या यह संभव है?
खैर, सबसे तुच्छ और महत्वपूर्ण उपयोगिताओं में स्थापित हैं /bin
, और अब आप उन सभी तक पहुंच खो चुके हैं। वास्तव में, यदि आप रिबूट करते हैं, तो आपका सिस्टम अब बूट-अप करने में सक्षम नहीं होगा।
वैसे भी, हम इस मुद्दे को ठीक करने जा रहे हैं और /bin
सामग्री को उतना ही पास कर सकते हैं जितना कि यह संभव था। एकमात्र अंतर कुछ प्रतीकात्मक लिंक होगा जो हम भी ठीक करेंगे।
कैसे?
पहले, हमें chroot
आपके टूटे हुए सिस्टम में होना चाहिए , लेकिन एक मामूली अंतर के साथ ! उसके बाद हमें आपके सिस्टम पर स्थापित पैकेजों की एक सूची मिलेगी, जिनके पास /bin
निर्देशिका में कोई भी स्थापित फ़ाइल है , तो हम केवल आवश्यक पैकेजों को डाउनलोड करने और आवश्यक फ़ाइलों को निकालने के लिए जा रहे हैं /bin
। फिर हम कर लेंगे।
उदाहरण के लिए, बाद में chroot
, हम उन पैकेजों की एक सूची प्राप्त कर सकते हैं, जिन्होंने /bin
उपयोग में फ़ाइलें स्थापित की हैं :
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
और हम भी उपयोग कर सकते हैं:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
इन पैकेजों द्वारा स्थापित फाइलों को सूचीबद्ध करने के लिए /bin
।
फिर हम बस उन सभी पैकेजों की एक सूची बनाते हैं जो हमारे लिए आवश्यक हैं, फिर उन्हें डाउनलोड करें और उन्हें /bin
कुछ इस तरह से निकालें :
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
हालाँकि हमें अपने सिस्टम पर सभी संस्थापित संकुलों की जाँच करने के लिए एक स्क्रिप्ट का उपयोग करना चाहिए, क्योंकि इसे मैन्युअल रूप से करना केवल पागलपन है।
इसलिए मैंने एक स्क्रिप्ट लिखी, जो हमें चाहिए वह सब कुछ करती है। यह हमें पुनर्स्थापित करने के लिए सभी आवश्यक पैकेजों का पता लगाता है /bin
, हमें प्रत्येक पैकेज और उनके संबंधित फाइलों का नाम दिखाता है /bin
। यहाँ एक स्क्रीनशॉट है:
अंत में हम सभी पैकेजों को पुनर्स्थापित करने के लिए चुनते हैं या केवल आवश्यक फ़ाइलों को डाउनलोड करने और निकालने के लिए /bin
(जो अनुशंसित विकल्प है):
आप इस स्क्रिप्ट की एक प्रति ले सकते हैं या इसे सीधे डाउनलोड कर सकते हैं ।
चलो शुरू करते हैं
chroot
अपने सिस्टम को एक लाइव डिस्क के साथ बूट करें जिसमें आपके स्थापित उबंटू के समान आर्किटेक्चर है, एक टर्मिनल खोलें और रूट एक्सेस प्राप्त करें:
sudo -i
अपने root
फ़ाइल सिस्टम को माउंट करें (मेरे लिए यह /dev/sda1
):
mount /dev/sda1 /mnt
हमें इंटरनेट से कनेक्टिविटी की आवश्यकता होगी, इसलिए resolv.conf
लाइव उबंटू से अपने माउंटेड रूट विभाजन की प्रतिलिपि बनाएँ :
cp /etc/resolv.conf /mnt/etc/resolv.conf
अब स्क्रिप्ट को माउंटेड पार्टीशन पर कहीं कॉपी करें, जैसे:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
या आप इसका उपयोग कर डाउनलोड कर सकते हैं wget
, आदि जैसे:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
अन्य आवश्यक पथ माउंट करें:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
और यहाँ मामूली अंतर है : chroot
जब कोई /bin
निर्देशिका नहीं होती है तो हम एक टूटी हुई प्रणाली के लिए कैसे कर सकते हैं ? हमें कौन सा खोल चलाना चाहिए?
इसलिए एक अस्थायी बिन निर्देशिका बनाएं। उदाहरण: bintmp
आपके टूटे हुए सिस्टम रूट में नाम :
mkdir /mnt/bintmp
फिर उस में लाइव बाँध /bin
:
mount --bind /bin /mnt/bintmp
/bintmp/bash
अपने लॉगिन शेल को सेट करते समय सिस्टम में चुरोट करें:
chroot /mnt /bintmp/bash
/bintmp
अपने PATH
पर्यावरण चर के रूप में निर्यात करें :
export PATH=/bintmp:$PATH
स्क्रिप्ट को निष्पादन योग्य बिट दें:
chmod +x restore-bin.sh
स्क्रिप्ट चलाएँ:
./restore-bin.sh
खोज पूरी होने तक प्रतीक्षा करें फिर उस प्रश्न का उत्तर दें जो हमने स्क्रीनशॉट में देखा था। यह बहाल करना शुरू कर देगा /bin
और हम लगभग पूरी हो चुकी हैं।
ऐसा होने के बाद, पर्यावरण से बाहर निकलने के लिए CTRL+ Dका उपयोग करें chroot
और माउंट किए गए रास्तों को अनमाउंट करें:
umount -R /mnt
सिस्टम को रिबूट करें।
भीतर लिंक बहाल /bin
अब लगभग /bin
5 प्रतीकात्मक लिंक को छोड़कर, निर्देशिका के भीतर लगभग सभी फाइलें वापस आ गई हैं, जो प्रबंधित हैं update-alternatives
।
अपने रनिंग सिस्टम में, रन करें:
sudo update-alternatives --all
यह आपसे कुछ प्रश्न पूछता है; आप बस ENTERउन सभी को स्वीकार करने के लिए दबा सकते हैं ।
और अब हम कर रहे हैं।
/bin
उबंटू/usr/bin
इन दिनों सिर्फ एक सिम्लिंक नहीं है ? तो आपको सिम्लिंक को वापस रखने की ज़रूरत है?