Я все еще вижу, что люди рекомендуют использовать sync; sync; sync; sleep 30; halt
заклинания, когда говорят о закрытии или перезагрузке Linux.
Я использую Linux с самого начала, и хотя это было рекомендуемой процедурой в BSD 4.2 / 4.3 и SunOS 4 дня, я не могу вспомнить, что мне приходилось делать это как минимум в течение последних десяти лет, в течение которых я, вероятно, проходил выключение / перезагрузку Linux может быть тысячи раз.
Я подозреваю, что это анахронизм со времен, когда ядро не могло размонтировать и синхронизировать корневую файловую систему и другие критически важные файловые системы, требуемые даже в однопользовательском режиме (например, / tmp), и поэтому необходимо было явно указать ему сбросить как можно больше данных на диск.
В наши дни, пока не найдя соответствующий код в исходном коде ядра (копаясь в http://lxr.linux.no и google), я подозреваю, что ядро достаточно умен, чтобы безошибочно демонтировать даже корневую файловую систему, а файловая система достаточно умен. эффективно выполнить синхронизацию (2) перед размонтированием себя во время нормального shutdown
/ reboot
/ poweorff
.
Это "sync; sync; sync"
необходимо только в крайних случаях, когда файловая система не будет размонтирована без ошибок (например, сбой физического диска) или система находится в состоянии, когда только принудительная перезагрузка (8) выведет ее из заморозки (например, нагрузка слишком велика). высоко, чтобы позволить ему запланировать команду выключения).
Я также никогда не выполняю эту sync
процедуру, прежде чем размонтировать съемные устройства, и никогда не сталкиваюсь с проблемой.
Другой пример - Xen позволяет DomU отправлять shutdown
команду из Dom0, это считается «чистым завершением», при котором никто не должен входить в систему и sync; sync; sync
сначала вводить магический код .
Я прав или мне повезло несколько тысяч отключений системы?
источник
Ответы:
Причина, по которой люди запускаются
sync; sync
раньше,halt
заключается в том, чтоhalt
команда не будет корректно завершать работу системы на старых Linux. Правильный способ сделать это в системах SYSVr4 всегда должен указывать init переходить на другой уровень выполнения.BSD и SunOS 4 не являются операционными системами SYSVr4, поэтому они отличаются. Solaris (SunOS 5) - это SYSVr4, и Linux выбирает биты стандарта SYSVr4, которые он хочет использовать.
Использование halt на самом деле является довольно плохим способом сделать это в большинстве UNIX (Linux является одним из исключений), так как он фактически не запускается через сценарии инициализации для выполнения таких вещей, как остановка процессов и размонтирование дисков - он просто останавливает процессор.
Если вы можете гарантировать, что никогда и никогда не будете использовать какую-либо систему UNIX, кроме Linux, тогда вы можете продолжать использовать
halt
- если есть вероятность, что вы собираетесь использовать другие UNIX, то я бы порекомендовал привыкнуть к использованиюinit _runlevel_
илиshutdown
,Команда
shutdown
фактически указываетinit
процессу изменить свой уровень запуска уровня выполнения - при этом init затем продолжает выполнение каждого из сценариев K * init и сценариев S * init, связанных с этим уровнем запуска. Один из сценариев на уровне выполнения 0 выполняет размонтирование файловых систем.На Линуксе
halt
команда просто вызываетshutdown
команду , если уровень выполнения уже не является 0 (закрытие) или 6 (перезагрузка) в любом случае ; так что без потерь.Акт размонтирования файловой системы с помощью
umount
синхронизирует данные на диск перед размонтированием.Если вы работали
sync; sync; halt
в Linux, у вас все будет в порядке с состоянием файловой системы, потому что разработчики убедились, чтоhalt
это правильно ; однако было бы правильнее использовать:shutdown now
источник
halt
звонкиshutdown
какие звонкиumount
которые выполняет синхронизацию.Использование нескольких
sync
вызовов состояло в том, чтобы дать ОС и дискам время для очистки очередей записи."sync; sync; sync"
не считал это полезным; один сделал,"sync<cr> sync<cr> sync<cr"
и задержка, в то время как ваш ASR-33 сделал возврат каретки / перевод строки, обеспечил достаточно задержки. Halt всегда вызывал sync; вопрос заключался в том, будет ли достаточно времени, чтобы очистить очереди, прежде чем отключить питание.Оригинальный постер
sync; sleep 30
больше соответствует тому, что предполагалось.источник
Я могу говорить только о том, почему вы выпускаете
sync
несколько раз. Команда планирует сброс на диск, но возвращается до завершения фактической очистки. Любая последующаяsync
команда будет блокироваться до тех пор, пока не будет выполнен какой-либо ожидающий сброс, прежде чем запланировать еще один сброс и выйти. Следовательно,sync; sync
обеспечивается синхронный сброс. Вам не нужно делать это более 2 раз, ни вноситьsleep
в смесь.источник
Те из вас, кто говорит нам, что «синхронизация; синхронизация; синхронизация» не имеет никакой цели, раскрывают свой возраст.
В прежние добрые времена, до того, как Unix был чем-то для подростков, мы привыкли использовать TAPE для наших потоковых / резервных копий. Часто мы монтировали файловую систему на ленте для потокового резервного копирования и т. Д. Эту длинную тонкую ленту из магнитопластика нам всем хватало для хранения наших файлов ...
Команда 'sync; sync; sync' позволила этим старым ленточным машинам полностью перемотать себя до конца (до выключения) - на них было встроенное программное обеспечение, которое получало бы команду sync cmd (как и все хорошие файловые системы). do), и если за ним почти сразу последовали еще две команды буфера синхронизации, сам накопитель на магнитной ленте интерпретировал бы это как «перемотать ленту и размонтировать ее». Не было никакого способа сказать перемотке стримера, кроме этого метода, и он как бы застрял ... Эта привычка затем перешла в слово, когда жесткие диски стали более доступными - мы, старые твердые операторы, не просто перераспределяем ( ) нашу мышечную память ты знаешь! Я полагаю, что он достиг фольклорного статуса вскоре после того, как ленты стали менее распространенными и жесткие диски стали более доступными, но он все еще имеет свое применение для тех из нас, кто использует ленточные накопители.
источник