Saya baru saja menghapus "/ bin". Apa cara terbaik untuk pulih?

10

Saya hanya berlari (tidak sengaja!) rm -rf /bin.

Saya telah mem-boot komputer dan menggunakan Finnix untuk mencoba memulihkannya. Saya telah berhasil memasang drive, dan mengonfirmasi bahwa, ya, seluruh /binfolder dihapus.

Apakah mungkin untuk memulihkan dari ini tanpa menginstal ulang OS?

Saya berpikir bahwa saya dapat mengatur VM dengan OS dan arsitektur yang sama (Ubuntu Server 11.10 rilis alpha, x86) dan menginstal semua paket yang saya instal di server, kemudian cukup salin /binfoldernya.

Akankah ini berhasil? Apakah saya lebih baik memulai dari awal?

Tom Marthenal
sumber

Jawaban:

15

Secara umum, saya akan cenderung menginstal ulang (dari cadangan Anda benar-benar seharusnya). Tapi saya merasa peretasan, jadi inilah cara lain (dengan asumsi bahwa sistem Anda terpasang di bawah /target):

  1. Dapatkan daftar semua paket terinstal yang memiliki file di /bin:

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

    (Di sistem Debian Squeeze saya, total ada 34 paket, semuanya inti)

  2. Unduh masing-masing paket tersebut (saya tidak bisa repot-repot menulis skrip ini, jadi tekan saja paket.ubuntu.com dan unduh ke suatu tempat di bawah /target). Jika Anda beruntung beberapa paket mungkin masih beredar /target/var/cache/apt/archives.

  3. Untuk setiap paket, jalankan /target/usr/bin/dpkg -x <package> /target. Saya cukup yakin dpkgsemua serba lengkap hari ini, dan tidak boleh memanggil apa pun dalam /bindirinya sendiri.

Setelah Anda mendapatkan kembali sistem itu, Anda harus memastikan dan menjalankan apt-get --reinstall install <all the packages from step 1>, karena (karena Anda menjalankan pra-rilis, yang Sysadmin Cat katakan adalah tidak-tidak pada sistem produksi) versi paket Anda baru saja mengekstraksi kemungkinan akan berbeda dari yang ada di sistem sebelumnya, dan Anda ingin memastikan sistem tahu persis apa itu.

womble
sumber
Jawaban yang bagus, tetapi apakah saya melewatkan sesuatu? Tidak akan dpkg-query -S /binmelakukan hal yang sama dari grep .. | sedbait Anda ? Jika daftar perlu dibersihkan hingga daftar satu nama paket per baris, maka dpkg-query -S /bin | sed 's/\,\ /\n/g'berfungsi (meskipun memiliki tambahan: / bin pada baris terakhir).
Janne Pikkarainen
1
Ya, itu akan - saya mencoba untuk meminimalkan jumlah barang yang berjalan di sistem target jika ada sesuatu yang berjalan membutuhkan sesuatu /bin, dan saya tidak ingin bergantung pada apa pun yang khusus Debian dalam sistem penyelamatan untuk menjadikannya sebagai umum mungkin untuk pencari masa depan.
womble
Sepertinya ini hanya daftar utilitas sistem yang esensial — bukankah ada paket lain yang juga memiliki file /bin? Haruskah saya menginstal ulang setiap paket di sistem saya, atau hanya yang dihasilkan sebagai hasil dari daftar? (Juga: terima kasih, aku mencintaimu!)
Tom Marthenal
1
Biasanya, hanya paket esensial yang memiliki file /bin- sebagian besar paket harus meletakkan semua datanya di bawah /usr. Di sistem saya, hanya beberapa paket yang tidak penting (mis. zsh) Yang ada di daftar "ada barangnya /bin". Upvotes adalah cara yang bagus untuk menunjukkan cinta, omong-omong ...
womble
1
Saya mengikuti instruksi Anda dan mereka bekerja dengan sempurna — server saya kembali dan berjalan Terima kasih banyak atas bantuannya!
Tom Marthenal
5

Walaupun strategi Anda mungkin berhasil (ada peluang bagus untuk itu, lebih jika Anda menyalin kembali direktori bin, Anda melakukan instal ulang semua paket di sistem Anda), itu dapat menghasilkan masalah di masa depan karena Anda mungkin mendapatkan server yang tidak stabil.

Jika itu terjadi pada saya, saya akan menginstal ulang dan memulihkan dari cadangan harian. Anda memiliki cadangan harian - rencana pemulihan bencana - bukan?

Jika Anda tidak memiliki rencana pemulihan bencana, saya sarankan untuk mencadangkan semua file konfigurasi dan data yang ingin Anda simpan dan lanjutkan dengan instal ulang. Dengan begitu Anda akan yakin bahwa Anda akan berakhir dengan server yang stabil lagi.

hmontoliu
sumber
1
menebak sejak dia memposting di sini cara memulihkan folder / bin dia tidak memiliki cadangan.
Goez
Sayangnya, saya tidak punya cadangan harian. Skrip bash yang saya tulis pada saat itu, ironisnya, adalah skrip cadangan harian. Sepertinya saya akan menginstal ulang — terima kasih atas sarannya.
Tom Marthenal
Tidak perlu menginstal ulang; lihat jawaban saya.
womble
Cuplikan sistem file sangat berguna untuk memulihkan dari hal-hal seperti ini. Sayangnya sistem file ext2 / 3/4 tidak menerapkannya dan melakukannya dengan LVM memiliki penalti kinerja yang besar. Jika saya tidak sengaja menghapus / bin pada kotak FreeBSD saya, saya hanya memasang snapshot sebelumnya dan menyalin file kembali ke versi langsung dari sistem file. OS X konon juga memiliki ini (disebut "mesin waktu" di sana).
jepret
3

Saya akan mencoba membuat VM kemudian menyalin konten /binke mesin Anda yang rusak. Itu seharusnya membuat Anda bangun dan berjalan. Lalu lari

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

yang harus menginstal ulang semua paket yang ada di sistem Anda.

user9517
sumber
1

Cara termudah, jika Anda memiliki akses ke mesin, adalah dengan memasang sistem file, ambil cadangan semua data Anda (hanya sebagai tindakan pencegahan).

Kemudian Anda dapat menginstal ulang ubuntu seperti instalasi normal; pada prinsipnya semua data Anda (dir home, dll dan var) harus tetap ada.

Ada cara untuk menginstal ulang semua paket sehingga / bin terisi kembali, tetapi itu cukup rumit.

Joris
sumber
0

File-file hilang. Meskipun Anda dapat mencoba "membatalkan penghapusan" file - saya tidak akan merekomendasikannya.

Catatan: Saya tidak menjalankan Ubuntu (dan belum pernah menggunakan distro Debian untuk sementara waktu). Namun saya telah melakukan berbagai pemulihan distro di masa lalu semua skenario yang sama berikut.

Tindakan terbaik Anda:

  • boot dari liveCD
  • menggunakan liveCD mount somplace sistem Anda (katakanlah, /mnt/mint)
  • menggunakan permintaan dpkg semua paket yang diinstal:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • instal semua paket tersebut ke tujuan / mnt / mint Anda menggunakan apt-get menggunakan:
# apt-get -o RootDir = / mnt / mint .... 
  • (alternatif # 1) Anda mungkin harus deboostrap /mnt/mint- tidak yakin
  • (alternatif # 2) Anda dapat menyalin /binisi liveCD ke /mnt/mint/bintetapi saya tidak tahu apakah liveCD untuk mint menggunakan busybox yang dapat memperumit masalah - alternatif # 1 dalam kasus itu tampaknya lebih aman.

umumnya ini akan mengembalikan file Anda dengan "menginstal ulang brutal" semua yang Anda miliki. Anda dapat melakukan sedikit trik "pintar" dan mencari semua paket yang menghapus binari di / bin

Droopy4096
sumber