¿Todavía se requiere la ejecución de sync (8) antes de cerrar Linux?

19

Todavía veo que la gente recomienda el uso de sync; sync; sync; sleep 30; haltencantamientos cuando se habla de apagar o reiniciar Linux.

He estado ejecutando Linux desde su inicio y, aunque este fue el procedimiento recomendado en el BSD 4.2 / 4.3 y SunOS 4 días, no recuerdo que tuve que hacerlo durante al menos los últimos diez años, durante los cuales probablemente pasó por el apagado / reinicio de Linux tal vez miles de veces.

Sospecho que esto es un anacronismo desde los días en que el núcleo no podía desmontar y sincronizar el sistema de archivos raíz y otros sistemas de archivos críticos necesarios incluso durante el modo de usuario único (por ejemplo, / tmp), y por lo tanto, era necesario decirle explícitamente que se vacíe tantos datos como sea posible al disco.

En estos días, sin encontrar todavía el código relevante en la fuente del kernel (buscando en http://lxr.linux.no y google), sospecho que el kernel es lo suficientemente inteligente como para desmontar limpiamente incluso el sistema de archivos raíz y el sistema de archivos es lo suficientemente inteligente hacer una sincronización efectiva (2) antes de desmontarse durante una shutdown/ reboot/ normal poweorff.

Esto "sync; sync; sync"solo es necesario en casos extremos donde el sistema de archivos no se desmontará limpiamente (por ejemplo, falla del disco físico) o el sistema está en un estado que solo forzando un reinicio directo (8) lo sacará de su congelamiento (por ejemplo, la carga también alto para permitirle programar el comando de apagado).

Tampoco hago el syncprocedimiento antes de desmontar dispositivos extraíbles, y nunca encuentro un problema.

Otro ejemplo: Xen permite que el DomU reciba un shutdowncomando desde el Dom0, esto se considera un "apagado limpio" sin que nadie tenga que iniciar sesión y escribir el mágico sync; sync; syncprimero.

¿Tengo razón o tuve la suerte de algunos miles de paradas del sistema?

Amos Shapira
fuente
¿Qué pasa con el montaje de un sistema de archivos de solo lectura como lectura / escritura? He montado rootfs como readonly y lo vuelvo a montar como read / write con este comando: mount -o remount, rw / y luego, cuando he cambiado rootfs, ejecuto mount -o remount, ro / pero veo algunos problemas cuando reviso fs con fsck ¿El segundo comando llama a SYNC antes de montar como solo lectura?

Respuestas:

18

La razón por la que la gente correría sync; syncantes de a haltes porque el haltcomando no apaga el sistema limpiamente en linuxes más antiguos. La forma correcta de hacer esto en los sistemas SYSVr4 siempre ha sido decirle a init que se mueva a un nivel de ejecución diferente.

BSD y SunOS 4 no son sistemas operativos SYSVr4, por eso difieren. Solaris (SunOS 5) es SYSVr4 y Linux selecciona los bits del estándar SYSVr4 que quiere usar.

El uso de detener es en realidad una forma bastante mala de hacerlo en la mayoría de UNIX (Linux es una de las excepciones) ya que en realidad no se ejecuta a través de los scripts de inicio para realizar cosas como detener procesos y desmontar discos, solo detiene el procesador.

Si se puede garantizar que usted no nunca, nunca utilizar cualquier tipo de sistema UNIX a Linux, puede seguir usando halt- si hay una posibilidad de que usted va a utilizar otros Unix, te recomiendo entrar en el hábito de usar init _runlevel_o shutdown.

El shutdowncomando en realidad le dice al initproceso que cambie su nivel de ejecución : al hacerlo, init luego procede a ejecutar cada uno de los scripts de inicio K * y S * init asociados con ese nivel de ejecución. Uno de los scripts en el nivel de ejecución 0 realiza el desmontaje de los sistemas de archivos.

En Linux, el haltcomando solo llama al shutdowncomando a menos que el nivel de ejecución ya sea 0 (apagado) o 6 (reinicio) de todos modos ; Así que no hay pérdida allí.

El acto de desmontar un sistema de archivos usando umountsincronizará los datos con el disco antes de desmontarlo.

Si ha estado ejecutando sync; sync; halten Linux, habrá estado de acuerdo con el estado del sistema de archivos porque los desarrolladores se han asegurado de que halthaga lo correcto ; sin embargo, sería más correcto usar:shutdown now

DaveG
fuente
Gracias por la explicación. Solo para aclarar lo que está diciendo: "¿los desarrolladores se han asegurado de que detener haga lo correcto" significa que "detener" también llama "sincronizar" o que ejecuta los scripts de inicio adecuados que eventualmente llaman "sincronizar"? ¿Qué pasa con estar en modo de usuario único y simplemente llamar a "detener"? ¿Estoy en lo cierto al suponer que el kernel de Linux es lo suficientemente inteligente como para no apagarse abruptamente, pero desmontará todos los sistemas de archivos antes de apagarse?
Amos Shapira
1
haltllamadas shutdownque llamadas umountque realiza una sincronización.
DaveG
Gracias DaveG. Entonces, ¿lo que está diciendo es que todo sucede a nivel de usuario y que el núcleo no desmontará ni sincronizará los sistemas de archivos por sí solo? En cualquier caso, parece que la ceremonia de "sincronización; apagado" es redundante hoy.
Amos Shapira
7

El uso de múltiples syncllamadas fue para permitir que el sistema operativo y los discos tengan tiempo para vaciar las colas de escritura. "sync; sync; sync"no fue considerado tan útil; uno lo hizo "sync<cr> sync<cr> sync<cr"y el retraso mientras su ASR-33 hizo el retorno de carro / nueva línea proporcionó suficiente retraso. La detención siempre llamaba a la sincronización; la pregunta era si habría suficiente tiempo para eliminar las colas antes de que se cortara el poder.

El póster original sync; sleep 30está más acorde con lo que se pretendía.

mpez0
fuente
7

Puedo solamente hablar de por qué usted debe ejecutar syncvarias veces. El comando programa el vaciado al disco pero regresa antes de que se complete el vaciado real. Cualquier synccomando posterior se bloqueará hasta que esté en progreso cualquier descarga pendiente antes de programar otra descarga y salir. Por lo tanto, sync; syncasegura un lavado sincrónico. No necesita hacerlo más de 2 veces, ni incorporarlo sleepa la mezcla.

jeberle
fuente
5

Aquellos de ustedes que nos dicen todo lo que "sincronizar; sincronizar; sincronizar" no tiene ningún propósito revelan su edad.

En los viejos tiempos, antes de que Unix fuera algo para adolescentes, solíamos tener que usar TAPE para nuestras necesidades de transmisión / respaldo. Muchas veces, montamos un sistema de archivos basado en cinta para transmitir copias de seguridad, etc. Esta banda larga y delgada de cinta magnética de plástico era todo lo que algunos de nosotros teníamos para almacenar nuestros archivos ...

El comando 'sync; sync; sync' era una forma en que se podía decir a estas viejas máquinas de cinta que se rebobinaran hasta el final (antes del apagado): tenían firmware incorporado que recibiría el cmd de sincronización (como todos los buenos sistemas de archivos) hacer), y si fue seguido casi de inmediato por otros dos comandos de búfer de sincronización, la propia unidad de cinta interpretaría que esto significa "rebobinar la cinta y desmontarla". No había ninguna manera de decirle a la unidad de cinta que se rebobinara, más allá de este método, y se quedó atascado. Este hábito pasó a la palabra cuando los discos duros estuvieron más disponibles: los viejos operadores no solo realloc ( ) nuestra memoria muscular ya sabes! Creo que alcanzó el estatus de folklore poco después de que las cintas se volvieran menos comunes y los discos duros se volvieran más disponibles, pero aún tiene sus usos para aquellos de nosotros con unidades de cinta.

Jay Vaughan
fuente
3
Las cintas son dispositivos de personajes. "mount" opera en dispositivos de bloque. He estado allí (ejecutando "dump" en Vax 11/750 con BSD 4.2 a mediados de los 80) y no había tal cosa y ejecutando "sync" en el dispositivo de cinta. La cinta se rebobinaría automáticamente si la abriera como un nombre de dispositivo y permaneciera donde estaba si la abriera con otro, y podría enviar comandos explícitos usando "mt" si fuera necesario.
Amos Shapira