En los sistemas operativos de la familia Unix, el comando sync permite sincronizar los datos de archivos en cache (memoria volátil) a disco (almacenamiento persistente) forzando la ejecución inmediata de todas las escrituras pendientes.

Todos los sistemas operativos utilizan algún mecanismo de cache y/o buffer de disco para mejorar el rendimiento y los tiempos de acceso a los mismos. Todo mecanismo de cache se basa en el concepto de localidad temporal, espacial y secuencial en los patrones de acceso a los datos. Mediante un mecanismo de cache en memoria volátil (de menor capacidad pero mayor velocidad de acceso) es posible mejorar los tiempos de acceso a discos. Esto conlleva a que a veces los datos en disco (almacenamiento persistente) se encuentren desactualizados respecto a las copias en cache. Si hubiera un fallo o corte de energía en uno de esos momentos, pueden perderse cambios en disco o incluso quedar inconsistentes. Es aquí cuando se puede recurrir a sync para forzar una sincronización de discos y que todas las escrituras pendientes (aún en cache) sean ejecutadas inmediatamente.

Por defecto el kernel Linux escribe los datos a disco de forma asincrónica. Las escrituras se hacen mediante un buffer o cache en memoria principal (RAM) y se envían a disco cuando sea oportuno. sync precisamente permite forzar todas estas escrituras a disco de forma inmediata.

Puede haber diferentes casos de uso de sync, no sólo para reflejar cambios importantes en disco y evitar eventuales fallos. Por ejemplo, es conveniente ejecutar sync: antes de clonar una máquina o disco virtual en uso; antes de suspender el sistema; antes de crear un backup de disco a bajo nivel; antes y después de correr una tarea crítica; antes de crear un snapshot; cuando se utilizan sistemas de archivos montados de forma remota (por ejemplo NFS); etc.

En los sistemas GNU/Linux o GNU+Linux, sync es provisto por el paquete coreutils. Cuando se corre sin parámetros, sincroniza todas las escrituras en cache de todos los discos:

# sync

La opción -d permite sincronizar sólo datos (excluyendo metadatos). A su vez, sync admite una ruta a un archivo como parámetro. Esto permite sincronizar sólo ese archivo o el sistema de archivos que lo contiene (agregando la opción -f.

Sin dudas otro de los comandos básicos que todo SysAdmin debe conocer.

Compartí este artículo