Soru Pazartesi sabahı hata: sudo rm -rf --no-preserve-root /


Lütfen dikkat: Bu soruya verilen cevaplar ve yorumlar, dış ortamlardan çok fazla ilgi gören ancak bir tür viral pazarlama planında aldatıcı bir soru olarak ortaya çıkan benzer soruların içeriğini içeriyor. ServerFault'un bu şekilde kötüye kullanılmasına izin vermediğinden, orijinal soru silindi ve yanıtlar bu soruyla birleştirildi.


İşte eğlenceli bir trajedi. Bu sabah, yanlışlıkla aşağıdaki komutu yürüttüğümde, üretim sunucumda biraz bakım yapıyordum:

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

Daha önce son boşluğu görmedim / ve birkaç saniye sonra, uyarılar komut satırımın suya düştüğü anda, kendimi yok etme düğmesine bastığımı fark ettim. İşte gözlerimin içine ne yaktı?

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..

Görevini durdurdum ve üretim hizmetinin hala devam ettiğini keşfettiğimde rahatladım. Ne yazık ki, sunucu artık SSH aracılığıyla herhangi bir kullanıcı için genel anahtarımı veya şifremi kabul etmiyor.

Buradan nasıl ilerleyeceksin? SSH erişimini geri almak için dikenli tel okyanusuyla yüzeceğim.

Sunucu Ubuntu-12.04 çalışıyor ve Hetzner'de barındırılıyor.


142
2018-04-07 06:39


Menşei


Yedeklerden geri yükle. Dürüst olmak gerekirse, bu kolay olmayan geri dönüş senaryolarından biridir. - MadHatter
Sen nasıl yazıyorsun --no-preserve-root yanlışlıkla ?! :-O - ThatGraemeGuy
Greame, anahtarlar yan yana. - MadHatter
Salı çalışması: Yeni iş aramak;) Yedeklemenin neden gerekli olduğunun bir dersi olarak alın. - TomTom
Bu kesinlikle bana trolling gibi görünüyor. Yanlışlıkla -i-gerçekten-demek-sil-tam-root'um yazamazsınız. - psusi


Cevaplar:


Hetzner tarafından sağlanan kurtarma sistemine sürün ve yaptığınız hasarı kontrol edin.
Herhangi bir dosyayı güvenli bir yere aktarın ve sunucuyu daha sonra yeniden dağıtın.

Korkarım ki bu senin durumundaki en iyi çözüm.


92
2018-04-07 07:00



parlak tarafa bak, en azından kalp atışlarıyla problemi yok! - metacom


Gerçek? Bu noktada, bunun için basit / kolay otomatik düzeltme yoktur. Veri kurtarma bir Bilim ve hatta temel, ortak araçların birilerinin oturması ve verilerin var olduğundan emin olması gerekir. Bu süreden muazzam bir kesinti olmadan kurtarmayı bekliyorsanız, hayal kırıklığına uğrayacaksınız.

Testdisk kullanmanı öneririm veya bazı dosya sistemi özel kurtarma aracı. Bir sistemi deneyin, işe yarayıp yaramadığını görün. Süreci otomatik hale getirmenin gerçek bir yolu yok. fakat muhtemelen dikkatlice toplu olarak yapın.

Bununla birlikte, eylem sonrası raporlarınızın bir parçası olması gereken sorular ve yorumlarda birkaç çok korkutucu şey var.

Öncelikle, önce kontrolü kontrol etmeden her yerde koştun. Bir kutuda bir komut çalıştırın. Sonra birkaç, sonra daha fazla. Temel olarak bir şeyler yanlış giderse, bir az tüm sistemlerden ziyade.

ikinci olarak

@Tim bir uzak sürücüyü sunucuya takmadan nasıl yedekleme yapılır?

Beni korkutuyor. Dosya seviyesi tek yönlü yedeklemeler bir çözülmüş problem. Rsync izinleri korumak ve dosyaları kopyalamak için kullanılabilir tek yön bir yedek siteye. Yanlışlıkla bir şey mi? Yeniden (tercihen otomatik olarak) rsync'i geri takın ve işler çalışır. Gelecekte, btrfs veya zfs anlık görüntüleri ile dosya sistemi düzeyindeki anlık görüntüleri kullanabilir ve sistem düzeyinde yedeklemeler için bunları gönderebilirsiniz. Aslında uygulama sunucularını, veritabanlarını ve depolamayı ayırarak oyuncak yapıyorum ve en az ayrıcalık ilkesini getirdim, böylece böyle bir şeyin riskini bölebilirdiniz.

Yapabileceğim bir şey olduğunu biliyorum. Şimdi kendimi nasıl koruyacağımı düşünmeliyim

Bir şey olduğunda, bunu düşünmek için en kötü zaman.

Bundan ne öğrenebiliriz?

  1. Yedeklemeler verileri kaydeder. Muhtemelen kariyer.
  2. Eğer bir aracınız varsa ve ne yapabileceğinin farkında değilse, tehlikeli. Bir jedi ışın kılıcıyla inanılmaz şeyler yapabilir. Işık kılıcı olan şempanzeler ... dağınık olur.
  3. Hemen her yerde bir komut çalıştırmayın. Test ve üretim makinelerini ayırın ve tercihen üretim makinelerini kademeli olarak yapın. 100 veya 1000 yerine 1 veya 10 makineyi düzeltmek daha iyidir.

  4. Çift ve üçlü kontrol komutları. Bir işçiden iki kez kontrol etmesini istemekte utanılacak bir şey yok "hey, ben bir sürücüye gitmek üzereyim, aklımı kontrol edeyim, bu yüzden bir sürücüyü silmemem?" Bir sarıcı da işe yarayabilir, ancak hiçbir şey daha az yorgun gözlere çarpmaz.

Şimdi ne yapabilirsin? Müşterilere bir e-posta alın. Durma zamanı olduğunu söyleyin ve felaket hataları var. Daha yüksek seviyelere, yasal satışlara, satışlara ve benzeri şeylerle konuşun ve hasarı nasıl azaltabileceğinizi görün. İyileştirme için planlamaya başlayın ve gerekirse, daha fazla elinizi almak zorunda kalacaksınız. En kötüsü, iyileşme için çok para harcamayı planla. Bu aşamada, teknik düzeltmelerin yanı sıra, düşüşü hafifletmek için de çalışacaksınız.


219
2018-04-11 08:02



@MarcoMarsala Eğer rsync kullanmadan önce bir şey monte ettiyseniz, doğru bir şekilde yapmıyordunuz. Ssh üzerinde rsync kullanmalısınız. - Michael Hampton♦
Bu mükemmel cevabı ekledim: Bilgisayardan uzak dur. Sakinleşene kadar hiçbir şeyi tamir etmeye çalışmayın. Zaten ciddi bir kesinti süresine bakıyorsunuz; sistemlerinizi daha fazla yıkmak yerine, bir şeyler düşünmek için zaman ayırmak dd Yukarıdaki sorun) daha da kötüleştirmeyecek. - Jenny D
Komutun neden gerçekte kaçtığı hakkında bir fikrin var mı? Eğer $foo ve $bar her ikisi de tanımlanmamıştı rm -rf / ile erimiş olmalı --no-preserve-root mesaj. Bunun bir CentOS7 makinesinde çalışacağını düşünebilmemin tek yolu, eğer $bar değerlendirmek *, yani kaçtı rm -rf /*. - terdon
"Yanlışlıkla bir şeyde" stilizmi seviyorum. Bu, "kaldırılmış" kelimesinin yanlışlıkla "silinmiş" veya "düşürülmüş" olduğu anlamına gelmelidir. - sehe
@MarcoMarsala, en azından şu anda çok meşhursun independent.co.uk/life-style/gadgets-and-tech/news/... - Martin Smith


İle sildiğinizde rm -rf --no-preserve-root, onun hemen hemen iyileşmesi imkansız. Tüm önemli dosyaları kaybetmiş olmanız çok muhtemeldir.

Gibi @faker cevabında, eylemin en iyi yolu dosyaları güvenli bir yere aktarmak ve sunucuyu daha sonra yeniden dağıtmak olduğunu söyledi.

Gelecekte benzer durumlardan kaçınmak için size şunu öneririm:

  • Yedekleri al Haftalık veya en az iki haftada bir. Bu etkilenen hizmeti mümkün olan en az MTTR ile geri almanıza yardımcı olur.

  • Gerekli olmadığında root olarak çalışma. Ve her zaman bir şey yapmadan önce iki kez düşünün. Ayrıca yüklemenizi öneririm güvenli rm.

  • Çağırmak istemediğiniz seçenekleri yazmayın., gibi --no-preserve-root veya --permission-to-kill-kittens-explicitly-granted, bu konuda.


90
2018-04-07 07:57



Benzer şekilde, GERÇEKTEN ANLAMIYORSANIZ, --please-destroy-my-drive parametresi hdparm. - MikeyB
Eklemek istiyorum; "Kök olarak çalışırken argümanlarınızı (ve seçeneklerinizi) üç kez kontrol edin", "CurrentWorkingDirectory öğenizi kontrol edin (rm -rf gibi bir şey yapmadan önce *)", ve "Komutlara tam yollar kullan ($ PATH üzerinde geçiş yapma). - Baard Kopperud


Aynı sorunu yaşadım ama sadece bir sabit sürücü ile test ettim, her şeyimi kaybettim. Faydalı olup olmayacağını bilmiyorum ama hiçbir şey yüklemeyin, verilerinizin üzerine yazmasabit disklerinizi monte etmeli ve otopsi, fotorec, Testdisk gibi bazı adli tıp araçlarını çalıştırmalısınız.

Testdisk'i tavsiye ederim, bazı temel komutlar ile verilerinizi kurtaramazsanız verilerinizi kurtarabilirsiniz.


47
2018-04-11 08:17



Kesinlikle mümkün ise depolama depolama çevrimdışı tavsiye ve hiç 'eğer' sadece 'olarak yeniden montaj tavsiye ederim. Bir livedisk veya başka bir sunucu örneği ile olsun. - mhouston100
Orijinal diskin dd bir kopyasını, sadece güvenli olması için orijinal diskin salt okunur bir yuvasından yeni bir diske almayı bile düşünebilirim. - Jim
«Bu araçlar dosya adını ve yolunu kurtaramaz» Evet, yaparlar. Bahsedilen 3 araçtan sadece bir tanesi (Photorec) oyma işlemini gerçekleştirir. - Andrea Lazzarotto


Böyle bir sorunu düzeltmenin en iyi yolu, ilk etapta olmamaktır.

Bağımsız değişken listesinde bir eğik çizgi olan "rm -rf" komutunu elle girmeyin. (Aptalca bir şey yapmanı önlemek için gerçekten iyi bir doğrulama / akıl yürütme rutinleri olan bir kabuk betiğinde bu komutları koymak farklıdır.)

Sadece yapma.
Hiç. Eğer bunu yapman gerektiğini düşünüyorsan, yeterince düşünmüyorsun.

Bunun yerine, çalışma dizini kaldırma işlemini başlatmayı amaçladığınız dizinin ana öğesine değiştirin, böylece rm komutunun hedefi eğik çizgi gerektirmez:

cd / mnt

sudo rm -rf Instagram Hesabındaki Resim ve Videoları hetznerbackup


33
2018-04-07 21:22



Ben her zaman argüman listesinin sonuna -rf koyuyorum rm /bla/foo/bar -rf. En azından bu şekilde, yazarak yazdıktan sonra geri dönüşe bastığımda çok fazla sorun yaşamıyorum. rm / Bölüm. - Jens Timmerman
Benzer şekilde, "* ~" dosyalarını kaldırırken, önce tilde'yi yazıp yıldız işaretini ekledim. - tekknolagi
Yani evinizi geçerli dizindeki her şeyden daha mı silmek istiyorsunuz? - greg0ire
@ greg0ire Hayır, sanırım söylemek istedim, o içinde /mnt/hetznerbackupBu klasördeki her şeyi işaretlemek için "/" kullanması gerekiyordu. hetznerbackup kesiksiz, yeterlidir. - T.Todua
@tazotodua: Tekknolagi'nin yorumuna atıfta bulundum - greg0ire


Tüm kopyaların saklandığı yedek makineyi kurtarmayı denerdim:

  • 1. adım - Bu silinen "yedekleme makinesi" sürücülerinin yedeğini alın dd COMAND.
  • 2. adım - Kullanım testdisk dosyaları kurtarmak için.

Yani, 1TB'yi kurtarmak istediğinizi söyleyelim, yedekleme için 2TB, 1TB'ye ihtiyacınız olacak (1. adım) artı kurtarma için 1TB'ye ihtiyacınız olacak (2. adım).

Benzer rm -fr [telefon çaldı] ve cd ile değerli dizine benzer bir hata yaptım. Şimdi her zaman iki kez düşünün ve rm veya dd komutunu kullanmadan önce birkaç kez tekrar kontrol edin.


16
2018-04-11 00:32



Bunu yaparak diskinizi hemen hemen sıfırladı. Bu ciddi olarak iyileşmesi çok daha zor hale getirir. OP'nin testdisk kullanarak denemenizi önerdiğini ve ilkini kurtarmanın iyi bir nedeni var, ve dd'nin sözdizimi biraz tuhaf olsa da, komutu çalıştırmadan önce iki kez ve üç kez kontrol etmek için iyi bir sebep. Sadece bir sunucuyu sildin, değil mi? - Journeyman Geek
Hala iyileşebilirsin, ne kadar süre izin verdin dd son şansını silmek için. - Abc Xyz
Bunu söylediğim için üzgünüm, ama bu soruda büyük bir trol hissediyorum. - tymik
umarım cevapta küçük bir trol hissedersiniz :) - Abc Xyz
Dürüst olmak gerekirse. Gerçek olduğuna emin değilim. Eğer öyleysen, muhtemelen yanlış işte olursun ... - leftcase


Bir başka cevapta da belirtildiği gibi, Hetzner bir kurtarma sistemine sahiptir. Ssh erişimi ile birlikte netboot seçeneği ve vserver'inize ekran ve klavye vermek için bir java uygulaması içerir.

Mümkün olduğu kadar iyileşmek istiyorsanız, sunucuyu netboot sistemine yeniden başlatın ve ardından uygun cihaz inode'undan okuyarak dosya sisteminin bir görüntüsünü indirin ve indirin.

Bunun gibi bir şey çalışması gerektiğini düşünüyorum:

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

Tabii ki, yönlendirme ssh komutu çağrılmadan önce kabuk tarafından yapılır, bu yüzden server.img yerel bir dosyadır. Yalnızca kök dosya sistemini ve tam diski istemiyorsanız, yerine sda tarafından sda3 Benimle aynı görüntüyü kullandığınızı varsayarak.


7
2018-04-07 07:54



belki olabilir: ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz (Anında gzip dosya sisteminin içeriğine bağlı olarak yardımcı olur veya yardımcı olmaz ...) - Olivier Dulac
@OlivierDulac Bu şekilde gzip kullanarak ağ üzerinden sıkıştırılmamış verileri gönderir ve daha sonra alıcı tarafına sıkıştırır. Elde etmeyi düşündüğünüz sonuç, aktarılırken verileri sıkıştırmaktı. Yerel görüntü sıkıştırılmış olarak saklanabilir veya saklanamaz, ancak daha sonra bu resme uygulamak istediğiniz araçlar sıkıştırılmış sürümle çalışmaz. Tek yapmanız gereken, aktarım sırasında verinin sıkıştırılmasıysa, ssh. İle etkinleştirilebilir -C yapılandırmanızda zaten etkin değilse. - kasperd
Dosya boyutunu küçültmeye çalışıyorum. Ancak bant genişliğini (iyi fikir) kaydetmek istiyorsanız: sadece teklifleri ekleyin: ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz (ssh'in -c seçeneği de genellikle iyidir, ancak ssh sadece tünelin girişinde sıkışacak ve stdout'a gönderilmeden önce sıkıştırılacaktır) sonunda sıkıştırmanız gerekir. - Olivier Dulac


Buradan nasıl ilerleyeceksin?

Kullanarak küfür ederim rm Hayatımın geri kalanı için ve bu çöpün nix sistemlerinde varsayılan kaldırma komutu olmayan çılgınlık olduğunu düşünün.

https://github.com/andreafrancia/trash-cli

Yepyeni bir sisteme kurduğum ilk şey olduğundan emin olurum ve alias rm İnsanların kullanmasını söyleyen bir şeye trash-cli yerine. Ayrıca, aslında çalışan başka bir takma adla ilgili bir not da içerir /bin/rm ama çoğu durumda bunları kullanmaktan kaçınmasını söyler.

:( Gerçek hikaye


2
2018-04-15 09:51



Tecrübemde, bu tür araçlar gerçek bir yardımdan ziyade bir rahatsızlık gibidir - er ya da geç ve bazı küfürlerden sonra onu kaldıracaksınız. Bir iş istasyonu için uygun olabilir, ancak çoğu durumda, bir sunucu üzerinde yönetimsel çalışma yaparken çoğu durumda, verileri gerçekten silmek gerekir, sadece başka bir yere taşımak değil (ve eğer durum buysa, sadece mv kullanın yerine). Ayrıca, verileri bir çöp kutusuna otomatik olarak taşımak, kendi başına ciddi sorunlara yol açabilir (örn. Aynı dosya sisteminde olmayan güvenlik, güvenlik). - maetthu
@maetthu Elbette, belli bir süre boyunca çöp kutusuna girdikten sonra işler ortadan kaldırılır. Ubuntu masaüstü, bunu 30 günden uzun bir sürede çöp kutusuna götüren öğelere yapar. Bir sunucuda, örneğin daha kısa bir şey isteyebilirsiniz. trash-empty 5 bir cronda. Buradaki nokta, size bazı hatalar yaşatmaktır çünkü insanlar hata yapar. - Gerry
Temel sistem araçlarını yasaklamak yerine çalışan bir desaster kurtarma planına sahip olmak daha iyi olmaz mı? - user292812
@ user292812 Banning / bin / rm önermedim, sadece çoğu durumda ilk seçenek olmamalı (/ bin / rm alias). Sorunuz ayrıca felaket kurtarma ve insan dostu bir silme seçeneği arasında yanlış bir seçim önerir. İkisine de sahip olmalısın. - Gerry
İki aşamalı bir kaldırma işlemi çok fazla sorun yaratabilir: 1. çöp kutusuna (ayrıntılı), 2. boş çöp kutusuna taşıyın. Ben "rm" için bir senaryoyu takma ve yanlışlıkla birçok kez yanlışlıkla önemli şeyleri silmekten kurtardı. - Sam Watkins


Böyle bir durumda tavsiye ederim debugfsve yardımıyla lsdel Son zamanlarda çıkarılmış olan ve dergilerden temizlenmeyen tüm dosyaları listeleyebilirsiniz. çöplük gerekli dosyalar. Aynı hızlı arama bağlantısı: http://www.linuxvoodoo.com/resources/howtos/debugfs 

Umarım birisine yardım eder. ;)

Ve evet, önerilerinden biri, senaryoyu hareket ettiren senaryo yapmaktır. rm için real.rm ve symlinc mv için rm ;)


1
2018-04-18 14:46





Tüm sunucu işlemlerini ve disk i / o'suna neden olabilecek her şeyi durdurun ... sonra testdisk'i çalıştırın, yazılım kümenizde olmalıdır. Fiziksel erişiminiz varsa, testdisk ile bir livecd kullanın.


-2
2018-04-17 17:35



Tam olarak aynı öneriyi sağlayan üç cevabın neden yeterli olmadığını düşündüğünüzü anlamıyorum. - kasperd