سؤال خطأ صباح الاثنين: sudo rm -rf - لا يحتفظ-الجذر /


يرجى ملاحظة: تحتوي الإجابات والتعليقات على هذا السؤال على محتوى من سؤال آخر مماثل حصل على الكثير من الاهتمام من وسائل الإعلام الخارجية ، لكن تبين أنه كان سؤالًا خادعًا في نوع ما من نظام التسويق الفيروسي. بما أننا لا نسمح بإساءة استخدام ServerFault بهذه الطريقة ، فقد تم حذف السؤال الأصلي وتم دمج الإجابات مع هذا السؤال.


وهنا مأساة مسلية. هذا الصباح كنت أقوم ببعض الصيانة على خادم الإنتاج الخاص بي ، عندما قمت بتنفيذ الأمر التالي عن طريق الخطأ:

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

لم أكن حددت الفضاء الأخير من قبل / وبعد ثوان قليلة ، عندما غمرت التحذيرات سطر الأوامر الخاص بي ، أدركت أنني قد ضربت زر التدمير الذاتي للتو. إليكم قليلاً مما أحرق في عيني:

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

أوقفت المهمة وتمت إعجابي عندما اكتشفت أن خدمة الإنتاج لا تزال قيد التشغيل. للأسف ، لم يعد الخادم يقبل مفتاحي العام أو كلمة المرور لأي مستخدم عبر SSH.

كيف ستتقدم من هنا؟ سأسبح محيط من الأسلاك الشائكة للحصول على وصول SSH.

يعمل الخادم بنظام Ubuntu-12.04 ويتم استضافته في Hetzner.


142
2018-04-07 06:39


الأصل


استعادة من النسخ الاحتياطية. بصراحة ، هذا هو واحد من تلك السيناريوهات التي لا توجد طريقة سهلة للخلف. - MadHatter
كيف تكتب حتى --no-preserve-root بالصدفة ؟! : -o - ThatGraemeGuy
Greame ، تشبه المفاتيح بجانب بعضها البعض. - MadHatter
عمل الثلاثاء: ابحث عن وظيفة جديدة ؛) اعتبرها درسا لماذا هناك حاجة النسخ الاحتياطية. - TomTom
يبدو هذا بالتأكيد مثل التصيد لي. لا يمكنك بطريق الخطأ نوع -i-really-mean-delete-my-whole-root. - psusi


الأجوبة:


التمهيد في نظام الإنقاذ التي قدمها Hetzner والتحقق من الضرر الذي قمت به.
نقل أي ملفات إلى موقع آمن وإعادة نشر الخادم بعد ذلك.

أخشى أن هذا هو الحل الأفضل في قضيتك.


92
2018-04-07 07:00



نظرة على الجانب المشرق ، على الأقل لديه أي مشاكل مع heartbleed! - metacom


الحقيقة هي؟ في هذه المرحلة ، لا يوجد أي إصلاح تلقائي بسيط / سهل لهذا الغرض. استعادة البيانات هو علم وحتى الأدوات الأساسية والشائعة تحتاج إلى شخص ما للجلوس والتأكد من وجود البيانات. إذا كنت تتوقع أن تتعافى من هذا دون وجود كميات هائلة من التوقف ، فستشعر بخيبة أمل.

أقترح استخدام testdisk أو بعض أداة استعادة نظام الملفات المحدد. جرب نظامًا واحدًا ، واعرف ما إذا كان يعمل ، وما إلى ذلك. لا توجد طريقة حقيقية لأتمتة العملية لكن يمكنك على الارجح بحرص تفعل ذلك على دفعات.

ومع ذلك ، هناك بعض الأمور المخيفة جدًا في الأسئلة والتعليقات التي يجب أن تكون جزءًا من تقارير ما بعد التصرف.

أولاً ، قمت بتشغيل الأمر في كل مكان دون التحقق منه أولاً. قم بتشغيل أمر في مربع واحد. ثم عدد قليل ، ثم أكثر من ذلك. أساسا إذا حدث خطأ ما ، فمن الأفضل أن يكون لها تأثير على قليل بدلا من جميع أنظمتك.

ثانيا

@ كيف نفعل النسخ الاحتياطي دون تركيب محرك أقراص بعيد على الخادم؟

يخيفني. الملف على مستوى واحد النسخ الاحتياطي هي أ تحل المشكلة. يمكن استخدام Rsync للحفاظ على الأذونات والنسخ على الملفات اتجاه واحد إلى موقع النسخ الاحتياطي. بالصدفة شيء ما؟ إعادة تثبيت (ويفضل تلقائيا) rsync مرة أخرى ، وأشياء تعمل. في المستقبل ، قد تستخدم لقطات على مستوى نظام الملفات مع btrfs أو لقطات ZFS وتحميل تلك النسخ الاحتياطية على مستوى النظام. كنت فعلا لعبة مع فصل ملقمات التطبيقات وقواعد البيانات والتخزين وإدخال مبدأ الأقل امتياز حتى يمكنك تقسيم خطر شيء من هذا القبيل ..

أعلم أن هناك أي شيء يمكنني القيام به. أنا الآن بحاجة إلى التفكير في كيفية حماية نفسي

بعد حدوث شيء ما هو أسوأ وقت للنظر في هذا.

ماذا يمكننا أن نتعلم من هذا؟

  1. النسخ الاحتياطي حفظ البيانات. ربما وظائف.
  2. إذا كان لديك أداة ولا تدرك ما إذا كان بإمكانها فعل ذلك ، فهذا أمر خطير. يمكن للجادي القيام بأشياء مذهلة باستخدام السيف الضوئي. غرفة من الشمبانزي مع الأضواء الساطعة ... ستصاب بالفوضى.
  3. أبدا تشغيل أمر في كل مكان في وقت واحد. فصل آلات الاختبار والإنتاج ، ويفضل عمل آلات الإنتاج على مراحل. من الأفضل إصلاح 1 أو 10 آلات بدلاً من 100 أو 1000.

  4. أوامر تحقق مزدوجة وثلاثية. ليس هناك من عار في أن تطلب من العامل المشترك أن يتأكد مرة أخرى "مهلا ، أنا على وشك أن أذهب إلى محرك الأقراص ، هل يمكن أن تتحقق من صحة هذا الأمر حتى لا ينتهي بك الأمر إلى مسح محرك الأقراص؟". قد يساعد الغلاف أيضًا ، ولكن لا شيء يضاهي مجموعة العيون الأقل تعباً.

ماذا تستطيع ان تفعل الان؟ الحصول على بريد إلكتروني للعملاء. دعهم يعرفون أن هناك وقت توقف وهناك إخفاقات كارثية. تحدث إلى أعلى المستويات القانونية والمبيعات ومثلها وشاهد كيف يمكنك التخفيف من الضرر. ابدأ التخطيط للانتعاش ، وإذا لزم الأمر ، سيكون عليك ، في أحسن الأحوال ، توظيف مزيد من الأيدي. في أسوأ الأحوال ، تخطط لإنفاق الكثير من المال على الانتعاش. في هذه المرحلة ، ستعمل على التخفيف من حدة التساقط بالإضافة إلى الإصلاحات الفنية.


219
2018-04-11 08:02



MarcoMarsala إذا قمت بتثبيت أي شيء قبل استخدام rsync ، فأنت لم تقم بذلك بشكل صحيح. يجب أن تستخدم rsync عبر ssh. - Michael Hampton♦
سأضيف إلى هذه الإجابة الممتازة: ابتعد عن الكمبيوتر. لا تحاول إصلاح أي شيء حتى تهدأ. كنت بالفعل تبحث في بعض التوقف الشديد. أخذ الوقت للتفكير في الأشياء بدلا من تدمير أنظمتك أكثر (كما هو الحال في dd القضية أعلاه) لن يجعل الأمر أسوأ. - Jenny D
أي فكرة لماذا ركض الأمر في الواقع؟ إذا $foo و $bar كلاهما غير معروفين ، rm -rf / يجب أن يكون بها خطأ مع --no-preserve-root رسالة. الطريقة الوحيدة التي يمكن أن أفكر في أن هذا من شأنه أن يعمل في الواقع على الجهاز CentOS7 هو إذا $bar تقييمها ل *، لذلك كان ما كان يعمل rm -rf /*. - terdon
أنا أحب الأسلوبية في "شيء غير قصد؟" يجب أن يعني ذلك أن كلمة "تمت إزالتها" كانت "محذوفة" أو "أسقطت" دون قصد. - sehe
MarcoMarsala جيدا على الأقل كنت مشهورة الآن independent.co.uk/life-style/gadgets-and-tech/news/... - Martin Smith


عند حذف الاشياء مع rm -rf --no-preserve-root، قريب من المستحيل لاسترداد. من المرجح أنك فقدت كل الملفات المهمة.

مثل faker وقال في إجابته ، وأفضل مسار للعمل هو نقل الملفات إلى مكان آمن وإعادة نشر الخادم بعد ذلك.

لتجنب حالات مماثلة في المستقبل ، أقترح عليك:

  • خذ نسخ احتياطية أسبوعيًا ، أو على الأقل كل أسبوعين. سيساعدك هذا في الحصول على الخدمة المتأثرة احتياطيًا بأقل عدد ممكن من MTTR.

  • لا تعمل كجذر عند عدم الحاجة إليه. و دائما فكر مرتين قبل القيام بأي شيء. كنت أقترح عليك أيضا تثبيت آمن جمهورية مقدونيا.

  • لا تكتب خيارات لا تنوي استحضارها، مثل --no-preserve-root أو --permission-to-kill-kittens-explicitly-granted، لذاك السبب.


90
2018-04-07 07:57



وبالمثل ، ما لم تقصده حقاً ، لا تضيف --please-destroy-my-drive المعلمة ل hdparm. - MikeyB
أود أن أضيف ؛ "تحقق ثلاثيًا من الحجج (والخيارات) عند العمل كجذر" ، "تحقق من CurrentWorkingDirectory (قبل القيام بشيء مثل rm -rf *)" ، و "استخدم المسارات الكاملة للأوامر (لا ترحل على PATH $). - Baard Kopperud


لقد واجهت نفس المشكلة ولكن فقط اختبار مع قرص صلب ، لقد فقدت كل شيء. لا أعلم ما إذا كان سيكون مفيدًا لكن لا تقم بتثبيت أي شيء، لا تستبدل بياناتك، تحتاج إلى تثبيت محركات الأقراص الصلبة الخاصة بك وإطلاق بعض الأدوات الجنائية مثل تشريح الجثة لدينا ، photorec ، Testdisk.

أوصي بشدة باستخدام Testdisk ، مع بعض الأوامر الأساسية ، يمكنك استعادة بياناتك إذا لم تقم باستبدالها.


47
2018-04-11 08:17



أود أن أوصي بالتأكيد بتخزين التخزين دون اتصال بالإنترنت إذا كان ذلك ممكنا وإعادة تركيبه على أنه "للقراءة فقط" إذا كنت تستطيع ذلك على الإطلاق. سواء مع liveisk أو مثيل آخر الخادم. - mhouston100
حتى أنني قد تفكر في إجراء bitcopy من القرص الأصلي إلى قرص جديد من قرص للقراءة فقط من القرص الأصلي فقط لتكون آمنة. - Jim
«هذه الأدوات لن تسترد اسم ومسار الملف» نعم ، يفعلون. من الأدوات الثلاثة المذكورة ، يقوم واحد فقط (Photorec) بالنحت. - Andrea Lazzarotto


أفضل طريقة لإصلاح مشكلة كهذه هي عدم الحصول عليها في المقام الأول.

لا تدخل يدوياً أمر "rm -rf" يحتوي على شرطة مائلة في قائمة الوسيطة. (وضع مثل هذه الأوامر في نص برمجي مع روتين جيد / تدقيق جيد لحمايتك من فعل شيء غبي مختلف.)

فقط لا تفعل ذلك.
أبدا. إذا كنت تعتقد أنك بحاجة إلى القيام بذلك ، فأنت لا تفكر بما يكفي.

بدلاً من ذلك ، قم بتغيير دليل العمل الخاص بك إلى أصل الدليل الذي تنوي بدء عملية الإزالة منه ، بحيث لا يتطلب هدف الأمر rm شرطة مائلة:

القرص المضغوط / كزاز الرضع

sudo rm -rf hetznerbackup


33
2018-04-07 21:22



أنا دائما وضع -RF في نهاية قائمة الوسيطة ، لذلك rm /bla/foo/bar -rf. على الأقل بهذه الطريقة أنا لست في الكثير من المتاعب عندما أضغط على العودة بشكل عكسي بعد كتابة rm / جزء. - Jens Timmerman
وبالمثل ، عند إزالة ملفات "* ~" ، اكتب التيله أولاً ، ثم أضف في العلامة النجمية. - tekknolagi
لذا فأنت تفضل حذف منزلك من كل شيء في الدليل الحالي؟!؟ - greg0ire
@ greg0ire لا ، أعتقد أنه أراد أن يقول ذلك ، في الداخل /mnt/hetznerbackup، كان عليه استخدام "/" لوضع علامة على كل شيء داخل هذا المجلد .. ولكن من الأب ، فقط hetznerbackup ما يكفي ، دون مائلة. - T.Todua
tazotodua: كنت في اشارة الى تعليق tekknolagi - greg0ire


سأحاول استرداد جهاز النسخ الاحتياطي ، حيث تم تخزين جميع النسخ:

  • الخطوة الأولى - عمل نسخة احتياطية من محركات الأقراص هذه التي تم مسحها dd COMAND.
  • الخطوة الثانية - الاستخدام testdisk لاستعادة الملفات.

لذلك لنفترض أنك تريد استرداد 1 تيرابايت ، ستحتاج إلى 2 تيرابايت إضافي ، 1 تيرابايت للنسخ الاحتياطي (الخطوة الأولى) بالإضافة إلى 1 تيرابايت للانتعاش (الخطوة الثانية).

فعلت خطأ مماثلا مع الاسم المستعار RM -fr [رن الهاتف] و CD إلى الدليل الثمين. الآن أفكر دائما مرتين وإعادة فحص عدة مرات قبل استخدام الأمر rm أو dd.


16
2018-04-11 00:32



إلى حد كبير صفر القرص الخاص بك عن طريق القيام بذلك. هذا يجعل من الصعب للغاية التعافي. هناك سبب وجيه لأن اقتراح OP قد حاول استخدام testdisk ، والاسترداد أولاً ، وبينما يمكن أن يكون بناء الجملة dd أمرًا غريبًا بعض الشيء ، فهذا سبب وجيه للتحقق المزدوج والثلاثي قبل تشغيل الأمر. أنت فقط مسحت خادم واحد ، أليس كذلك؟ - Journeyman Geek
لا يزال بإمكانك الاستعادة ، ويعتمد على المدة المسموح بها dd لمحو فرصتك الأخيرة. - Abc Xyz
آسف لقول ذلك ، لكني أشعر بقزم ضخم في هذا السؤال ... - tymik
نأمل ش يشعر القزم الصغيرة في الجواب :) - Abc Xyz
أن نكون صادقين. لست متأكدًا من أنك حقيقي. إذا كنت كذلك ، فأنت على الأرجح في مهمة خاطئة ... - leftcase


كما ذكر في إجابة أخرى ، لدى Hetzner نظام إنقاذ. يتضمن كل من خيار netboot مع الوصول إلى ssh بالإضافة إلى برنامج Java لإعطائك شاشة ولوحة مفاتيح على خادمك.

إذا كنت ترغب في استرداد أكبر قدر ممكن ، أعد تشغيل الخادم في نظام netboot ، ثم قم بتسجيل الدخول وتنزيل صورة لنظام الملفات من خلال القراءة من جهاز inode المناسب.

أعتقد أن شيئًا كهذا يجب أن يعمل:

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

بالطبع يتم إجراء إعادة التوجيه بواسطة shell قبل استدعاء الأمر ssh ، لذلك server.img هو ملف محلي. إذا كنت تريد فقط نظام الملفات الجذر وليس قرص كامل ، استبدل sda بواسطة sda3 على افتراض أنك تستخدم نفس الصورة مثلي.


7
2018-04-07 07:54



ربما يمكن أن يكون: ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz (لن يساعد gzip على ذبابة على حسب محتوى نظام الملفات ...) - Olivier Dulac
OlivierDulac باستخدام gzip بهذه الطريقة سوف ترسل البيانات غير مضغوطة عبر الشبكة ثم ضغطها على جانب الاستقبال. أفترض أن النتيجة التي كنت تنوي تحقيقها هي ضغط البيانات أثناء نقلها. يمكن تخزين الصورة المحلية مضغوطة أو لا ، ولكن الأدوات التي تريد تطبيقها على هذه الصورة لاحقًا لن تعمل مع الإصدار المضغوط. إذا كان كل ما تريد تحقيقه هو ضغط البيانات أثناء النقل ، يمكنك الاستفادة من ميزة الضغط في ssh. يمكن تمكين مع -C إذا لم تكن ممكنة بالفعل في التكوين الخاص بك. - kasperd
كنت أكثر محاولة لتقليل حجم الملف. ولكن إذا كنت ترغب في حفظ النطاق الترددي (فكرة جيدة): فقط إضافة علامات اقتباس: ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz (الخيار -c لـ ssh جيد عادةً ، ولكنك ستظل بحاجة إلى الضغط في النهاية ، لأن ssh سيضغط فقط عند مدخل نفقه و uncompress قبل الإرسال إلى stdout) - Olivier Dulac


كيف ستتقدم من هنا؟

كنت أقسم باستخدام rm لبقية حياتي وأعتقد أنه من الجنون أن سلة المهملات ليس هو أمر الإزالة الافتراضي على أنظمة لا شىء.

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

أود أن أتأكد من أنه أول شيء أقوم بتثبيته على نظام جديد و alias rm إلى شيء يخبر الناس باستخدامه trash-cli في حين أن. قد تتضمن أيضًا ملاحظة حول اسم مستعار آخر يعمل فعليًا /bin/rm ولكن يخبرهم بتجنب استخدامه في معظم الحالات.

:( قصة حقيقية


2
2018-04-15 09:51



من تجربتي ، فإن هذا النوع من الأدوات يشبه إزعاجًا أكثر من كونه مساعدة فعلية - عاجلاً أم آجلاً ، وبعد بعض الشتائم ، ستقوم بإزالته. قد يكون الأمر على ما يرام بالنسبة لمحطة عمل ، ولكن في العديد من الحالات إن لم تكن في معظم الأحيان عندما تقوم بعمل إداري على خادم ، فأنت في الحقيقة بحاجة إلى حذف البيانات ، وليس فقط نقلها إلى مكان آخر (وإذا كان الأمر كذلك ، فما عليك سوى استخدام mv في حين أن). إلى جانب ذلك ، قد يؤدي نقل البيانات تلقائيًا إلى مجلد سلة المهملات إلى حدوث مشكلات خطيرة بحد ذاتها (على سبيل المثال ، عدم وجود سلة المهملات على نفس نظام الملفات والأمان). - maetthu
@ mometthu أوه بالطبع يتم إزالة الأشياء بعد أن كانوا في سلة المهملات لعدد معين من الأيام. يقوم سطح مكتب Ubuntu بهذا مع العناصر التي كانت في المهملات أكثر من 30 يومًا. على الخادم قد ترغب في شيء أقصر ، على سبيل المثال. trash-empty 5 في كرون. الهدف هو السماح لك ببعض فترة السماح لأن البشر يخطئون. - Gerry
أليس من الأفضل أن يكون لديك خطة عمل لاستعادة الطاقة المرغوبة بدلاً من حظر أدوات النظام الأساسية؟ - user292812
@ user292812 لم أقترح حظر / bin / rm ، فقط أنه لا ينبغي أن يكون الخيار الأول في معظم الحالات (لاحظ الاسم المستعار / bin / rm). يقترح سؤالك أيضًا خيارًا خاطئًا بين التعافي من الكوارث وخيار الحذف الصديق للإنسان. يجب أن يكون لكما. - Gerry
يمكن لعملية الحذف المؤلفة من خطوتين أن توفر الكثير من المتاعب: 1. الانتقال إلى سلة المهملات (verbosely) ، 2. إفراغ سلة المهملات. أنا مستعار مثل هذا البرنامج النصي إلى "جمهورية مقدونيا" ، وقد أنقذني من حذف الأشياء المهمة بطريق الخطأ عدة مرات. - Sam Watkins


أود أن المشورة في مثل هذه الحالة هو إلغاء تحميل واستخدام debugfsوبمساعدة من lsdel يمكنك إدراج جميع الملفات التي تمت إزالتها مؤخرًا ، والتي لا يتم تنظيفها من المجلات ومن ثم نفاية الملفات المطلوبة. رابط البحث السريع لنفسه: http://www.linuxvoodoo.com/resources/howtos/debugfs 

آمل أن يساعد شخص ما. ؛)

ونعم ، مرة واحدة من الاقتراحات هو جعل البرنامج النصي ، والذي حرك ريال جمهورية مقدونيا إلى real.rm و symlinc ام إلى جمهورية مقدونيا ؛)


1
2018-04-18 14:46





وقف كل خادم processess وكل ما قد يسبب القرص i / o ... ثم تشغيل testdisk ، ينبغي أن يكون في رزمة البرمجيات الخاصة بك. إذا كان لديك وصول فعلي ، استخدم livecd مع testdisk.


-2
2018-04-17 17:35



لا أفهم لماذا تعتقد أن ثلاثة إجابات تقدم نفس الاقتراح لم تكن كافية؟ - kasperd