Причина люди работала бы 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
Использование нескольких sync
вызовы должны были позволить ОС и дисковое время сбрасывать очереди записи. "sync; sync; sync"
не считался этим полезным; каждый сделал "sync<cr> sync<cr> sync<cr"
и задержка, в то время как Ваш ASR-33 сделал возврат каретки / новая строка, обеспечила достаточно задержки. Останов всегда называл синхронизацию; вопрос состоял в том, будет ли там пора достаточно сбросить очереди, прежде чем питание было удалено.
Исходный плакат sync; sleep 30
больше в соответствии с тем, что было предназначено.
Я могу только рассказать, почему вы должны запускать sync
несколько раз. Команда планирует сброс на диск, но возвращается до завершения фактического сброса. Любая последующая команда sync
будет блокироваться до тех пор, пока не будет выполнена какая-либо незавершенная очистка, прежде чем запланировать еще одну очистку и выйти. Следовательно, sync; sync
обеспечивает синхронный сброс. Вам не нужно делать это более 2 раз, а также добавлять в микс sleep
.
Те из вас, кто говорит нам всем, что «sync; sync; sync» не имеет смысла, раскрывают ваш возраст.
В старые добрые времена, когда Unix еще не был чем-то для подростков, Раньше нам приходилось использовать TAPE для потоковой передачи / резервного копирования. Часто мы монтировали файловую систему на магнитной ленте для потоковой передачи резервных копий и так далее. Эта одна длинная тонкая полоса магнитной пластиковой ленты была всем, что было у некоторых из нас для хранения файлов ...
Команда «sync; sync; sync» была способом, которым эти старые ленточные машины можно было приказать перемотать все сами. путь до конца (до выключения) - у них была встроенная программа, которая получала команду sync (как и все хорошие файловые системы), и если почти сразу же последовали еще две команды буфера синхронизации, сам ленточный накопитель интерпретировал бы это значить "
Если ваша система вырождена, (например, /bin/sh
является init
), снова появляется старое поведение. halt
увидит, что ему неизвестен уровень запуска и не может дать команду на изменение уровня запуска, и фактически выполнит halt
системный вызов и немедленно остановит систему. Тем не менее, sync
теперь является синхронным (и существует как минимум с 2000 года), и вам не нужно запускать его несколько раз.
Во всех остальных случаях выдача sync
перед halt
не дает ничего полезного. Это тот случай, когда вы помните свою тренировку, а не то, почему она стоит за ней. В обычной системе есть фоновые задания, поэтому sync;sync;sync;halt
не сработало бы, если бы halt
немедленно отключил систему.
halt
вызовыshutdown
, который звонитumount
, который выполняет синхронизацию. – DaveG 21 February 2010 в 21:24