Sudo rm / * yang dijalankan secara tidak sengaja pada server jarak jauh

11

Saya secara tidak sengaja dieksekusi rm /*ketika login sebagai root di Server Ubuntu yang jauh dan menghapus hampir semua binari dan saat ini saya tidak dapat login melalui ssh atau ftp untuk mengembalikan file (dan berharap yang terbaik).

Apakah ada cara untuk memperbaiki kekacauan ini, atau haruskah saya menelepon pusat data dan meminta format?

Semut
sumber
2
Bisakah Anda mengonfirmasi apakah ini server fisik atau virtual? Juga apakah Anda menjalankan -rargumen rmatau benar-benar hanya melakukan perintah yang Anda tunjukkan. Apakah penyedia hosting Anda menyediakan cara apa pun untuk mengakses gambar disk di luar mesin tertentu?
Caleb

Jawaban:

26

rm /*harus menghapus sangat sedikit. Tidak ada -rbendera di sana yang akan menghapus apa pun secara rekursif, dan tanpa itu direktori tidak akan dihapus (dan bahkan jika direktori dihapus, hanya yang kosong yang dapat dihapus). Jawaban ini didasarkan pada asumsi bahwa Anda tidak menjalankan rm -rf /*.

Satu-satunya file di root filesystem konsekuensi mungkin adalah symlink ke kernel dan initrd (walaupun pada satu sistem Ubuntu yang saya lihat, mereka tidak ada) atau /lib64symlink pada sistem 64-bit.

Masalahnya mungkin saja bahwa /lib64 -> /libsymlink telah dihapus. Itu cukup jahat, karena hampir setiap program akan bergantung pada symlink itu:

$ ldd /bin/bash
...
    /lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)

Itu ld-linuxadalah pemuat dinamis, dan jika tidak tersedia, Anda tidak dapat menjalankan executable dinamis apa pun. Ini akan membuatnya sangat sulit untuk masuk, dan Anda mungkin tidak bisa sama sekali.

Satu penyelamat mungkin busybox. Jalankan ini untuk memeriksa:

$ ldd /bin/busybox
    not a dynamic executable

Dalam hal ini, busybox seharusnya bisa dijalankan, tetapi pertanyaannya adalah bagaimana Anda bisa menjalankannya?

Jika Anda memiliki akses ke prompt boot loader, Anda mungkin dapat boot dengan init=/bin/static-sh, di mana static-sh adalah symlink ke busybox(periksa yang /bin/static-shada - itu ada di sistem saya, tapi itu bukan standar Ubuntu. Bug ini menunjukkan bahwa tersedia .)

Setelah Anda memiliki shell root, Anda dapat membuat kembali /lib64symlink. Anda mungkin perlu me-remount sistem file root sebagai baca / tulis. busybox harus memiliki alat ini bawaan, yang dapat Anda jalankan sebagai berikut:

# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash# 

Jika bash berhasil, masalahnya harus diperbaiki.

camh
sumber
18

Jika Anda perlu memulihkan file dari instalasi saat ini, minta host Anda untuk membantu Anda. Dengan asumsi itu adalah VM, dibutuhkan sekitar lima menit dari hari mereka untuk gambar disk Anda, instal ulang host Anda dari awal dan buang gambar disk lama di sistem file baru Anda.

Jika Anda tidak memerlukan apa-apa, minta mereka untuk menginstal ulang. Hampir selalu pilihan yang lebih cepat ketika Anda memikirkan hal-hal yang sulit.

Oli
sumber
2
Setuju. Jika mereka adalah layanan hosting VM yang cukup kompeten, mereka harus dapat melakukan ini. Hubungi mereka secepat mungkin untuk memastikan mereka masih memiliki cadangan pra-sekrup.
Shadur
2

Jika Anda baru saja menghapus symlink / lib64 ke / lib dan Anda masih memiliki konsol terbuka, lakukan saja:

/lib/ld-linux-x86-64.so.2 /bin/ln -s /lib /lib64

dan Anda harus dapat menjalankan perintah secara normal lagi. Sesuaikan jalur ke pustaka ld Anda yang sebenarnya. Anda juga dapat menjalankan perintah lain yang Anda inginkan dengan hanya memulainya dengan jalur pustaka ld lengkap.

Neuro Mancer
sumber
1

Tanpa memiliki akses ke server fisik tidak banyak yang dapat Anda lakukan.

Marco Ceppi
sumber
Jadi, haruskah saya meminta format kemudian, atau adakah cara untuk mengembalikan file-file itu tanpa mencambuk yang lainnya?
Semut
Anda lupa bahwa ada kemungkinan besar bahwa ini adalah server virtual di mana "server fisik" tidak berarti banyak kecuali memiliki akses ke alat jarak jauh tingkat yang lebih tinggi.
Caleb