Ustawiać
Od jakiegoś czasu jestem programistą, ale wciąż jestem trochę rozmyślany przy głębokich, wewnętrznych sprawach.
Teraz. Wiem, że nie jest dobrym pomysłem:
- zabij -9 proces (zły)
- spontanicznie wyciągnij wtyczkę z działającego komputera lub serwera (gorzej)
Czasami jednak po prostu musisz. Czasami proces po prostu nie reaguje bez względu na to, co robisz, a czasami komputer po prostu nie reaguje, bez względu na to, co robisz.
Załóżmy, że system działa z Apache 2, MySQL 5, PHP 5 i Python 2.6.5 poprzez mod_wsgi.
Uwaga: Najbardziej interesuje mnie Mac OS X tutaj, ale odpowiedź, która dotyczy dowolnego systemu UNIX, pomógłaby mi.
Moje obawy
Za każdym razem, gdy muszę wykonać jedną z tych czynności, szczególnie drugą, przez pewien czas bardzo się martwię, że coś się zepsuło. Gdzieś plik może być uszkodzony - kto wie, który plik? Na komputerze jest ponad 1 000 000 plików.
Często używam OS X, więc przeprowadzę operację „Zweryfikuj dysk” za pomocą Narzędzia dyskowego. Nie zgłosi żadnych problemów, ale nadal mnie to martwi.
Co jeśli jakiś plik konfiguracyjny gdzieś się zepsuje. Albo jeszcze gorzej, co jeśli plik binarny jest uszkodzony. Albo gdzieś plik skryptu jest teraz uszkodzony. Co się stanie, jeśli jakiś sprzęt zostanie uszkodzony?
Co się stanie, jeśli nie dowiem się o tym do następnego miesiąca, w krytycznym scenariuszu, kiedy uszkodzenie lub uszkodzenie spowoduje katastrofę?
A co jeśli cenne dane zostały już utracone?
Moja nadzieja
Mam nadzieję, że te obawy i obawy są bezpodstawne. W końcu, po zrobieniu tego wiele razy, nic naprawdę złego się nie wydarzyło. Najgorsze jest to, że musiałem naprawić niektóre tabele MySQL, ale chyba nie straciłem żadnych danych.
Ale jeśli moje zmartwienia nie są bezpodstawne, a rzeczywista szkoda może się zdarzyć w sytuacji 1 lub 2, mam nadzieję, że istnieje sposób, aby ją wykryć i zapobiec jej.
Moje pytania)
Czy może tak być, ponieważ nowoczesne systemy operacyjne są zaprojektowane w taki sposób, aby zapewnić, że nic nie zostanie utracone w tych scenariuszach? Czy może tak być, ponieważ nowoczesne oprogramowanie zostało zaprojektowane tak, aby nic nie stracić? Co z nowoczesnym projektowaniem sprzętu? Jakie środki są stosowane po wyciągnięciu wtyczki zasilania?
Moje pytanie dotyczy obu tych scenariuszy, co dokładnie może pójść nie tak i jakie kroki należy podjąć, aby to naprawić?
Mam wrażenie, że jedną z rzeczy, które mogą pójść nie tak, jest to, że niektóre programy mogły nie opróżnić swoich danych na dysk, więc wszelkie najnowsze dane, które miały zostać zapisane na dysku (powiedzmy kilka sekund przed wyłączeniem zasilania) ) może zostać utracone. Ale co poza tym? I czy ten problem 5-sekundowej utraty danych może zepsuć system?
Co z uszkodzeniem przypadkowych plików ukrywających się gdzieś w ogromnym lesie plików na moich dyskach twardych?
Co z uszkodzeniem sprzętu?
Co by mi najbardziej pomogło
Szczegółowe opisy tego, co dzieje się wewnętrznie, gdy albo zabijesz -9 proces, albo przełączysz zasilanie całego systemu. (wydaje się to natychmiastowe, ale czy ktoś może to dla mnie spowolnić?)
Wyjaśnienia wszystkich rzeczy, które mogą pójść nie tak w tych scenariuszach, wraz z (z grubsza oczywistymi) prawdopodobieństwami (tj. Jest to bardzo mało prawdopodobne, ale prawdopodobne) ...
Opisy środków zastosowanych we współczesnym sprzęcie, systemach operacyjnych i oprogramowaniu, aby zapobiec uszkodzeniom lub uszkodzeniom w przypadku wystąpienia takich scenariuszy. (aby mnie pocieszyć)
Instrukcje, co robić po zabiciu -9 lub odłączeniu zasilania, poza „weryfikacją dysku”, aby naprawdę upewnić się, że nic nie jest uszkodzone lub uszkodzone gdzieś na dysku.
Środki, które można podjąć w celu wzmocnienia konfiguracji komputera, aby w razie konieczności zabicia lub odcięcia zasilania wszelkie potencjalne uszkodzenia zostały złagodzone.
Niektóre informacje o plikach binarnych - czy nie jest prawdą, że plik binarny Apache lub jakaś biblioteka może mieć losowy bajt lub dwa uszkodzone w środku, które nie wyjdą i nie spowodują problemu do później? Jak mogę się upewnić, że tak się nie stało w wyniku podciągnięcia mocy lub zabicia?
Dzięki wielkie!
źródło
Odpowiedzi:
Pociągnięcie za moc powoduje, że wszystko zatrzymuje się w locie, bez ostrzeżenia. kill -9 ma taki sam wpływ na pojedynczy proces, siłą kończąc go przy pomocy SIGKILL .
Jeśli proces zostanie zabity przez jądro lub awarię zasilania, nie wykonuje żadnego czyszczenia. Oznacza to, że możesz mieć do połowy zapisane pliki, niespójne stany lub utracone pamięci podręczne. Zwykle nie musisz się o to martwić z powodu kronikowania, statusu wyjścia i podtrzymania bateryjnego.
Pliki tymczasowe w / tmp znikną automatycznie, jeśli znajdują się w tmpfs, ale nadal możesz mieć pliki blokujące specyficzne dla aplikacji do usunięcia, takie jak blokada i .parentlock dla Firefox.
Większość oprogramowania jest wystarczająco inteligentna, aby ponowić transakcję, jeśli nie zarejestruje pomyślnego zakończenia transakcji. Dobrym przykładem tego jest typowy system pocztowy. Jeśli wiadomość zostanie dostarczona, ale zostanie odcięta w środku, nadawca spróbuje później, dopóki nie odniesie sukcesu.
Twój system plików jest prawdopodobnie zapisany w dzienniku. Jeśli przenosisz lub piszesz plik, który umiera w połowie strumienia, kronikowany system plików nadal będzie odwoływał się do oryginału. System plików z kronikowaniem wprowadzi zmiany nieniszczące, pozostawiając starą kopię, a następnie odniesie się do nowej kopii tylko jako ostatni krok przed odzyskaniem miejsca zajmowanego przez stare kopie na dysku.
Teraz, jeśli masz macierz RAID, ma ona wszelkiego rodzaju bufory pamięci, aby zwiększyć wydajność i zapewnić niezawodność w przypadku awarii zasilania. Najprawdopodobniej twój system plików nie będzie wiedział o pamięciach podręcznych urządzenia i ich stanie, więc uważa, że zmiana została zatwierdzona na dysku, ale nadal znajduje się gdzieś w pamięci podręcznej RAID. Co dzieje się, gdy moc umiera? Mamy nadzieję, że masz funkcjonalną baterię w swojej obudowie RAID i monitorujesz ją. W przeciwnym razie masz uszkodzony system plików do fsck.
Tak, kilka bitów może ulec uszkodzeniu w pliku binarnym, ale nie martwiłbym się tak bardzo na nowoczesnym sprzęcie. Jeśli jesteś naprawdę paranoikiem, możesz monitorować kondycję swoich dysków i macierzy RAID za pomocą odpowiednich narzędzi, ale i tak powinieneś to robić. Rób regularne kopie zapasowe i uzyskaj nieprzerwany zasilacz.
źródło
W nieoczekiwanym zamknięciu jedynymi plikami, które powinny zostać uszkodzone, są pliki, które można otworzyć. W większości systemów w danym momencie prawdopodobnie nie piszesz do pliku. Prawdopodobnie.
1 zabij -9
jest POSIX SIGKILL i zależy od implementacji. Proces, który odbierze ten sygnał, nie będzie miał okazji go obsłużyć.
1 Wyłącz zasilanie
zależy od sprzętu. Automatyczne parkowanie głowic pod impetem napędu, a wszystko w twojej pamięci podręcznej traci odświeżanie pamięci DRAM i rozpada się na nieuniknione uszkodzenie w ciągu kilku sekund. To samo dzieje się z pamięcią systemową, pamięcią podręczną procesora, rejestrami itp.
Od wdc.com (google: site: wdc.com Protective Head Parking)
Brak zasilania: dysk twardy został zresetowany. Głowa jest zaparkowana w strefie lądowania za pomocą energii wrzeciona. Silnik wrzeciona zatrzymany.
2 - co może pójść nie tak
pliki pozostawione otwarte są niepełne. Jeśli plik zostanie otwarty do zapisu, nastąpi uszkodzenie danych. Zapis plików na nowoczesnym sprzęcie jest szybki, a współczesne komputery PC zwykle nie są obciążone IO. To jak chodzenie z zasłoniętymi oczami po spokojnej wiejskiej drodze. Przez większość czasu nic ci nie będzie.
3 - środki zaradcze
patrz powyżej, co robią dyski.
Wyszukaj kronikowane systemy plików, są teraz normalne: http://en.wikipedia.org/wiki/Journaling_file_system
Oprogramowanie takie jak MS Word lub vi zapisuje do pliku tymczasowego, a nie oryginalnego. Celem jest, aby nigdy nie pozostawiać systemu w stanie, w którym nie ma spójnej kopii na dysku.
Windows przechowuje kopie rejestru (jest to po prostu zbyt ważne) Wikipedia: „Windows 2000 przechowuje alternatywną kopię gałęzi rejestru (.ALT) i próbuje się na nią przełączyć po wykryciu uszkodzenia” (od tamtej pory nie korzystałem ze wsparcia technicznego) Win2k, więc nie jestem pewien, jakie są nowe mechanizmy MS)
4 - co robić
W porządku trudności (łatwy-trudny)
Zachowaj kopie zapasowe jest najbardziej odpowiednią odpowiedzią, dobre kopie zapasowe powinny umożliwić powrót do poprzednio zmodyfikowanej wersji.
5
Zbędna moc? Edukacja użytkowników końcowych? położyć taśmę i karton na przycisku zasilania?
6
Brak wad sprzętowych, uszkodzonych sterowników dysków, uszkodzonego jądra systemu operacyjnego, braku sum kontrolnych lub awarii podczas aktualizacji, pliki binarne i biblioteki nie są otwierane do odczytu i zapisu, więc nie ulegają uszkodzeniu. Zdarza się, ale to rzadkie.
źródło
Jeśli chodzi o zabicie -9, to wysyła sygnał do procesu, aby „umrzeć” natychmiast. Proces umiera (chyba że jest w nieprzerwanym śnie, w którym to przypadku staje się zombie). Żadne pliki nie są zamykane, żadne dane nie są zapisywane, a program nie może przechwycić tego sygnału i zrobić czegoś innego. Bez sprzątania, bez niczego: po prostu umiera.
Dzisiejsze systemy plików są bardzo solidne; rzeczy takie jak XFS, JFS, ext3 i ext4 mają dzienniki i inne rzeczy, które utrzymują metadane systemu plików w nienaruszonym stanie.
Pliki binarne, takie jak sam Apache i inne, najprawdopodobniej nie ulegną uszkodzeniu w wyniku nagłej utraty mocy lub zabicia systemu, ponieważ znajdują się w pamięci lub są odczytywane; jeśli są odczytywane (np. zaczyna się Apache HTTP), możliwe jest, że wzrost mocy może uszkodzić plik binarny, ale wydaje się to mało prawdopodobne.
Wydaje mi się, że ludzie Maca Mini lubią odcinać się od zimna (bez względu na to, ile razy im powtarzam .....) i to trwa.
W większości przypadków, o ile nie polegasz regularnie na zabiciu -9 lub wyłączeniu zasilania, nie martwiłbym się zbytnio. W przeszłości było znacznie gorzej; Martwię się bardziej (na przykład) o Solaris 2.6 niż o Solaris 10 (i tak dalej).
źródło
„Zabij -9” nie zsynchronizuje oczekującej operacji we / wy. To często nie stanowi problemu, ale jeśli system jest obciążony dużym obciążeniem IO, możesz stracić dane.
Jest to bardziej problem z serwerami, na których kontroler RAID (bez pamięci podręcznej podtrzymywanej bateryjnie) może buforować zapisy i utratę danych.
Edycja : Jeszcze jedno ... jeśli zależysz od dysków podłączonych do sieci i masz otwarte uchwyty plików, najprawdopodobniej pozostawisz plik niespójny lub uszkodzony. W systemie Windows klasycznym przykładem tego jest sytuacja, gdy użytkownicy montują pliki PST programu Outlook na udziale i tracą moc lub łączność sieciową.
źródło