Obecnie na Ubuntu Linux, ale zauważyłem to również w innych systemach operacyjnych. Najwyraźniej każdy użytkownik może wykonać sync
polecenie - ale dlaczego? Widzę tylko wadę: spowolnienie systemu z powodu niepotrzebnego zapisu na dysku.
Dlaczego każdy użytkownik może wykonać sync
?
/bin/sync
jako powłoka, więc możesz synchronizować bez logowania.sync
skróciły czas oczekiwania między wywołaniami (np. W systemie HP-Unix). Powodem jest uniknięcie niepotrzebnego oczekiwania ze względu na masę zaległych zapisów zapisywanych jednocześnie na dysk.Odpowiedzi:
Istnieje wiele sposobów spowolnienia systemu przez nieuprzywilejowanego użytkownika, a synchronizacja nie jest wcale bardziej wydajna. Z drugiej strony, posiadanie danych systemu plików na dysku jest dość uzasadnionym żądaniem, więc zabranianie użytkownikom (a tym samym ich procesom) robienia tego byłoby nadmierne.
W każdym razie nie zgadzam się z twoim stwierdzeniem „niepotrzebne zapisywanie na dysku”. Te zapisy są z pewnością konieczne i i tak będą się automatycznie pojawiać po krótkim czasie.
Nie ma nawet gwarancji, że połączenie synchroniczne zrobi coś konkretnego w zależności od jego implementacji. Wywoływanie synchronizacji jest, jak definiuje standard POSIX , tylko „sugestią”, aby system operacyjny opróżnił pamięć podręczną systemu plików, niekoniecznie wymusza natychmiastowe wykonanie operacji opróżniania. Mówiąc dokładniej, połączenia proszą system operacyjny o zaplanowanie opróżnienia pamięci podręcznej, ale nie ma gwarancji, że nastąpi to przed już zaplanowanym czasem, chociaż implementacja Linuksa czeka, aż nastąpi przed powrotem.
Co więcej, wywoływanie synchronizacji wiele razy z rzędu nie spowolniłoby systemów tak bardzo, jak po opróżnieniu pamięci podręcznej, jeśli żaden proces nie zapisuje aktywnie plików, pamięci podręczne są puste, więc synchronizacja jest niemożliwa.
Jeśli naprawdę chcesz uniemożliwić użytkownikom synchronizację w systemie, możesz po prostu uruchomić następujące polecenia:
To byłoby w dużej mierze niezauważone przez użytkowników i nie ma żadnych negatywnych skutków, z wyjątkiem osób, które po prostu uruchamiają synchronizację, a następnie usuwają urządzenia pamięci masowej (np. Napęd USB thumbdrive) bez ich odmontowywania, ale ci użytkownicy i tak już postępowali głupio.
Zauważ, że nie poleciłbym poprzedniego linku / bin / sync z / bin / true.
sync
jest z pewnością przydatne w niektórych przypadkach. Na przykład, jeśli obawiasz się, że może nastąpić brutalne wyłączenie (brak zasilania, panika systemu, ...), pomoże to zachować zawartość systemów plików. To właśnie nazywam uzasadnioną prośbą.źródło
sync
robi plik binarny, to wywołaniesync()
funkcji, więc (jak powiedział Bonsi Scott) tak naprawdę pytasz, dlaczego jądro pozwala użytkownikom nieuprzywilejowanym dzwonićsync()
umount
, który bez względu na system operacyjny zawsze opróżnia bufory (chyba że dysk zniknie ...), async
nie gwarantuje, że zrobi to w zależności od systemu operacyjnego. Pamiętaj, że Linuxsync
czeka, aż kolor będzie skuteczny, więc można mu również zaufać.sync
nie może wyrządzić żadnej szkody systemowi. Może to spowolnić, ale nie bardziej niż uruchamianie programów uzyskujących dostęp do dysku. Dlaczego należy to ograniczyć?Istnieje dobry powód, aby zezwolić każdemu użytkownikowi na uruchomienie
sync
. Jest to konieczne, jeśli niektóre operacje muszą być wykonane w kolejności, nawet jeśli system ulegnie awarii lub utraci zasilanie. Rozważmy na przykład agenta przesyłania poczty, który odbiera wiadomość e-mail. Po zapisaniu pliku zawierającego wiadomość e-mail w buforze wywołujesync
i dopiero wtedy odpowiada na urządzenie wysyłające, powiadamiając go o otrzymaniu wiadomości e-mail. Jeśli nie zadzwonisync
, a urządzenie odbierające straci zasilanie tuż po wysłaniu powiadomienia o odbiorze, ale przed wysłaniem pliku na dysk, wiadomość e-mail zostanie utracona.Systemy operacyjne opóźniają zapisywanie na dysku w celu zwiększenia wydajności. Nie mogą wiedzieć, kiedy aplikacja naprawdę potrzebuje zapisu. Więc aplikacje otrzymują sposób powiadomić system operacyjny napisać teraz, z
sync(1)
isync(2)
afsync(2)
.źródło