Pertanyaan Kesalahan Senin pagi: sudo rm -rf --no-preserve-root /


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 tipuan 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 adalah sebuah tragedi yang menghibur. Pagi ini saya melakukan sedikit pemeliharaan di server produksi saya, ketika saya salah melaksanakan perintah berikut:

sudo rm -rf --no-preserve-root /mnt/hetznerbackup /

Saya tidak melihat ruang terakhir sebelumnya / dan beberapa detik kemudian, ketika peringatan membanjiri baris perintah saya, saya menyadari bahwa saya baru saja menekan tombol penghancur otomatis. Inilah sedikit yang membakar mata saya:

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 mengetahui bahwa layanan produksi masih berjalan. Sayangnya, server tidak lagi menerima kunci publik atau kata sandi saya untuk setiap pengguna melalui SSH.

Bagaimana Anda akan bergerak maju dari sini? Saya akan berenang samudra kawat berduri untuk mendapatkan akses SSH kembali.

Server menjalankan Ubuntu-12.04 dan dihosting di Hetzner.


142
2018-04-07 06:39




Kembalikan dari cadangan. Sejujurnya, ini adalah salah satu skenario tidak mudah-kembali. - MadHatter
Bagaimana Anda mengetik --no-preserve-root tidak sengaja ?! :-Hai - ThatGraemeGuy
Greame, kuncinya seperti tepat di sebelah satu sama lain. - MadHatter
Pekerjaan Selasa: Carilah pekerjaan baru;) Ambillah sebagai pelajaran mengapa diperlukan pencadangan. - TomTom
Sepertinya ini seperti trolling bagiku. Anda tidak dapat secara tidak sengaja mengetik - saya-benar-benar-menghapus-seluruh-root saya. - psusi


Jawaban:


Boot ke dalam sistem penyelamatan yang disediakan oleh Hetzner dan periksa kerusakan apa yang telah Anda lakukan.
Transfer semua file ke lokasi yang aman dan pindahkan server setelahnya.

Saya khawatir itu adalah solusi terbaik dalam kasus Anda.


92
2018-04-07 07:00



lihat sisi baiknya, setidaknya dia tidak memiliki masalah dengan heartbleed! - metacom


Faktanya? Pada titik ini, tidak ada perbaikan otomatis yang sederhana / mudah untuk ini. Pemulihan data adalah a ilmu dan bahkan alat dasar dan umum membutuhkan seseorang untuk duduk dan memastikan datanya ada di sana. Jika Anda mengharapkan untuk pulih dari ini tanpa banyak downtime, Anda akan kecewa.

Saya sarankan menggunakan testdisk atau beberapa alat pemulihan khusus sistem file. Coba satu sistem, lihat apakah berfungsi, dan seterusnya. Tidak ada cara nyata untuk mengotomatiskan prosesnya tapi Anda mungkin bisa hati-hati lakukan secara batch.

Meskipun demikian, ada beberapa hal yang sangat menakutkan dalam pertanyaan dan komentar yang seharusnya menjadi bagian dari laporan tindakan Anda setelahnya.

Pertama, Anda menjalankan perintah di mana-mana tanpa memeriksa terlebih dahulu. Jalankan perintah pada satu kotak. Kemudian beberapa, lalu lebih banyak lagi. Pada dasarnya jika ada yang salah, lebih baik memilikinya mempengaruhi beberapa daripada semua sistem Anda.

Kedua

@Tim bagaimana melakukan backup tanpa memasang drive jarak jauh di server?

Membuatku takut. Tingkat file backup satu arah adalah a masalah terpecahkan. Rsync dapat digunakan untuk mempertahankan izin dan menyalin file satu arah ke situs cadangan. Kebetulan sesuatu? Instal ulang (sebaiknya secara otomatis) rsync kembali, dan semuanya berfungsi. Di masa depan, Anda mungkin menggunakan snapshot tingkat sistem file dengan btrfs atau zfs snapshots dan pengiriman mereka untuk backup tingkat sistem. Saya sebenarnya akan bermain-main dengan memisahkan server aplikasi, basis data, dan penyimpanan dan memperkenalkan prinsip hak istimewa paling kecil sehingga Anda akan membagi risiko seperti ini ..

Saya tahu ada yang bisa saya lakukan. Saya sekarang harus berpikir bagaimana melindungi diri sendiri

Setelah sesuatu terjadi adalah waktu terburuk untuk mempertimbangkan ini.

Apa yang bisa kita pelajari dari ini?

  1. Backup menyimpan data. Mungkin karier.
  2. Jika Anda memiliki alat dan tidak sadar jika apa yang dapat dilakukannya, itu berbahaya. Jedi dapat melakukan hal-hal menakjubkan dengan lightsaber. Sebuah ruangan penuh simpanse dengan lightsabers ... akan menjadi berantakan.
  3. Jangan pernah menjalankan perintah di mana saja sekaligus. Memisahkan mesin uji dan produksi, dan lebih disukai melakukan mesin produksi secara bertahap. Lebih baik untuk memperbaiki 1 atau 10 mesin daripada 100 atau 1000.

  4. Perintah periksa ganda dan tripel. Tidak perlu malu meminta rekan kerja untuk memeriksa kembali "Hei, aku akan dd drive, bisakah kamu memeriksa ini jadi aku tidak berakhir menyeka drive?". Sebuah pembungkus mungkin membantu juga, tetapi tidak ada yang mengalahkan sepasang mata yang kurang lelah.

Apa yang bisa kamu lakukan sekarang? Dapatkan email kepada pelanggan. Biarkan mereka tahu ada downtime dan ada kegagalan katastrofik. Bicaralah dengan atasan Anda, legal, penjualan dan semacamnya dan lihat bagaimana Anda dapat mengurangi kerusakan. Mulailah merencanakan untuk pemulihan, dan jika perlu Anda harus, paling banter, menyewa tangan ekstra. Paling buruk, rencana untuk menghabiskan banyak uang untuk pemulihan. Pada tahap ini, Anda akan bekerja untuk mengurangi jatuhnya serta perbaikan teknis.


219
2018-04-11 08:02



@MarcoMarsala Jika Anda memasang sesuatu sebelum menggunakan rsync, Anda tidak melakukannya dengan benar. Anda seharusnya menggunakan rsync melalui ssh. - Michael Hampton♦
Saya akan menambah jawaban yang luar biasa ini: Langkah menjauh dari komputer. Jangan mencoba memperbaiki apa pun sampai Anda tenang. Anda sudah melihat beberapa downtime yang serius; meluangkan waktu untuk memikirkan berbagai hal, alih-alih merusak sistem Anda bahkan lebih lagi (seperti pada dd masalah di atas) tidak akan membuatnya lebih buruk. - Jenny D
Ada yang tahu mengapa perintah itu benar-benar berjalan? Jika $foodan $bar keduanya tidak terdefinisi, rm -rf / harus memiliki 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 untuk *, jadi apa yang dijalankan itu rm -rf /*. - terdon
Saya suka stylism di "Kebetulan sesuatu?". Itu berarti kata "dihapus" itu "dihapus" atau "dijatuhkan" tanpa sengaja. - sehe
@MarcoMarsala baik setidaknya Anda sudah terkenal sekarang independent.co.uk/life-style/gadgets-and-tech/news/… - Martin Smith


Saat Anda menghapus barang dengan rm -rf --no-preserve-root, hampir mustahil untuk pulih. Kemungkinan besar Anda telah kehilangan semua file penting.

Sebagai @pemalsu mengatakan dalam jawabannya, tindakan terbaik adalah mentransfer file ke lokasi yang aman dan memindahkan server setelahnya.

Untuk menghindari situasi serupa di masa depan, saya sarankan Anda:

  • Ambil cadangan mingguan, atau setidaknya dua minggu sekali. Ini akan membantu Anda mendapatkan layanan yang terpengaruh, kembali dengan MTTR yang paling mungkin.

  • Jangan bekerja sebagai root jika tidak diperlukan. Dan selalu berpikir dua kali sebelum melakukan sesuatu. Saya sarankan Anda juga menginstal aman-rm.

  • Jangan ketik opsi yang tidak ingin Anda panggil, seperti --no-preserve-root atau --permission-to-kill-kittens-explicitly-granted, untuk masalah itu.


90
2018-04-07 07:57



Demikian pula, kecuali Anda BENAR-BENAR BERARTI, jangan tambahkan --please-destroy-my-drive parameter ke hdparm. - MikeyB
Saya ingin menambahkan; "Periksa kembali argumen Anda (dan opsi) saat bekerja sebagai root", "Periksa CurrentWorkingDirectory Anda (sebelum melakukan sesuatu seperti rm -rf *)", dan "Gunakan jalur penuh ke perintah (jangan nyalakan $ PATH). - Baard Kopperud


Saya memiliki masalah yang sama tetapi hanya menguji dengan harddisk, saya telah kehilangan segalanya. Saya tidak tahu apakah itu akan berguna, tetapi jangan menginstal apa pun, jangan menimpa data Anda, Anda perlu memasang hard drive 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.


47
2018-04-11 08:17



Saya pasti akan merekomendasikan takign penyimpanan offline jika mungkin dan pemasangan ulang sebagai 'read only' jika Anda bisa sama sekali. Entah dengan liveisk atau contoh server lain. - mhouston100
Saya bahkan mempertimbangkan untuk melakukan bitcopy dd dari disk asli ke disk baru dari mount hanya-baca dari disk asli hanya agar aman. - Jim
«Alat-alat ini tidak akan memulihkan nama file dan jalur» Ya, mereka lakukan. Dari 3 alat yang disebutkan, hanya satu (Photorec) yang melakukan pahatan. - Andrea Lazzarotto


Cara terbaik untuk memperbaiki masalah seperti ini adalah tidak memilikinya di tempat pertama.

Jangan secara manual memasukkan perintah "rm -rf" yang memiliki garis miring dalam daftar argumen. (Menempatkan perintah seperti itu dalam skrip shell dengan rutinitas validasi / kewarasan yang benar-benar baik untuk melindungi Anda dari melakukan sesuatu yang bodoh berbeda.)

Tapi jangan lakukan itu.
Pernah. Jika Anda berpikir Anda perlu melakukannya, Anda tidak berpikir cukup keras.

Sebagai gantinya, ubah direktori kerja Anda ke induk direktori yang Anda maksud untuk memulai penghapusan, sehingga target perintah rm tidak memerlukan slash:

cd / mnt

sudo rm -rf hetznerbackup


33
2018-04-07 21:22



Saya selalu meletakkan -rf di akhir daftar argumen, jadi rm /bla/foo/bar -rf. Setidaknya dengan cara itu saya tidak mengalami banyak masalah ketika saya dengan senang hati tekan kembali setelah mengetik rm / bagian. - Jens Timmerman
Demikian pula, ketika menghapus file "* ~", saya mengetik tilde terlebih dahulu, lalu menambahkan tanda bintang. - tekknolagi
Jadi Anda lebih suka menghapus rumah Anda daripada segala sesuatu di direktori saat ini?!? - greg0ire
@ greg0ire Tidak, saya pikir dia ingin mengatakan, bahwa di dalam /mnt/hetznerbackup, dia harus menggunakan "/" untuk menandai semua yang ada di dalam folder itu .. tapi dari orang tua, saja hetznerbackup sudah cukup, tanpa tebasan. - T.Todua
@tazotodua: Saya mengacu pada komentar tekknolagi - greg0ire


Saya akan mencoba memulihkan mesin cadangan, tempat semua salinan disimpan:

  • Langkah pertama - Buat cadangan dari drive "mesin pencadangan" terhapus ini dengan dd perintah.
  • Langkah 2 - Gunakan testdisk untuk memulihkan file.

Jadi katakanlah Anda ingin memulihkan 1TB, Anda akan membutuhkan tambahan 2TB, 1TB untuk cadangan (langkah 1) ditambah 1TB untuk pemulihan (langkah ke-2).

Saya melakukan kesalahan serupa dengan alias rm -fr [telepon berdering] dan cd ke direktori yang berharga. Sekarang saya selalu berpikir dua kali dan mengecek kembali beberapa kali sebelum saya menggunakan perintah rm atau dd.


16
2018-04-11 00:32



Cukup banyak mem-flash disk Anda dengan melakukan itu. Itu serius membuatnya lebih sulit untuk pulih. Ada alasan yang baik OP menyarankan Anda mencoba menggunakan testdisk, dan memulihkan yang pertama, dan sementara sintaks dd dapat sedikit aneh, itu alasan yang bagus untuk memeriksa dua dan tiga kali sebelum Anda menjalankan perintah. Anda hanya menghapus satu server, bukan? - Journeyman Geek
Anda masih dapat memulihkan, tergantung berapa lama Anda mengizinkan dd untuk menghapus kesempatan terakhirmu. - Abc Xyz
maaf untuk mengatakan itu, tapi aku merasa troll besar dalam pertanyaan ini ... - tymik
harap kamu merasakan troll kecil di jawabannya :) - Abc Xyz
Sejujurnya. Saya tidak yakin Anda nyata. Jika Anda, Anda mungkin di pekerjaan yang salah ... - leftcase


Seperti disebutkan dalam jawaban lain, Hetzner memiliki sistem penyelamatan. Ini mencakup opsi netboot dengan akses ssh serta applet java untuk memberi Anda layar dan keyboard pada vserver Anda.

Jika Anda ingin memulihkan sebanyak mungkin, reboot server ke sistem netboot dan kemudian masuk dan unduh gambar sistem file dengan membaca dari inode perangkat yang sesuai.

Saya pikir hal seperti ini seharusnya berfungsi:

ssh root@host cat /dev/sda > server.img

Tentu saja redirection dilakukan oleh shell sebelum perintah ssh dipanggil, jadi server.img adalah file lokal. Jika Anda hanya menginginkan sistem file root dan bukan disk penuh, ganti sda oleh sda3 dengan asumsi Anda menggunakan gambar yang sama dengan saya.


7
2018-04-07 07:54



mungkin bisa jadi: ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz (Gzip on-the-fly akan atau tidak akan membantu tergantung pada apa isi dari filesystem adalah ...) - Olivier Dulac
@OlivierDulac Menggunakan gzip dengan cara itu akan mengirim data tanpa terkompresi melalui jaringan dan kemudian mengompresnya di sisi penerima. Saya berasumsi hasil yang ingin Anda capai adalah untuk mengompresi data saat sedang ditransfer. Gambar lokal dapat disimpan dikompresi atau tidak, tetapi alat yang ingin Anda terapkan pada gambar itu nantinya tidak akan berfungsi dengan versi terkompresi. Jika semua yang ingin Anda capai adalah kompresi data saat transit, Anda dapat menggunakan fitur kompresi dalam ssh. Ini dapat diaktifkan dengan -Cjika belum diaktifkan dalam konfigurasi Anda. - kasperd
Saya lebih berusaha mengurangi ukuran file. Tetapi jika Anda ingin menghemat bandwidth (ide bagus): tambahkan saja kutipan: ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz (opsi -c dari ssh biasanya bagus juga, tetapi Anda masih perlu kompres di bagian akhir, karena ssh hanya akan mengkompres di pintu masuk terowongan dan membuka kompresi sebelum mengirim ke stdout) - Olivier Dulac


Bagaimana Anda akan bergerak maju dari sini?

Saya akan bersumpah menggunakan rm selama sisa hidup saya dan berpikir bahwa itu kegilaan bahwa sampah-cli bukanlah 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 digunakan trash-cli sebagai gantinya. Ini juga akan mencakup catatan tentang alias lain yang benar-benar berjalan /bin/rm tetapi mengatakan kepada mereka untuk menghindari menggunakannya dalam banyak kasus.

:( Kisah nyata


2
2018-04-15 09:51



Menurut pengalaman saya, alat semacam ini lebih seperti gangguan daripada bantuan yang sebenarnya - cepat atau lambat, dan setelah beberapa kali bersumpah, Anda akan menghapusnya. Mungkin ok untuk workstation, tetapi dalam banyak jika tidak kebanyakan situasi ketika Anda melakukan pekerjaan administratif pada server, Anda benar-benar perlu untuk menghapus data, bukan hanya memindahkannya ke tempat lain (dan jika itu terjadi, cukup gunakan mv sebagai gantinya). Selain itu, memindahkan data secara otomatis ke folder sampah dapat menyebabkan masalah serius dengan sendirinya (misalnya sampah tidak pada sistem file, keamanan yang sama). - maetthu
@maetthu Oh tentu saja hal-hal dihapus setelah mereka berada di tempat sampah selama beberapa hari. Desktop Ubuntu melakukan ini untuk barang-barang yang telah berada di tempat sampah lebih dari 30 hari. Pada server Anda mungkin menginginkan sesuatu yang lebih pendek, misalnya. trash-empty 5 dalam sebuah cron. Intinya adalah untuk memungkinkan Anda beberapa masa tenggang karena manusia melakukan kesalahan. - Gerry
Bukankah lebih baik untuk memiliki rencana pemulihan-pemulihan kerja daripada melarang alat-alat sistem yang penting? - user292812
@ user292812 Saya tidak menyarankan banning / bin / rm, hanya saja seharusnya tidak menjadi pilihan pertama dalam banyak kasus (perhatikan alias / bin / rm). Pertanyaan Anda juga menunjukkan pilihan yang salah antara pemulihan bencana dan opsi penghapusan ramah manusia. Anda harus memiliki keduanya. - Gerry
Proses penghapusan dua langkah dapat menghemat banyak masalah: 1. pindah ke sampah (secara verbosely), 2. sampah kosong. Saya alias skrip seperti itu ke "rm" dan itu telah menyelamatkan saya dari tidak sengaja menghapus hal-hal penting berkali-kali. - Sam Watkins