ฉันเพิ่งลบ“ / bin” วิธีที่ดีที่สุดในการกู้คืนคืออะไร?


10

ฉันวิ่ง rm -rf /bin(ไม่เกี่ยวกับวัตถุประสงค์!)

ฉันบูตคอมพิวเตอร์และใช้ Finnix เพื่อพยายามกู้คืนจากมัน ฉันประสบความสำเร็จในการติดตั้งไดรฟ์และยืนยันว่าใช่/binโฟลเดอร์ทั้งหมดจะถูกลบ

เป็นไปได้หรือไม่ที่จะกู้คืนจากสิ่งนี้โดยไม่ต้องทำการติดตั้งระบบปฏิบัติการใหม่?

ฉันคิดว่าฉันสามารถตั้งค่า VM ด้วยระบบปฏิบัติการและสถาปัตยกรรมเดียวกัน (Ubuntu Server 11.10 alpha release, x86) และติดตั้งแพ็คเกจทั้งหมดที่ฉันติดตั้งบนเซิร์ฟเวอร์จากนั้นคัดลอก/binโฟลเดอร์

จะใช้งานได้ไหม ฉันดีกว่าเพิ่งเริ่มใหม่เหรอ?

คำตอบ:


15

โดยทั่วไปฉันจะติดตั้งใหม่ (จากข้อมูลสำรองที่คุณควรมี) แต่ฉันรู้สึกแฮ็กดังนั้นนี่เป็นอีกวิธีหนึ่ง (สมมติว่าระบบของคุณติดตั้งอยู่ด้านล่าง/target):

  1. รับรายการแพ็คเกจทั้งหมดที่ติดตั้งซึ่งมีไฟล์อยู่/bin:

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

    (ในระบบ Debian Squeeze ของฉันนั้นมีทั้งหมด 34 แพ็กเกจซึ่งทั้งหมดเป็นแพ็คเกจหลัก)

  2. ดาวน์โหลดแพ็คเกจเหล่านี้ (ฉันไม่สามารถใส่ใจสคริปต์นี้ได้ดังนั้นให้ลองไปที่ packages.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>งานเนื่องจาก (เนื่องจากคุณใช้งาน pre-release ซึ่ง Sysadmin Cat กล่าวว่าเป็นระบบที่ใช้งานไม่ได้) รุ่นของแพ็คเกจ คุณเพิ่งแยกมีแนวโน้มที่จะแตกต่างจากที่อยู่ในระบบก่อนและคุณต้องการให้แน่ใจว่าระบบรู้ว่าสิ่งที่


คำตอบที่ดี แต่ฉันขาดอะไรไป? จะไม่dpkg-query -S /binทำเช่นเดียวกันกับgrep .. | sedบทของคุณเหรอ? หากรายการต้องได้รับการทำความสะอาดเพื่อแสดงรายการชื่อแพคเกจหนึ่งชื่อต่อบรรทัดจากนั้นใช้dpkg-query -S /bin | sed 's/\,\ /\n/g'งานได้ (แม้ว่าจะมีพิเศษ: / bin ในบรรทัดสุดท้าย)
Janne Pikkarainen

1
ใช่มันจะ - ฉันพยายามลดจำนวนสิ่งที่เรียกใช้ในระบบเป้าหมายในกรณีที่สิ่งที่เรียกใช้จำเป็นต้องมีบางสิ่งบางอย่าง/binและฉันไม่ต้องการพึ่งพาสิ่ง Debian เฉพาะในระบบช่วยเหลือเพื่อให้เป็น ทั่วไปที่สุดสำหรับผู้ค้นหาในอนาคต
womble

ดูเหมือนว่านี่เป็นรายการของระบบสาธารณูปโภคที่จำเป็นเท่านั้น - ยังไม่มีแพ็คเกจอื่น ๆ ที่มีไฟล์อยู่/binใช่ไหม ฉันควรติดตั้งใหม่ทุกแพ็คเกจบนระบบของฉันหรือเฉพาะสิ่งที่สร้างขึ้นจากผลลัพธ์ของรายการ (เช่น: ขอบคุณฉันรักคุณ!)
Tom Marthenal

1
โดยทั่วไปแพ็คเกจที่จำเป็นเท่านั้นที่จะมีไฟล์/bin- แพ็คเกจส่วนใหญ่ควรใส่ข้อมูลทั้งหมดไว้ใน/usrนั้น ในระบบของฉันมีเพียงแพ็คเกจที่ไม่จำเป็น (เช่นzsh) ที่อยู่ในรายการ "มีหลายอย่างใน/binรายการ" การโหวตขึ้นเป็นวิธีที่ยอดเยี่ยมในการแสดงความรักโดยวิธีการ ...
womble

1
ฉันทำตามคำแนะนำของคุณและทำงานได้อย่างสมบูรณ์ - เซิร์ฟเวอร์ของฉันสำรองและใช้งาน ขอบคุณสำหรับความช่วยเหลือ!
Tom Marthenal

5

ในขณะที่กลยุทธ์ของคุณอาจใช้งานได้ (มีโอกาสที่ดีสำหรับมันมากขึ้นหากคุณคัดลอกไดเรกทอรี bin กลับมาคุณจะทำการติดตั้งแพ็กเกจทั้งหมดในระบบของคุณ apt-get) มันอาจทำให้เกิดปัญหาในอนาคตเพราะคุณอาจได้รับ เซิร์ฟเวอร์ที่ไม่เสถียร

หากนั่นเกิดขึ้นกับฉันฉันจะติดตั้งและเรียกคืนจากการสำรองข้อมูลรายวัน คุณมีการสำรองข้อมูลรายวัน - แผนการกู้คืนความเสียหาย - ใช่ไหม

ในกรณีที่คุณไม่มีแผนกู้คืนความเสียหายฉันขอแนะนำให้สำรองไฟล์กำหนดค่าทั้งหมดและข้อมูลที่คุณต้องการเก็บไว้และดำเนินการติดตั้งใหม่ ด้วยวิธีนี้คุณจะมั่นใจได้ว่าคุณจะจบด้วยเซิร์ฟเวอร์ที่เสถียรอีกครั้ง


1
เนื่องจากเขาโพสต์ที่นี่ถึงวิธีการกู้คืนโฟลเดอร์ / bin เขาไม่มีข้อมูลสำรอง
Goez

น่าเสียดายที่ฉันไม่มีการสำรองข้อมูลรายวัน สคริปต์ทุบตีที่ฉันเขียนในขณะนั้นคือสคริปต์สำรองข้อมูลรายวัน ดูเหมือนว่าฉันจะติดตั้งใหม่ - ขอบคุณสำหรับคำแนะนำ
Tom Marthenal

ไม่จำเป็นต้องติดตั้งใหม่ เห็นคำตอบของฉัน
womble

สแน็ปช็อตระบบไฟล์มีประโยชน์อย่างยิ่งสำหรับการกู้คืนจากสิ่งต่าง ๆ เช่นนี้ น่าเสียดายที่ระบบไฟล์ ext2 / 3/4 ไม่ได้ติดตั้งและใช้งานกับ LVM ซึ่งมีโทษประสิทธิภาพสูง หากฉันลบ / bin บนกล่อง FreeBSD ของฉันโดยไม่ตั้งใจฉันเพิ่งเมานต์สแนปชอตก่อนหน้านี้และคัดลอกไฟล์กลับไปเป็นเวอร์ชันสดของระบบไฟล์ OS X ที่คาดคะเนก็มีเช่นนี้ (เรียกว่า "ไทม์แมชชีน" ที่นั่น)
snap

3

ฉันจะลองสร้าง VM จากนั้นคัดลอกเนื้อหาของ/binไปยังเครื่องที่เสียหายของคุณ ที่ควรจะได้รับคุณและทำงาน จากนั้นเรียกใช้

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

ซึ่งควรติดตั้งแพ็คเกจทั้งหมดที่อยู่ในระบบของคุณใหม่


1

วิธีที่ง่ายที่สุดถ้าคุณสามารถเข้าถึงเครื่องได้คือติดตั้งระบบไฟล์สำรองข้อมูลทั้งหมดของคุณ (เช่นเดียวกับข้อควรระวัง)

จากนั้นคุณสามารถติดตั้ง Ubuntu อีกครั้งเหมือนการติดตั้งปกติ โดยหลักการแล้วข้อมูลทั้งหมดของคุณ (home dir ฯลฯ และ var) ควรยังคงอยู่ที่นั่น

มีวิธีในการติดตั้งแพ็กเกจทั้งหมดใหม่เพื่อให้ / bin repopulated แต่มันค่อนข้างซับซ้อน


0

ไฟล์จะหายไป ในขณะที่คุณสามารถพยายามที่จะ "ยกเลิกการลบ" ไฟล์ - ฉันจะไม่แนะนำ

หมายเหตุ: ฉันไม่เรียกใช้ Ubuntu (และไม่ได้ใช้ Debian distros ซักพัก) อย่างไรก็ตามฉันได้กู้คืน distros ต่าง ๆ ในอดีตทั้งหมดต่อไปนี้สถานการณ์ที่คล้ายกัน

แนวทางปฏิบัติที่ดีที่สุดของคุณ:

  • บูตจาก liveCD
  • ใช้ liveCD ติดตั้งระบบของคุณบางแห่ง (พูด/mnt/mint)
  • ใช้แบบสอบถาม dpkg แพคเกจที่ติดตั้งทั้งหมด :
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • ติดตั้งแพ็กเกจทั้งหมดเหล่านั้นลงใน / mnt / ปลายทางโดยใช้ apt-get โดยใช้:
# apt-get -o RootDir = / mnt / mint .... 
  • (ทางเลือก # 1) คุณอาจต้อง deboostrap /mnt/mint- ไม่แน่ใจ
  • (ทางเลือก # 2) คุณสามารถคัดลอก/binเนื้อหาของ liveCD ไป/mnt/mint/binแต่ฉันไม่ทราบว่า liveCD สำหรับ mint ใช้ busybox ซึ่งอาจทำให้เรื่องยุ่งยาก - ทางเลือก # 1 ในกรณีนั้นดูปลอดภัยกว่า

โดยทั่วไปสิ่งนี้ควรส่งคืนไฟล์ของคุณโดย "ติดตั้งใหม่" ทุกสิ่งที่คุณมี คุณสามารถทำกลอุบายและเคียวรี "ฉลาด" อีกเล็กน้อยสำหรับแพ็คเกจทั้งหมดที่ทำไบนารีใน / bin

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.