NAME
sync —
synchronize disk block in-core
status with that on disk
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
void
sync(
void);
DESCRIPTION
The
sync() function forces a write of dirty (modified) buffers
in the block buffer cache out to disk. The kernel keeps this information in
core to reduce the number of disk I/O transfers required by the system. As
information in the cache is lost after a system crash, kernel thread
ioflush ensures that dirty buffers are synced to disk
eventually. By default, a dirty buffer is synced after 30 seconds, but some
file systems exploit
ioflush features to sync directory data
and metadata faster (after 15 and 10 seconds, respectively).
The function
fsync(2) may be used
to synchronize individual file descriptor attributes.
CAUTIONS
Many modern disks contain write-back caches. In theory
sync()
flushes these. In practice there are many possible ways for this mechanism to
go astray. It is prudent (where possible) to allow a few seconds after syncing
for everything to settle before e.g. turning off the power.
It may also be desirable to use
dkctl(8) or
scsictl(8) to disable the
write-back cache entirely.
SEE ALSO
fsync(2),
dkctl(8),
scsictl(8),
sync(8)
HISTORY
A
sync() function call appeared in
Version 6 AT&T UNIX.
Historically,
sync() would schedule buffers for writing but
not actually wait for the writes to finish. It was necessary to issue a second
or sometimes a third call to ensure that all buffers had in fact been written
out. In
NetBSD,
sync() does not
return until all buffers have been written.