Выполнение синхронизации (8) все еще требуется прежде, чем закрыть Linux?

Некоторые хорошие советы могут также быть найдены на John D веб-сайт Повара.

19
задан 7 April 2016 в 00:51
5 ответов

Причина люди работала бы sync; sync прежде a halt то, потому что halt команда не завершила бы работу системы чисто на более старых Linux. Корректный способ сделать это в системах SYSVr4 имеет всегда, чтобы должным быть сказать init перемещаться в другой уровень выполнения.

BSD и SunOS 4 не являются операционными системами SYSVr4, который является, почему они отличаются. Солярис (SunOS 5) является SYSVr4, и Linux выбирает биты стандарта SYSVr4, который он хочет использовать.

Используя останов на самом деле довольно плохой способ сделать его на большей части UNIXes (Linux, являющийся одним из исключений), так как он на самом деле не пробегает init сценарии для выполнения вещей как остановка процессов и размонтирование дисков - он просто останавливает процессор.

Если можно гарантировать, что Вы никогда никогда не будете, использовать вида системы UNIX, чем Linux затем, можно продолжать использовать halt - если бы существует шанс, Вы собираетесь использовать другой UNIXes затем, я рекомендовал бы выработать привычку использования init _runlevel_ или shutdown.

shutdown команда на самом деле говорит init обработайте для изменения, его уровень выполнения уровня выполнения - при этом init затем продолжает выполнять каждый из K* init сценарии и S* init сценарии, связанные с тем уровнем выполнения. Один из сценариев на уровне выполнения 0 выполняет размонтирование файловых систем.

На Linux halt управляйте просто звонит shutdown управляйте, если уровень выполнения уже не 0 (закрывающийся) или 6 (перезагрузка) так или иначе; так никакая потеря там.

Действие размонтирования использования файловой системы umount будет синхронизировать данные к диску, прежде чем это размонтирует его.

Если Вы работали sync; sync; halt на Linux Вы будете хорошо с состоянием файловой системы, потому что разработчики гарантировали это halt делает правильную вещь; однако это было бы более корректно для использования: shutdown now

18
ответ дан 2 December 2019 в 20:17
  • 1
    Спасибо за объяснение. Просто для уточнения, что Вы говорите - " разработчики удостоверились, что останов делает право thing" средства это " halt" вызовы " sync" также или что это запускает надлежащие init скрипты, которые в конечном счете называют " sync"? что относительно того, чтобы уже быть в однопользовательском режиме и просто назвать " halt"? я корректен в своем предположении, что ядро Linux просто достаточно умно для не реального закрытий резко, но размонтирует все файловые системы перед закрытием? –  Amos Shapira 21 February 2010 в 13:16
  • 2
    halt вызовы shutdown, который звонит umount, который выполняет синхронизацию. –  DaveG 21 February 2010 в 21:24
  • 3
    Спасибо DaveG. Таким образом, то, что Вы говорите, - то, что все это происходит на уровне пользователя и ядре won' t umount и синхронизирующие файловые системы самостоятельно? В любом случае это походит на " синхронизация; shutdown" сегодня церемония избыточна. –  Amos Shapira 22 February 2010 в 03:15

Использование нескольких sync вызовы должны были позволить ОС и дисковое время сбрасывать очереди записи. "sync; sync; sync" не считался этим полезным; каждый сделал "sync<cr> sync<cr> sync<cr" и задержка, в то время как Ваш ASR-33 сделал возврат каретки / новая строка, обеспечила достаточно задержки. Останов всегда называл синхронизацию; вопрос состоял в том, будет ли там пора достаточно сбросить очереди, прежде чем питание было удалено.

Исходный плакат sync; sleep 30 больше в соответствии с тем, что было предназначено.

7
ответ дан 2 December 2019 в 20:17

Я могу только рассказать, почему вы должны запускать sync несколько раз. Команда планирует сброс на диск, но возвращается до завершения фактического сброса. Любая последующая команда sync будет блокироваться до тех пор, пока не будет выполнена какая-либо незавершенная очистка, прежде чем запланировать еще одну очистку и выйти. Следовательно, sync; sync обеспечивает синхронный сброс. Вам не нужно делать это более 2 раз, а также добавлять в микс sleep .

7
ответ дан 2 December 2019 в 20:17

Те из вас, кто говорит нам всем, что «sync; sync; sync» не имеет смысла, раскрывают ваш возраст.

В старые добрые времена, когда Unix еще не был чем-то для подростков, Раньше нам приходилось использовать TAPE для потоковой передачи / резервного копирования. Часто мы монтировали файловую систему на магнитной ленте для потоковой передачи резервных копий и так далее. Эта одна длинная тонкая полоса магнитной пластиковой ленты была всем, что было у некоторых из нас для хранения файлов ...

Команда «sync; sync; sync» была способом, которым эти старые ленточные машины можно было приказать перемотать все сами. путь до конца (до выключения) - у них была встроенная программа, которая получала команду sync (как и все хорошие файловые системы), и если почти сразу же последовали еще две команды буфера синхронизации, сам ленточный накопитель интерпретировал бы это значить "

5
ответ дан 2 December 2019 в 20:17

Если ваша система вырождена, (например, /bin/shявляется init), снова появляется старое поведение. haltувидит, что ему неизвестен уровень запуска и не может дать команду на изменение уровня запуска, и фактически выполнит haltсистемный вызов и немедленно остановит систему. Тем не менее, syncтеперь является синхронным (и существует как минимум с 2000 года), и вам не нужно запускать его несколько раз.

Во всех остальных случаях выдача syncперед haltне дает ничего полезного. Это тот случай, когда вы помните свою тренировку, а не то, почему она стоит за ней. В обычной системе есть фоновые задания, поэтому sync;sync;sync;haltне сработало бы, если бы haltнемедленно отключил систему.

0
ответ дан 24 November 2021 в 16:44

Теги

Похожие вопросы