เป็นไปได้ไหม?
มีการติดตั้งยูทิลิตี้เล็ก ๆ น้อย ๆ ที่สำคัญและสำคัญ/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
จาก Ubuntu สดไปยังพาร์ทิชันรูทที่ติดตั้งของคุณ:
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
Chroot เข้าสู่ระบบในขณะที่ตั้ง/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
อยู่ใน Ubuntu เพียงแค่ symlink ใน/usr/bin
วันนี้ ดังนั้นสิ่งที่คุณต้องทำคือใส่ symlink กลับมา?