Tôi vừa xóa xóa / bin. Cách tốt nhất để phục hồi là gì?


10

Tôi chỉ chạy (không có mục đích!) rm -rf /bin.

Tôi đã khởi động máy tính và đang sử dụng Finnix để cố gắng khôi phục từ nó. Tôi đã thành công trong việc gắn ổ đĩa, và xác nhận rằng, vâng, toàn bộ /binthư mục đã bị xóa.

Có thể phục hồi từ điều này mà không cần cài đặt lại hệ điều hành?

Tôi nghĩ rằng tôi có thể thiết lập một VM với cùng hệ điều hành và kiến ​​trúc (Ubuntu Server 11.10 alpha phát hành, x86) và cài đặt tất cả các gói tôi đã cài đặt trên máy chủ, sau đó chỉ cần sao chép /binthư mục.

Điều này sẽ làm việc? Tôi có tốt hơn khi bắt đầu lại không?

Câu trả lời:


15

Nói chung, tôi nghiêng về cài đặt lại (từ các bản sao lưu mà bạn hoàn toàn cần phải có). Nhưng tôi cảm thấy bị hack, vì vậy đây là một cách khác (giả sử rằng hệ thống của bạn được gắn kết /target):

  1. Nhận danh sách tất cả các gói đã cài đặt có tệp trong /bin:

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

    (Trên hệ thống Bóp Debian của tôi có tổng cộng 34 gói, hầu hết tất cả đều là lõi)

  2. Tải xuống từng gói đó (Tôi không thể bận tâm đến kịch bản bit này, vì vậy chỉ cần truy cập gói.ubfox.com và tải chúng xuống một nơi nào đó bên dưới /target). Nếu bạn may mắn, một số gói vẫn có thể trôi nổi /target/var/cache/apt/archives.

  3. Đối với mỗi gói, chạy /target/usr/bin/dpkg -x <package> /target. Tôi khá chắc chắn dpkglà tất cả khép kín những ngày này, và không nên gọi bất cứ điều gì trong /binchính nó.

Khi bạn đã lấy lại được hệ thống, bạn nên chắc chắn và chạy một hệ thống apt-get --reinstall install <all the packages from step 1>, bởi vì (vì bạn đang chạy bản phát hành trước, mà Sysadmin Cat nói là không có trên các hệ thống sản xuất) các phiên bản của các gói bạn vừa trích xuất có thể khác với những gì đã có trên hệ thống trước đó và bạn sẽ muốn đảm bảo hệ thống biết chính xác những gì.


Câu trả lời tốt đẹp, nhưng tôi có thiếu một cái gì đó? Sẽ không dpkg-query -S /binlàm như vậy hơn khổ grep .. | sedthơ của bạn ? Nếu danh sách cần được dọn sạch để liệt kê một tên gói trên mỗi dòng, thì nó dpkg-query -S /bin | sed 's/\,\ /\n/g'hoạt động (mặc dù có thêm: / bin trên dòng cuối cùng).
Janne Pikkarainen

1
Vâng, nó sẽ - Tôi đã cố gắng giảm thiểu lượng công cụ chạy trong hệ thống đích trong trường hợp bất cứ thứ gì được chạy đều cần một thứ gì đó /binvà tôi không muốn dựa vào bất cứ thứ gì cụ thể của Debian trong hệ thống cứu hộ để biến nó thành nói chung càng tốt cho những người tìm thấy trong tương lai.
womble

Có vẻ như đây chỉ là một danh sách các tiện ích hệ thống thiết yếu mà còn không có các gói khác có tập tin /bin? Tôi có nên cài đặt lại mọi gói trên hệ thống của mình không, hay chỉ những gói được tạo như là kết quả của danh sách? (Ngoài ra: cảm ơn, tôi yêu bạn!)
Tom Marthenal

1
Thông thường, chỉ các gói thiết yếu sẽ có tệp trong /bin- hầu hết các gói nên đặt tất cả dữ liệu của chúng vào /usr. Trên hệ thống của tôi, chỉ có một vài gói không cần thiết (ví dụ zsh:) nằm trong /bindanh sách "có nội dung ". Nhân tiện, một cách tuyệt vời để thể hiện tình yêu, nhân tiện ...
womble

1
Tôi đã làm theo hướng dẫn của bạn và họ đã làm việc hoàn hảo. Máy chủ của tôi đã hoạt động trở lại. Cảm ơn rất nhiều vì sự giúp đỡ!
Tom Marthenal

5

Mặc dù chiến lược của bạn có thể hoạt động (có nhiều cơ hội tốt cho nó, nhưng nếu bạn sao chép lại thư mục bin, bạn sẽ cài đặt lại apt-get tất cả các gói trong hệ thống của bạn), nó có thể gây ra sự cố trong tương lai vì bạn có thể nhận được một máy chủ không ổn định.

Nếu điều đó xảy ra với tôi, tôi sẽ cài đặt lại và khôi phục từ bản sao lưu hàng ngày. Bạn có một bản sao lưu hàng ngày - một kế hoạch khắc phục thảm họa - phải không?

Trong trường hợp bạn không có kế hoạch khắc phục thảm họa, tôi sẽ đề nghị sao lưu tất cả các tệp cấu hình và dữ liệu bạn muốn lưu giữ và tiếp tục cài đặt lại. Bằng cách đó, bạn sẽ chắc chắn rằng mình sẽ kết thúc với một máy chủ ổn định.


1
đoán từ khi anh ấy đăng lên đây cách khôi phục thư mục / bin anh ấy không có bản sao lưu.
Goez

Thật không may, tôi không có bản sao lưu hàng ngày. Kịch bản bash tôi đang viết lúc đó, trớ trêu thay, là một kịch bản sao lưu hàng ngày. Có vẻ như tôi sẽ cài đặt lại cảm ơn vì lời khuyên.
Tom Marthenal

Không cần phải cài đặt lại; xem câu trả lời của tôi
womble

Ảnh chụp nhanh hệ thống tệp cực kỳ hữu ích để khôi phục từ những thứ như thế này. Thật không may, hệ thống tệp ext2 / 3/4 không thực hiện chúng và thực hiện nó với LVM có một hiệu suất lớn. Nếu tôi vô tình xóa / bin trên hộp FreeBSD của mình, tôi chỉ cần gắn một ảnh chụp nhanh trước đó và sao chép các tệp trở lại phiên bản trực tiếp của hệ thống tệp. OS X được cho là cũng có cái này (nó được gọi là "cỗ máy thời gian" ở đó).
chụp

3

Tôi sẽ thử tạo một VM sau đó sao chép nội dung /binvào máy bị hỏng của bạn. Điều đó sẽ giúp bạn đứng dậy và chạy. Sau đó chạy

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

cần cài đặt lại tất cả các gói trên hệ thống của bạn.


1

Cách dễ nhất, nếu bạn có quyền truy cập vào máy, là gắn hệ thống tệp, sao lưu tất cả dữ liệu của bạn (giống như một biện pháp phòng ngừa).

Sau đó, bạn có thể cài đặt lại Ubuntu như cài đặt bình thường; về nguyên tắc tất cả dữ liệu của bạn (thư mục gia đình, vv và var) vẫn còn ở đó.

Có một cách để cài đặt lại tất cả các gói để / bin được lặp lại, nhưng điều đó khá phức tạp.


0

Các tập tin đã biến mất. Mặc dù bạn có thể cố gắng "hủy xóa" các tệp - tôi không khuyến nghị.

Lưu ý: Tôi không chạy Ubuntu (và đã không sử dụng các bản phân phối Debian trong một thời gian). Tuy nhiên tôi đã thực hiện các bản phân phối khác nhau trong quá khứ theo kịch bản tương tự.

Hành động tốt nhất của bạn:

  • khởi động từ liveCD
  • sử dụng liveCD gắn hệ thống của bạn somplace (giả sử /mnt/mint)
  • sử dụng truy vấn dpkg tất cả các gói đã cài đặt:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • cài đặt tất cả các gói đó vào đích / mnt / mint của bạn bằng cách sử dụng apt-get bằng cách sử dụng:
# apt-get -o RootDir = / mnt / mint .... 
  • (thay thế số 1) Bạn có thể phải gỡ lỗi /mnt/mint- không chắc chắn
  • (thay thế số 2) Bạn có thể sao chép /binnội dung của liveCD sang /mnt/mint/binnhưng tôi không biết liệu liveCD cho mint có sử dụng busybox có thể làm phức tạp vấn đề hay không - thay thế số 1 trong trường hợp đó có vẻ an toàn hơn.

nói chung, điều này sẽ trả lại các tệp của bạn bằng cách "cài đặt lại" mọi thứ bạn có. Bạn có thể thực hiện thêm các thủ thuật và truy vấn "thông minh" hơn cho tất cả các gói đã bỏ nhị phân vào / bin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.