שאלה יום שני בבוקר טעות: 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 ומתארח בהצנר.


142
2018-04-07 06:39




שחזר מגיבויים. בכנות, זהו אחד מאותם תרחישים לא קל בחזרה. - MadHatter
איך אתה אפילו להקליד --no-preserve-root בטעות?! : -o - ThatGraemeGuy
Greame, את המפתחות הם ממש ליד אחד את השני. - MadHatter
יום שלישי עבודה: חפש עבודה חדשה;) קח את זה בתור לקח למה גיבויים נדרשים. - TomTom
זה בטח נראה כמו טרולינג לי. אתה לא יכול להקליד בטעות - אני באמת מתכוון- delete-my-all-root. - psusi


תשובות:


אתחול לתוך מערכת ההצלה המסופקת על ידי Hatzner ולבדוק מה הנזק שעשית.
להעביר את כל הקבצים למקום בטוח ולפרוס מחדש את השרת לאחר מכן.

אני חושש שזה הפתרון הטוב ביותר במקרה שלך.


92
2018-04-07 07:00



להסתכל על הצד החיובי, לפחות יש לו בעיות עם heartbleed! - metacom


העובדה היא? בשלב זה, אין תיקון אוטומטי פשוט / קל עבור זה. שחזור נתונים הוא מדע ואפילו את הכלים הבסיסיים, המשותפים צריך מישהו לשבת ולהבטיח את הנתונים שם. אם אתה מצפה להתאושש זה ללא כמויות אדירות של זמן ההשבתה, אתה הולך להיות מאוכזב.

הייתי מציע להשתמש testdisk או כמה קבצים מערכת שחזור כלי ספציפי. נסה מערכת אחת, לראות אם זה עובד, וכן הלאה. אין דרך אמיתית להפוך את התהליך לאוטומטי אבל אתה יכול כנראה בקפידה לעשות את זה בקבוצות.

עם זאת, יש כמה דברים מפחידים מאוד בשאלות והערות כי צריך להיות חלק שלך לאחר דוחות פעולה.

ראשית, אתה רץ את הפקודה בכל מקום בלי לבדוק את זה קודם. הפעל פקודה בתיבה אחת. ואז כמה, ואז יותר. ביסודו של דבר, אם משהו משתבש, שלה טוב יותר יש לו להשפיע על מעטים ולא את כל המערכות שלך.

שנית

@Tim כיצד לבצע גיבוי ללא הרכבה של כונן מרוחק בשרת?

מפחיד אותי. קובץ ברמה אחת הגיבויים הם הבעיה נפתרה. Rsync יכול לשמש כדי לשמר הרשאות להעתיק מעל קבצים דרך אחת לאתר גיבוי. בטעות משהו? התקנה מחדש (רצוי באופן אוטומטי) rsync בחזרה, דברים לעבוד. בעתיד, תוכל להשתמש בתצלומים ברמת מערכת הקבצים עם תמונות btrfs או zfs ולשלוח אותם לגיבוי ברמת המערכת. הייתי ממש משחק עם שרתי יישומים מפרידים, מסדי נתונים ואחסון ולהציג את העיקרון של זכות לפחות כך היית לפצל את הסיכון למשהו כזה ..

אני יודע שיש משהו שאני יכול לעשות. עכשיו אני צריך לחשוב איך להגן על עצמי

לאחר שמשהו קרה הוא הזמן הגרוע ביותר לשקול את זה.

מה אנחנו יכולים ללמוד מזה?

  1. גיבויים לשמור נתונים. אולי קריירה.
  2. אם יש לך כלי arn't מודע אם מה זה יכול לעשות, מסוכן שלה. הגדי יכול לעשות דברים מדהימים עם lightber. חדר של שימפנזים עם אורות תאורה ... יסתבך.
  3. לעולם אל תפעיל פקודה בכל מקום בו זמנית. להפריד את הבדיקה מכונות הייצור, רצוי לעשות מכונות הייצור בשלבים. שלה יותר כדי לתקן 1 או 10 מכונות ולא 100 או 1000.

  4. פקודות בדיקה כפולות ו משולשות. אין בושה לבקש עובד משותף לבדוק פעמיים "היי, אני עומד על כונן, אתה יכול שפיות לבדוק את זה אז אני לא בסופו של דבר לנגב כונן?". עטיפה יכולה לעזור גם כן, אבל שום דבר לא יכה בעיניים פחות עייפות.

מה אתה יכול לעשות עכשיו? קבל הודעת אימייל ללקוחות. תן להם לדעת שיש זמן השבתה ויש כישלונות קטסטרופלי. לדבר עם עליות גבוהות יותר שלך, משפטי, מכירות כאלה ולראות איך אתה יכול להפחית את הנזק. התחל לתכנן להתאוששות, ואם יש צורך אתה צריך, במקרה הטוב, לשכור ידיים נוספות. במקרה הגרוע, תוכנית לבזבז הרבה כסף על ההתאוששות. בשלב זה, אתה הולך לעבוד על מקלים את הנפילה, כמו גם תיקונים טכניים.


219
2018-04-11 08:02



@McocoMarsala אם רכשתם משהו לפני השימוש ב- rsync, לא הייתם עושים זאת כראוי. אתה צריך להיות משתמש rsync מעל ssh. - Michael Hampton♦
הייתי מוסיף את התשובה הזאת מעולה: להתרחק מהמחשב. אל תנסה לתקן שום דבר עד שתירגע. אתה כבר מסתכל על זמן השבתה רציני; לוקח את הזמן לחשוב על דברים במקום להרוס את המערכות שלך אפילו יותר (כמו ב dd הבעיה לעיל) לא הולך לעשות את זה יותר גרוע. - Jenny D
יש לך מושג למה הפקודה באמת רץ? אם $foo ו $bar לא היו מוגדרים, rm -rf / צריך להיות שגיאה עם --no-preserve-root הודעה. הדרך היחידה שאני יכול לחשוב על זה היה באמת עובד על מכונת CentOS7 היא אם $bar הוערך ל *, אז מה היה לרוץ היה rm -rf /*. - terdon
אני אוהב את הסטייליזם ב "משהו בטעות?". זה חייב להיות המילה "הוסר" היה "נמחק" או "ירד" בטעות. - sehe
@McocoMarsala טוב לפחות אתה מפורסם עכשיו independent.co.uk/life-style/gadgets-and-tech/news/... - Martin Smith


כאשר אתה מוחק דברים עם rm -rf --no-preserve-root, שלה אי אפשר לשחזר. זה מאוד סביר להניח שאיבדת את כל הקבצים החשובים.

כפי ש @ Faker אמר בתשובתו, הדרך הטובה ביותר היא להעביר את הקבצים למקום בטוח ולפרוס מחדש את השרת לאחר מכן.

כדי למנוע מצבים דומים בעתיד, אני מציע לך:

  • קח גיבויים שבועי, או לפחות שבועיים. זה יעזור לך לקבל את השירות המושפע לגבות עם MTTR לפחות האפשרי.

  • אל תעבדו כשורש כאשר אין צורך בכך. ו תמיד לחשוב פעמיים לפני לעשות משהו. הייתי מציע לך גם להתקין בטוח- rm.

  • אל תקליד אפשרויות שאינך מתכוון להפעיל, כמו --no-preserve-root או --permission-to-kill-kittens-explicitly-granted, לצורך העניין.


90
2018-04-07 07:57



באופן דומה, אלא אם כן אתה באמת מתכוון, אל תוסיף את --please-destroy-my-drive פרמטר hdparm. - MikeyB
אני רוצה להוסיף; "בדוק את הטענות שלך (ואפשרויות) בעת עבודה כשורש", "בדוק את המדריך הנוכחי שלך (לפני ביצוע פעולה כמו rm -rf *)" ו"שימוש בנתיבים מלאים לפקודות (אל תעביר את השדה ב- $ PATH) '. - Baard Kopperud


היה לי את אותה בעיה אבל רק בדיקה עם harddrive, איבדתי הכל. אני לא יודע אם זה יהיה שימושי אבל אל תתקין שום דבר, אל תחליף את הנתונים שלך, אתה צריך לעלות על הכוננים הקשיחים שלך ולהשיק כמה כלי זיהוי פלילי כגון נתיחה, photorec, Testdisk.

אני ממליץ בחום Testdisk, עם כמה פקודות בסיסיות אתה יכול לשחזר את הנתונים שלך אם לא להחליף את זה.


47
2018-04-11 08:17



אני בהחלט ממליץ takign אחסון לא מקוון אם בכלל אפשרי מחדש הרכבה כמו 'לקריאה בלבד' אם אתה יכול בכלל. בין אם עם lifisk או מופע שרת אחר. - mhouston100
הייתי אפילו לשקול לעשות bitcopy DD של הדיסק המקורי לדיסק חדש מן הר לקריאה בלבד של הדיסק המקורי רק כדי להיות בטוח. - Jim
«כלים אלה לא לשחזר את שם הקובץ ואת הנתיב» כן, הם עושים. מתוך 3 הכלים הנ"ל, רק אחד (Photorec) מבצע גילוף. - Andrea Lazzarotto


הדרך הטובה ביותר לתקן בעיה כזו היא לא לקבל את זה מלכתחילה.

אל תזין ידנית פקודת "rm -rf" עם קו נטוי ברשימת הארגומנטים. (לשים פקודות כאלה בתסריט פגז עם שגרת אימות / שגרתיות טובה מאוד כדי להגן עליך לעשות משהו טיפשי הוא שונה.)

רק אל תעשה את זה.
פעם. אם אתה חושב שאתה צריך לעשות את זה, אתה לא חושב מספיק חזק.

במקום זאת, שנה את ספריית העבודה שלך להורה של המדריך שממנו אתה מתכוון להתחיל את ההסרה, כך שהמטרה של הפקודה rm אינה דורשת קו נטוי:

cd / mnt

sudo rm -rf hetznerbackup


33
2018-04-07 21:22



אני תמיד שם את ה - Rf בסוף רשימת הארגומנטים rm /bla/foo/bar -rf. לפחות ככה אני לא לתוך הרבה צרות כאשר אני לחץ שוב ושוב לאחר ההקלדה rm / חלק. - Jens Timmerman
באופן דומה, בעת הסרת "* ~" קבצים, אני מקליד את tilde הראשון, ולאחר מכן להוסיף כוכבית. - tekknolagi
אז אתה מעדיף למחוק את הבית מאשר כל בספרייה הנוכחית?!? - greg0ire
@ greg0ire לא, אני חושב שהוא רצה לומר, כי בתוך /mnt/hetznerbackup, הוא היה צריך להשתמש "/" כדי לסמן את הכל בתוך התיקיה .. אבל מהורה, רק hetznerbackup הוא מספיק, ללא חתכים. - T.Todua
@tazotodua: התכוונתי להערה של tekknolagi - greg0ire


הייתי מנסה לשחזר את מכונת הגיבוי, שם כל העותקים היו מאוחסנים:

  • שלב ראשון - לבצע גיבוי של זה נמחק "גיבוי המכונה" כוננים עם dd comand.
  • שלב 2 - השתמש testdisk לשחזר קבצים.

אז נניח שאתה רוצה לשחזר 1TB, תצטרך 2TB נוסף, 1TB עבור גיבוי (צעד 1) בתוספת 1TB להתאוששות (שלב 2).

עשיתי טעות דומה עם כינוי rm -fr [טלפון צלצל] ו cd לספרייה יקר. עכשיו אני תמיד חושב פעמיים לבדוק שוב כמה פעמים לפני שאני משתמש rm או הפקודה dd.


16
2018-04-11 00:32



די הרבה אפס הדיסק שלך על ידי עושה את זה. זה ברצינות עושה את זה הרבה יותר קשה להתאושש. יש סיבה טובה OP הציע לך ניסה באמצעות testdisk, ו התאושש הראשון, בעוד התחביר של dd יכול להיות קצת מוזר, זו סיבה טובה להכפיל לבדוק משולשת לפני הפעלת הפקודה. אתה רק ניגב שרת אחד, נכון? - Journeyman Geek
אתה עדיין יכול להתאושש, תלוי כמה זמן מותר dd למחוק את ההזדמנות האחרונה שלך. - Abc Xyz
מצטער לומר את זה, אבל אני מרגיש טרול ענק בשאלה זו ... - tymik
מקווה שאתה מרגיש טרול קטן התשובה :) - Abc Xyz
למען הכנות. אני לא בטוח שאתה אמיתי. אם אתה, אתה כנראה בעבודה הלא נכונה ... - leftcase


כפי שצוין בתשובה אחרת, יש לצנר מערכת הצלה. הוא כולל גם אפשרות netboot עם גישה ssh כמו גם יישומון ג 'אווה לתת לך מסך ומקלדת על השרת שלך.

אם אתה רוצה לשחזר כמה שיותר, לאתחל את השרת לתוך מערכת netboot ולאחר מכן להיכנס ולהוריד תמונה של מערכת הקבצים על ידי קריאה מן המכשיר המתאים inode.

אני חושב שמשהו כזה צריך לעבוד:

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

כמובן, ניתוב מחדש נעשה על ידי פגז לפני הפקודה 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 (ב- the-fly 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 (אפשרות cc של ssh הוא גם טוב גם, אבל אתה עדיין צריך לדחוס בסוף, כמו SSH רק לדחוס בכניסה של המנהרה שלה לבטל את הדחיסה לפני שליחת stdout) - Olivier Dulac


איך היית מתקדם מכאן?

הייתי נשבע להשתמש rm במשך שארית חיי וחושב שזה טירוף כי trash-cli היא לא ברירת המחדל להסרת הפקודה על מערכות nix.

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

הייתי לוודא שזה הדבר הראשון שאני מתקין על מערכת חדשה alias rm למשהו שאומר לאנשים להשתמש trash-cli במקום זאת. זה יכלול גם פתק על כינוי אחר כי למעשה פועל /bin/rm אבל אומר להם להימנע משימוש בו ברוב המקרים.

:( סיפור אמיתי


2
2018-04-15 09:51



מניסיוני, כלים מסוג זה הם יותר כמו מטרד מאשר עזרה בפועל - במוקדם או במאוחר, ולאחר כמה קילל, תוכל להסיר אותו. זה יכול להיות בסדר עבור תחנת עבודה, אבל אם לא רוב המצבים שבהם אתה עושה עבודה ניהולית בשרת, אתה באמת צריך למחוק את הנתונים, לא רק להעביר אותו במקום אחר (ואם זה היה המקרה, פשוט להשתמש mv במקום זאת). חוץ מזה, העברה אוטומטית של נתונים לתיקיית אשפה עלולה להוביל לבעיות חמורות בפני עצמה (למשל, אשפה לא נמצאת באותה מערכת קבצים, אבטחה). - maetthu
@maetthu כמובן הדברים מוסרים לאחר שהם היו בפח במשך מספר מסוים של ימים. שולחן העבודה של אובונטו עושה את זה לפריטים שנמצאים בפח יותר מ -30 יום. בשרת ייתכן שתרצה משהו קצר יותר, למשל. trash-empty 5 ב cron. הנקודה היא לאפשר לך קצת תקופת החסד כי בני האדם עושים טעויות. - Gerry
האם זה לא טוב יותר יש תוכנית עבודה התאוששות desaster במקום לאסור על כלי מערכת חיוניים? - user292812
@ user292812 אני לא מציע לאסור / bin / rm, רק כי זה לא צריך להיות האפשרות הראשונה ברוב המקרים (שים לב / bin / rm כינוי). השאלה שלך מציעה גם בחירה שקרית בין התאוששות מאסון לבין אפשרות מחיקה אנושית ידידותית. אתה צריך את שניהם. - Gerry
תהליך הסרת שני שלבים יכול לחסוך הרבה צרות: 1. להעביר לאשפה (verbosely), 2. ריק אשפה. אני כינוי כזה סקריפט ל "rm" וזה הציל אותי בטעות מחיקת דברים חשובים פעמים רבות. - Sam Watkins


הייתי עצה במקרה כזה הוא unmount ושימוש debugfs, ובסיוע לסדל אתה יכול לרשום את כל הקבצים שהוסרו לאחרונה, שבו לא ניקה מן היומנים ולאחר מכן מזבלה קבצים הדרושים. קישור חיפוש מהיר עבור אותו הדבר: http://www.linuxvoodoo.com/resources/howtos/debugfs 

מקווה שזה יעזור למישהו. ;)

וכן, פעם אחת של הצעות היא לעשות סקריפט, אשר נע לנו rm ל real.rm ו symlinc mv ל rm ;)


1
2018-04-18 14:46





עצור את כל processess שרת וכל דבר אשר עלול לגרום דיסק i / o ... ואז לרוץ testdisk, זה צריך להיות מחסנית התוכנה שלך. אם יש לך גישה פיזית, השתמש ב- livecd עם testdisk.


-2
2018-04-17 17:35



אני לא ממש מקבל למה אתה חושב שלוש תשובות לספק את ההצעה בדיוק לא היה מספיק? - kasperd