Harap dicatat: Jawaban dan komentar untuk pertanyaan ini berisi konten dari yang lain, pertanyaan serupa yang telah menerima banyak perhatian dari media luar tetapi ternyata menjadi pertanyaan bohong dalam beberapa jenis skema pemasaran viral. Karena kami tidak mengizinkan ServerFault disalahgunakan sedemikian rupa, pertanyaan asli telah dihapus dan jawaban digabungkan dengan pertanyaan ini.
Ini tragedi yang menghibur. Pagi ini saya melakukan sedikit pemeliharaan pada server produksi saya, ketika saya keliru mengeksekusi perintah berikut:
sudo rm -rf --no-preserve-root /mnt/hetznerbackup /
Saya tidak melihat ruang terakhir sebelum /
dan beberapa detik kemudian, ketika peringatan membanjiri baris perintah saya, saya menyadari bahwa saya baru saja menekan tombol penghancuran diri. Inilah sedikit dari apa yang membakar mataku:
rm: cannot remove `/mnt/hetznerbackup': Is a directory
rm: cannot remove `/sys/fs/ecryptfs/version': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/inode_readahead_blks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_max_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/delayed_allocation_blocks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/max_writeback_mb_bump': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stream_req': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_min_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stats': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/trigger_fs_error': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/session_write_kbytes': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/lifetime_write_kbytes': Operation not permitted
# and so on..
Saya menghentikan tugas dan merasa lega ketika saya menemukan bahwa layanan produksi masih berjalan. Sayangnya, server tidak lagi menerima kunci publik atau kata sandi saya untuk pengguna mana pun melalui SSH.
Bagaimana Anda bergerak maju dari sini? Saya akan berenang di lautan kawat berduri untuk mendapatkan akses SSH itu kembali.
Server menjalankan Ubuntu-12.04 dan di-host di Hetzner.
sumber
--no-preserve-root
secara tidak sengaja ?! : -oJawaban:
Boot ke sistem penyelamatan yang disediakan oleh Hetzner dan periksa kerusakan apa yang telah Anda lakukan.
Transfer semua file ke lokasi yang aman dan gunakan kembali server setelahnya.
Saya khawatir itu adalah solusi terbaik dalam kasus Anda.
sumber
Faktanya adalah? Pada titik ini, tidak ada perbaikan otomatis sederhana / mudah untuk ini. Pemulihan data adalah ilmu dan bahkan dasar, alat umum membutuhkan seseorang untuk duduk dan memastikan data ada di sana. Jika Anda berharap untuk pulih dari ini tanpa downtime dalam jumlah besar, Anda akan kecewa.
Saya sarankan menggunakan testdisk atau alat pemulihan khusus sistem file. Coba satu sistem, lihat apakah itu berfungsi, dan sebagainya. Tidak ada cara nyata untuk mengotomatiskan proses tetapi Anda mungkin dapat melakukannya dengan hati - hati dalam batch.
Yang mengatakan, ada beberapa hal yang sangat menakutkan dalam pertanyaan dan komentar yang seharusnya menjadi bagian dari laporan setelah tindakan Anda.
Pertama, Anda menjalankan perintah di mana-mana tanpa memeriksanya terlebih dahulu. Jalankan perintah pada satu kotak. Lalu beberapa, lalu lebih banyak. Pada dasarnya jika terjadi kesalahan, lebih baik memengaruhi beberapa daripada semua sistem Anda.
Kedua
Membuatku takut. Pencadangan tingkat satu arah file adalah masalah yang terpecahkan . Rsync dapat digunakan untuk mempertahankan izin dan menyalin file satu arah ke situs cadangan. Sesuatu yang tidak sengaja? Instal ulang (sebaiknya secara otomatis) kembali rsync, dan semuanya berfungsi. Di masa depan, Anda mungkin menggunakan snapshot tingkat sistem file dengan snapshot btrf atau zfs dan mengirimkannya untuk cadangan tingkat sistem. Saya benar-benar bermain-main dengan memisahkan aplikasi server, database dan penyimpanan dan memperkenalkan prinsip privilege paling tidak sehingga Anda akan membagi risiko sesuatu seperti ini ..
Setelah sesuatu terjadi adalah waktu terburuk untuk mempertimbangkan ini.
Apa yang bisa kita pelajari dari ini?
Jangan pernah menjalankan perintah di mana pun sekaligus. Pisahkan mesin uji dan produksi, dan sebaiknya lakukan mesin produksi secara bertahap. Lebih baik memperbaiki 1 atau 10 mesin daripada 100 atau 1000.
Perintah periksa dua dan tiga. Tidak ada salahnya meminta rekan kerja untuk mengecek "hei, saya akan melakukan drive, bisakah Anda waras memeriksa ini sehingga saya tidak berakhir dengan menghapus drive?". Pembungkus mungkin membantu juga, tetapi tidak ada yang mengalahkan mata yang kurang lelah.
Apa yang bisa kamu lakukan sekarang? Kirim email ke pelanggan. Biarkan mereka tahu ada waktu henti dan ada kegagalan besar. Bicaralah dengan atasan Anda, legal, penjualan dan semacamnya dan lihat bagaimana Anda dapat mengurangi kerusakan. Mulailah merencanakan pemulihan, dan jika perlu, Anda harus, paling-paling, menyewa tangan tambahan. Paling buruk, rencanakan untuk menghabiskan banyak uang untuk pemulihan. Pada tahap ini, Anda akan bekerja untuk mengurangi kejatuhan serta perbaikan teknis.
sumber
dd
masalah di atas) tidak akan memperburuknya.$foo
dan$bar
keduanya tidak terdefinisi,rm -rf /
seharusnya ada kesalahan dengan--no-preserve-root
pesan. Satu-satunya cara saya bisa memikirkan bahwa ini akan benar-benar bekerja pada mesin CentOS7 adalah jika$bar
dievaluasi*
, jadi apa yang dijalankanrm -rf /*
.Ketika Anda menghapus barang dengan
rm -rf --no-preserve-root
, hampir tidak mungkin untuk pulih. Sangat mungkin Anda kehilangan semua file penting.Seperti @faker katakan dalam jawabannya, tindakan terbaik adalah mentransfer file ke lokasi yang aman dan memindahkan server setelahnya.
Untuk menghindari situasi serupa di masa mendatang, saya sarankan Anda:
Ambil cadangan setiap minggu, atau setidaknya setiap dua minggu. Ini akan membantu Anda mendapatkan kembali layanan yang terpengaruh dengan MTTR seminimal mungkin.
Jangan bekerja sebagai root saat tidak diperlukan . Dan selalu berpikir dua kali sebelum melakukan sesuatu. Saya sarankan Anda juga menginstal safe-rm .
Jangan mengetikkan opsi yang tidak ingin Anda panggil , seperti
--no-preserve-root
atau--permission-to-kill-kittens-explicitly-granted
, dalam hal ini.sumber
--please-destroy-my-drive
parameterhdparm
.Saya memiliki masalah yang sama tetapi hanya menguji dengan hard drive, saya telah kehilangan segalanya. Saya tidak tahu apakah itu akan berguna tetapi tidak menginstal apa pun , jangan menimpa data Anda, Anda perlu memasang hard drive Anda dan meluncurkan beberapa alat forensik seperti otopsi, photorec, Testdisk.
Saya sangat merekomendasikan Testdisk, dengan beberapa perintah dasar Anda dapat memulihkan data Anda jika Anda tidak menimpanya.
sumber
Cara terbaik untuk memperbaiki masalah seperti ini adalah dengan tidak memilikinya sejak awal.
Jangan secara manual memasukkan perintah "rm -rf" yang memiliki garis miring dalam daftar argumen. (Menempatkan perintah tersebut dalam skrip shell dengan rutinitas validasi / kewarasan yang sangat baik untuk melindungi Anda dari melakukan sesuatu yang bodoh berbeda.)
Tapi jangan lakukan itu.
Pernah. Jika Anda merasa perlu melakukannya, Anda tidak berpikir cukup keras.
Alih-alih, ubah direktori kerja Anda menjadi induk dari direktori tempat Anda bermaksud memulai penghapusan, sehingga target perintah rm tidak memerlukan garis miring:
sumber
rm /bla/foo/bar -rf
. Setidaknya dengan cara itu saya tidak mendapat banyak masalah ketika saya tekan kembali dengan sengaja setelah mengetikrm /
bagian./mnt/hetznerbackup
, dia harus menggunakan "/" untuk menandai semua yang ada di dalam folder itu .. tetapi dari orangtua, hanyahetznerbackup
cukup, tanpa garis miring.Saya akan mencoba memulihkan mesin cadangan, tempat semua salinan disimpan:
dd
perintah.testdisk
untuk memulihkan file.Jadi katakanlah Anda ingin memulihkan 1TB, Anda akan membutuhkan 2TB tambahan, 1TB untuk cadangan (langkah 1) ditambah 1TB untuk pemulihan (langkah 2).
Saya melakukan kesalahan yang sama dengan alias rm -fr [telepon berdering] dan cd ke direktori berharga. Sekarang saya selalu berpikir dua kali dan periksa kembali beberapa kali sebelum saya menggunakan perintah rm atau dd.
sumber
dd
untuk menghapus peluang terakhir Anda.Seperti disebutkan dalam jawaban lain, Hetzner memiliki sistem penyelamatan. Ini mencakup opsi netboot dengan akses ssh serta java applet untuk memberi Anda layar dan keyboard di vserver Anda.
Jika Anda ingin memulihkan sebanyak mungkin, reboot server ke sistem netboot dan kemudian login dan unduh gambar sistem file dengan membaca dari inode perangkat yang sesuai.
Saya pikir sesuatu seperti ini seharusnya bekerja:
Tentu saja pengalihan dilakukan oleh shell sebelum perintah ssh dipanggil, jadi server.img adalah file lokal. Jika Anda hanya menginginkan sistem file root dan bukan disk lengkap, ganti
sda
dengansda3
menganggap Anda menggunakan gambar yang sama dengan saya.sumber
ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz
(the gzip on-the-fly akan atau tidak akan membantu tergantung pada apa isi dari filesystem itu ...)-C
jika belum diaktifkan di konfigurasi Anda.ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz
(opsi -c dari ssh biasanya juga bagus, tetapi Anda masih harus mengompres pada akhirnya, karena ssh hanya akan mengompres di pintu masuk terowongannya) dan uncompress sebelum mengirim ke stdout)Saya akan bersumpah menggunakan
rm
selama sisa hidup saya dan berpikir bahwa itu gila bahwa trash-cli bukan perintah penghapusan default pada sistem nix.https://github.com/andreafrancia/trash-cli
Saya akan memastikan itu adalah hal pertama yang saya instal pada sistem baru dan
alias rm
untuk sesuatu yang memberitahu orang untuk menggunakannyatrash-cli
. Itu juga akan mencakup catatan tentang alias lain yang benar-benar berjalan/bin/rm
tetapi memberitahu mereka untuk tidak menggunakannya dalam banyak kasus.:( Kisah nyata
sumber
trash-empty 5
dalam cron. Intinya adalah untuk memberi Anda masa tenggang karena manusia membuat kesalahan.Saya ingin saran dalam hal ini adalah unmount dan gunakan debugfs , dan dengan bantuan lsdel Anda dapat membuat daftar semua file yang baru saja dihapus, yang mana tidak dibersihkan dari jurnal dan kemudian membuang file yang diperlukan. Tautan pencarian cepat untuk hal yang sama: http://www.linuxvoodoo.com/resources/howtos/debugfs
berharap itu akan membantu seseorang. ;)
Dan ya, salah satu saran adalah membuat skrip, yang memindahkan rim rm ke real.rm dan symlinc mv ke rm ;)
sumber
Hentikan semua proses server dan segala sesuatu yang dapat menyebabkan disk i / o ... kemudian jalankan testdisk, seharusnya ada di tumpukan perangkat lunak Anda. Jika Anda memiliki akses fisik, gunakan livecd dengan testdisk.
sumber