Actualmente en Ubuntu Linux, pero también noté esto en otros sistemas operativos. Aparentemente, cualquier usuario puede ejecutar el sync
comando, pero ¿por qué es esto? Solo puedo ver la desventaja: el sistema se ralentiza debido a escrituras innecesarias en el disco.
¿Por qué puede ejecutar cada usuario sync
?
/bin/sync
como su shell, por lo que puede sincronizar sin iniciar sesión.sync
reduzcan el tiempo de espera entre llamadas (por ejemplo, en HP-Unix). La razón es evitar esperas innecesarias debido a las masas de escrituras pendientes que se escriben en el disco de una vez.Respuestas:
Hay muchas maneras para que un usuario no privilegiado reduzca la velocidad de un sistema y ejecutar la sincronización está lejos de ser más eficiente. Por otro lado, tener los datos del sistema de archivos comprometidos en el disco es una solicitud bastante legítima, por lo que prohibir a los usuarios (y, por lo tanto, sus procesos) hacerlo sería excesivo.
En cualquier caso, no estoy de acuerdo con su declaración de "escrituras de disco innecesarias". Estas escrituras son ciertamente necesarias y sucederán automáticamente después de un pequeño período de tiempo de todos modos.
Incluso no hay garantía de que la llamada de sincronización haga algo en particular dependiendo de su implementación. Llamar a sincronización es, como lo define el estándar POSIX , solo una "sugerencia" para que el sistema operativo limpie sus cachés del sistema de archivos, no necesariamente obliga a que los lavados ocurran de inmediato. Más precisamente, las llamadas solicitan al sistema operativo que programe un vaciado de caché, pero no hay garantía de que suceda antes de la hora ya programada, aunque la implementación de Linux espera a que ocurra antes de regresar.
Además, llamar a la sincronización varias veces seguidas no ralentizaría demasiado los sistemas, ya que una vez que se vacían los cachés, si ningún proceso está escribiendo activamente en los archivos, los cachés están vacíos, por lo que la sincronización no funciona.
Si realmente desea evitar que los usuarios ejecuten la sincronización en su sistema, puede ejecutar estos comandos:
Eso pasaría desapercibido para los usuarios y no tiene efectos negativos, excepto con las personas que simplemente ejecutan la sincronización y luego eliminan los dispositivos de almacenamiento (por ejemplo: memoria USB) sin desmontarlos, pero estos usuarios ya estaban actuando tontamente de todos modos.
Tenga en cuenta que no recomendaría el enlace anterior / bin / sync con / bin / true.
sync
es ciertamente útil en algunos casos. Por ejemplo, si temes que se produzca un cierre brutal (falta de energía, pánico del sistema, ...) en breve, eso ayudaría a preservar el contenido del sistema de archivos. Esto es lo que llamo una solicitud legítima.fuente
sync
binario es llamar a lasync()
función, así que (como dijo Bonsi Scott) lo que realmente estás preguntando es por qué el núcleo permite que los usuarios no privilegiados llamensync()
umount
que, sea cual sea el sistema operativo, siempre vacía los búferes (a menos que el disco haya desaparecido ...) en lugar de losync
cual no se garantiza que lo haga dependiendo del sistema operativo. Tenga en cuenta que Linuxsync
espera a que el vaciado sea efectivo, por lo que también se puede confiar en él.sync
no puede hacer ningún daño al sistema. Puede ralentizarlo, pero no más que ejecutar programas que acceden al disco. ¿Por qué debería ser restringido?Hay una buena razón para permitir que cualquier usuario ejecute
sync
. Esto es necesario si algunas operaciones deben realizarse en orden, incluso si el sistema se bloquea o pierde energía. Por ejemplo, considere un agente de transferencia de correo que recibe un correo electrónico. Una vez que ha escrito el archivo que contiene el correo electrónico en la cola, llamasync
, y solo entonces responde a la máquina de envío notificándole que se ha recibido el correo electrónico. Si no llamósync
, y la máquina receptora perdió energía justo después de enviar la notificación de recepción, pero antes de enviar el archivo al disco, se perdería el correo electrónico.Los sistemas operativos retrasan las escrituras en disco para mayor eficiencia. No pueden saber cuándo una aplicación realmente necesita que se realice la escritura. Por lo tanto, las aplicaciones tienen una forma de decirle al sistema operativo que escriba ahora, con
sync(1)
ysync(2)
yfsync(2)
.fuente