A razão pela qual as pessoas executam sync; sync
antes de um halt
é porque o comando halt
não desligaria o sistema de forma limpa em linux mais antigos. A maneira correta de fazer isso em sistemas SYSVr4 sempre é dizer ao init para mover para um nível de execução diferente.
O BSD e o SunOS 4 não são sistemas operacionais SYSVr4 e é por isso que eles diferem. O Solaris (SunOS 5) é o SYSVr4 e o Linux escolhe bits do padrão SYSVr4 que deseja usar.
Usar o halt é realmente uma maneira muito ruim de fazer isso na maioria dos UNIXes (sendo o Linux uma das exceções), pois ele não executa os scripts init para executar tarefas como parar processos e desmontar discos - ele simplesmente pára o processo. processador.
Se você pode garantir que nunca jamais utilizará qualquer tipo de sistema UNIX, então você pode continuar usando halt
- se houver uma chance de usar outros UNIX, então eu recomendo adquirir o hábito de usar init _runlevel_
ou shutdown
.
O comando shutdown
informa o processo init
para alterar seu nível de execução nível de execução - ao fazê-lo, o init continua a executar cada um dos scripts do K * init e scripts S * init associados a esse nível de execução. Um dos scripts no nível de execução 0 realiza a desmontagem dos sistemas de arquivos.
No Linux, o comando halt
apenas chama o comando shutdown
, a menos que o nível de execução já seja 0 (desligando) ou 6 (reinicializando) de qualquer maneira ; então não há perda lá.
O ato de desmontar um sistema de arquivos usando umount
irá sincronizar os dados para o disco antes de desmontá-lo.
Se você estiver rodando sync; sync; halt
no Linux, você terá estado bem com o estado do sistema de arquivos porque os desenvolvedores garantiram que halt
faz a coisa correta ; no entanto, seria mais correto usar: shutdown now