Nadal widzę, że ludzie zalecają stosowanie sync; sync; sync; sleep 30; halt
inkantacji, gdy mówią o wyłączeniu lub ponownym uruchomieniu Linuxa.
Używam Linuksa od jego powstania i chociaż była to zalecana procedura w BSD 4.2 / 4.3 i SunOS 4 dni, nie mogę sobie przypomnieć, że musiałem to robić przez co najmniej dziesięć ostatnich lat, podczas których prawdopodobnie przeszedł przez zamknięcie / ponowne uruchomienie Linuksa może tysiące razy.
Podejrzewam, że jest to anachronizm od czasów, gdy jądro nie mogło odmontować i zsynchronizować głównego systemu plików i innych krytycznych systemów plików wymaganych nawet w trybie pojedynczego użytkownika (np. / Tmp), i dlatego konieczne było wyraźne poinformowanie go o konieczności opróżnienia jak najwięcej danych na dysk.
Obecnie, nie znajdując jeszcze odpowiedniego kodu w źródle jądra (przeglądając http://lxr.linux.no i google), podejrzewam, że jądro jest wystarczająco inteligentne, aby czysto odmontować nawet główny system plików, a system plików jest wystarczająco inteligentny aby skutecznie wykonać synchronizację (2) przed odmontowaniem się podczas normalnego shutdown
/ reboot
/ poweorff
.
Jest "sync; sync; sync"
to konieczne tylko w skrajnych przypadkach, gdy system plików nie odmontuje się czysto (np. Awaria dysku fizycznego) lub system jest w stanie, że wymuszenie bezpośredniego ponownego uruchomienia (8) spowoduje jego zawieszenie (np. Obciążenie jest zbyt duże high, aby zaplanować polecenie zamknięcia).
Nigdy też nie wykonuję tej sync
procedury przed odmontowaniem urządzeń wymiennych i nigdy nie napotkałem problemu.
Kolejny przykład - Xen pozwala DomU na wysłanie shutdown
polecenia z Dom0, jest to uważane za „czyste zamknięcie” bez konieczności logowania się i wpisywania magicznej nazwy sync; sync; sync
.
Czy mam rację, czy miałem szczęście przez kilka tysięcy wyłączeń systemu?
źródło
Odpowiedzi:
Powodem, dla którego ludzie uruchamiali się
sync; sync
przed a,halt
jest to, żehalt
polecenie nie zamknęło systemu czysto na starszych linuksach. Prawidłowym sposobem na to w systemach SYSVr4 jest zawsze polecenie initowi przejścia na inny poziom działania.BSD i SunOS 4 nie są systemami operacyjnymi SYSVr4, dlatego się różnią. Solaris (SunOS 5) to SYSVr4, a Linux wybiera elementy standardu SYSVr4, z których chce korzystać.
Użycie zatrzymania jest w rzeczywistości dość złym sposobem na zrobienie tego w większości UNIXÓW (Linux jest jednym z wyjątków), ponieważ tak naprawdę nie uruchamia się przez skrypty inicjujące, aby wykonywać takie czynności, jak zatrzymywanie procesów i odmontowywanie dysków - po prostu zatrzymuje procesor.
Jeśli możesz zagwarantować, że nigdy , nigdy nie użyjesz systemu UNIX innego niż Linux, możesz go nadal używać
halt
- jeśli istnieje szansa, że będziesz używać innych systemów UNIX, to polecam nabrać zwyczaju używaniainit _runlevel_
lubshutdown
.shutdown
Komenda faktycznie opowiadainit
proces, aby zmienić jej poziom run poziomu pracy - w ten sposób startowych następnie przechodzi do uruchomienia każdego z K * skryptów startowych i S * skryptów startowych związanych z tym poziomie roboczym. Jeden ze skryptów na poziomie 0 wykonuje odmontowywanie systemów plików.Na Linuksem
halt
polecenie tylko wywołujeshutdown
polecenie, chyba że poziom prowadzony jest już 0 (w dół zamykając) lub 6 (restartu) w każdym razie ; więc nie ma tam strat.Czynność odmontowania systemu plików
umount
spowoduje zsynchronizowanie danych z dyskiem przed jego odmontowaniem.Jeśli korzystasz
sync; sync; halt
z Linuksa, jesteś w porządku ze stanem systemu plików, ponieważ programiści zapewnili, żehalt
robi to dobrze ; jednak bardziej poprawne byłoby użycie:shutdown now
źródło
halt
połączenia,shutdown
które wywołujeumount
synchronizację.Wykorzystanie wielu
sync
wywołań miało pozwolić systemowi operacyjnemu i dyskom na opróżnienie kolejek zapisu."sync; sync; sync"
nie było uważane za przydatne; jeden zrobił"sync<cr> sync<cr> sync<cr"
i opóźnienie, podczas gdy twój ASR-33 zrobił powrót karetki / nowej linii, zapewnił wystarczające opóźnienie. Halt zawsze synchronizował połączenia; pytanie brzmiało, czy będzie wystarczająco dużo czasu, aby opróżnić kolejki przed odłączeniem zasilania.Oryginalny plakat
sync; sleep 30
jest bardziej zgodny z tym, co było zamierzone.źródło
Mogę tylko powiedzieć, dlaczego wydałeś
sync
wiele razy. Polecenie planuje opróżnianie na dysk, ale powraca przed zakończeniem faktycznego opróżniania. Każde kolejnesync
polecenie będzie blokowane, dopóki nie zaliczy się zaległy kolor przed zaplanowaniem kolejnego koloru i zakończeniem. Dlategosync; sync
zapewnia synchroniczne spłukiwanie. Nie musisz robić tego więcej niż 2 razy anisleep
mieszać.źródło
Ci z was, którzy mówią nam, że „synchronizacja; synchronizacja; synchronizacja” nie ma sensu ujawniać waszego wieku.
W dawnych dobrych czasach, zanim Unix był czymś przeznaczonym dla nastolatków, musieliśmy używać TAPE do naszych potrzeb w zakresie przesyłania strumieniowego / tworzenia kopii zapasowych. Często montowaliśmy system plików oparty na taśmie, aby przesyłać strumieniowo kopie zapasowe i tak dalej. Ten jeden długi cienki pasek magnetycznej taśmy z tworzywa sztucznego był wszystkim, który mieliśmy, do przechowywania naszych plików ...
Polecenie „sync; sync; sync” było sposobem, w jaki te stare maszyny taśmowe mogły zostać poproszone o przewinięcie się do samego końca (przed zamknięciem) - mieli na pokładzie oprogramowanie, które odbierałoby cmd synchronizacji (jak wszystkie dobre systemy plików do), a gdyby prawie natychmiast po nim nastąpiły dwa kolejne polecenia bufora synchronizacji, sam napęd taśm interpretowałby to jako „przewinięcie taśmy i odmontowanie”. Nie było żadnego sposobu, aby powiedzieć napędowi taśmowemu, aby przewinął do tyłu, poza tą metodą, i to utknęło. Ten zwyczaj przeszedł do słowa, gdy dyski twarde stały się bardziej dostępne - nasi cholerni starzy operatorzy nie tylko zmieniają położenie ( ) nasza pamięć mięśni, wiesz! Wierzę, że osiągnął status folkloru wkrótce po tym, jak taśmy stały się mniej popularne, a dyski twarde stały się bardziej dostępne, ale nadal ma zastosowanie dla tych z nas, którzy mają napędy taśmowe.
źródło