Wczoraj popełniłem błąd, który przypadkowo usunął 1800 GB mojego serwera plików


27

Uruchomiłem to polecenie wczoraj, pomyślałem na maszynie testowej, ale był to serwer plików podłączony przez SSH.

sudo rm -rf /tmp/* !(lost+found)

Mój emulator terminala to Konsole. Mój system to Debian 7.

Pytanie:

Czy to polecenie usunęło inne pliki niż pliki w / tmp?


Czy to możliwe, że system plików / home nie jest zamontowany?
— Emmanuel

@Emmanuel Potwierdziłem, że pliki zostały utracone.
— somethingSomething

1
Twoja historia nie pokazuje żadnych błędów usuwania. Zabiłeś wiele procesów systemu operacyjnego, wykonując „kill $ (lsof / usr ...)”. Wpływ na system plików współdzielący deamon mógł zostać naruszony. Czy próbowałeś zrestartować usługi lub zrestartować filtr?
— Emmanuel,

1
@somethingSomething Konsole nie jest powłoką, jest domyślnym emulatorem terminali KDE. Spróbuj wpisać kilka znaków w terminalu, jak dsgsadfsfi naciśnij Enter. Zobacz wynik. Jeśli tak bash: dsgsadfsf: command not found, to twoja skorupa jest bash.
— Gabor Farkas

5
Mam nadzieję, że masz dobre kopie zapasowe. Jeśli chcesz podjąć próbę odzyskania, przestań korzystać z tego systemu, dopóki nie będziesz w stanie utworzyć kopii dysku na poziomie bajtów, na której chcesz eksperymentować. Wszelkie zapisy w danym systemie plików zaostrzą szkody.
— CVn

Odpowiedzi:


43

Prawidłowa składnia w bash jest następująca:

rm /tmp/!(lost+found)

Jak @goldilocks napisał w komentarzach, oryginalny komenda powoduje ekspansję na zapytania (usuwa wszystkie pliki w /tmpfolderze, a następnie idzie dalej, i usuwa wszystkie pliki w bieżącym katalogu roboczym, w przypadku homefolderu).

Możesz spróbować sprawdzić, czy możesz odzyskać część swoich danych. Jest to kwestia o odzyskiwanie danych Linux tutaj .


28
Ach, więc jest to zasadniczo kolejny przypadek słynnego „brakującego miejsca w moim wierszu poleceń, który zniszczył wszystkie moje dane” - tak jak w rm -rf / tmp^^
— Martin von Wittich

8
Nie mogę wystarczająco podkreślić, że paranoja sysadmin nie jest bezpodstawna. :) Zawsze wykonuj kopię zapasową najcenniejszych danych w miejscu, w którym możesz pisać tylko jako root.
— Gabor Farkas

9
Wolę wykonać kopię zapasową na oddzielnym dysku twardym lub serwerze, którego nie można nawet zapisać w katalogu głównym w normalnych okolicznościach. Użyto OP sudo, więc normalny folder, który można zapisać tylko w katalogu głównym, niekoniecznie pomógłby.
— Martin von Wittich,

Dobrze, że nie zwracałem wystarczającej uwagi na OP. Serwer może być kosztowny, jednak oddzielny dysk jest wystarczający. Użyłem osobnej partycji, która domyślnie była odmontowana. Prosty i brudny, ale skuteczny.
— Gabor Farkas

1
@simonzack może zmniejszyć ryzyko wypadków poprzez zamontowanie go w konsekwencji, to mi wystarczy :)
— Gabor Farkas

26

W !(lost+found)twoim rmrozkazie był prawdopodobnie fatalny błąd:

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)

Nie wiem dokładnie, co bashsię z tym dzieje, ale poniższe polecenie wypisuje wszystko w moim, /tmp/a także w moim bieżącym katalogu (który jest obecnie ~):

echo /tmp/* !(lost+found)

Jest !(folder)to część polecenia, które raz uruchomiłem, które usunęło wszystkie oprócz folder.
— somethingSomething

3
To brzmi jak coś, co może współpracować z zsh; bash Nie sądzę. Rozumiem, !lost+found: event not foundjak !jest używany do pobierania poleceń z historii.
— wurtel

9
Yikes! „Nie wiem, co dokładnie robi bash” -> wykonuje rozszerzenie. Zgadnij, co to jest „wszystko oprócz tego”? cd /; echo !(lost+found)> _ <
— goldilocks

13
Należy pamiętać, że !(foo)działa w bash jako „wszyscy oprócz foo” tylko wtedy, gdy extglobjest ustawiona opcja. Co więcej, OP nie określił, jakiej powłoki używa, więc naprawdę trudno zgadnąć, co dokładnie rm !(lost+found)zrobiła komenda w jego przypadku.
— jimmij

5
Świetna uwaga, chociaż OP stwierdził, że używa Debiana 7, który ma bashdomyślną powłokę. Najprawdopodobniej tego nie zmienił. Ponadto w Debianie 7 extglobopcja jest truedomyślnie ustawiona (właśnie to sprawdziłem).
— Gabor Farkas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.