<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Sync_%28Unix%29</id>
	<title>Sync (Unix) - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Sync_%28Unix%29"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Sync_(Unix)&amp;action=history"/>
	<updated>2026-07-12T23:53:35Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Sync_(Unix)&amp;diff=2008895&amp;oldid=prev</id>
		<title>imported&gt;Cewbot：​清理跨語言連結卸载成為內部連結:編輯摘要的red link經繁簡轉換後存在</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Sync_(Unix)&amp;diff=2008895&amp;oldid=prev"/>
		<updated>2022-10-15T07:42:16Z</updated>

		<summary type="html">&lt;p&gt;清理跨語言連結&lt;a href=&quot;/wiki/%E6%8C%82%E8%BD%BD_(%E8%AE%A1%E7%AE%97%E6%9C%BA)&quot; class=&quot;mw-redirect&quot; title=&quot;挂载 (计算机)&quot;&gt;卸载&lt;/a&gt;成為內部連結:編輯摘要的red link經繁簡轉換後存在&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:sync}}&lt;br /&gt;
{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;sync&amp;#039;&amp;#039;&amp;#039;（意指Synchronize，即“同步”）为[[UNIX]][[操作系统]]的标准[[系统调用]]，功能为将[[内核]][[文件系统]][[缓冲区]]的所有数据（也即预定将通过低级[[I/O]]系统调用{{notetag|在此需要注意的是，高级[[I/O]]层（如[[stdio]]）可能使用自行维护的缓冲区。}}写入存储介质的数据）写入存储介质（如硬盘）。&lt;br /&gt;
&lt;br /&gt;
作为[[C语言]]的函数之一，&amp;lt;tt&amp;gt;sync()&amp;lt;/tt&amp;gt;一般以&amp;lt;tt&amp;gt;void sync(void)&amp;lt;/tt&amp;gt;的形式在&amp;lt;tt&amp;gt;unistd.h&amp;lt;/tt&amp;gt;内声明。该函数也可以从[[命令行]]执行sync命令的方式调用，同时在其他程序语言（如[[Perl]]）中也有名字与之相似的函数。&lt;br /&gt;
&lt;br /&gt;
== 相关调用 ==&lt;br /&gt;
&lt;br /&gt;
UNIX中还有一些与&amp;lt;tt&amp;gt;sync&amp;lt;/tt&amp;gt;相似的系统调用，如&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;与&amp;lt;tt&amp;gt;fdatasync&amp;lt;/tt&amp;gt;。其中&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;负责写入所有与特定[[文件描述符]]相关的缓冲区数据&amp;lt;ref&amp;gt;{{Cite web |url=http://www.opengroup.org/onlinepubs/007908775/xsh/fsync.html |title=fsync specification |accessdate=2012-12-28 |archive-date=2010-10-31 |archive-url=https://web.archive.org/web/20101031185517/http://opengroup.org/onlinepubs/007908775/xsh/fsync.html |dead-url=no }}&amp;lt;/ref&amp;gt;；&amp;lt;tt&amp;gt;fdatasync&amp;lt;/tt&amp;gt;功能与&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;相似，但只负责写入文件中被变更的数据，而不会修改文件的元数据（如文件属性）&amp;lt;ref&amp;gt;{{Cite web |url=http://www.opengroup.org/onlinepubs/007908775/xsh/fdatasync.html |title=fdatasync specification |accessdate=2012-12-28 |archive-date=2009-08-28 |archive-url=https://web.archive.org/web/20090828131649/http://www.opengroup.org/onlinepubs/007908775/xsh/fdatasync.html |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 在系统中的应用 ==&lt;br /&gt;
&lt;br /&gt;
UNIX内核常会运行一些诸如flush或update之类的[[守护进程]]以将缓冲区数据写入目标，而这些进程都要调用&amp;lt;tt&amp;gt;sync&amp;lt;/tt&amp;gt;函数；在其他某些操作系统上这类任务由[[cron]]完成，而在[[Linux]]上负责者则为守护进程pdflush&amp;lt;ref&amp;gt;{{Cite web |url=http://www.westnet.com/~gsmith/content/linux-pdflush.htm |title=The Linux Page Cache and pdflush |accessdate=2012-12-28 |archive-date=2009-11-24 |archive-url=https://web.archive.org/web/20091124161604/http://www.westnet.com/~gsmith/content/linux-pdflush.htm |dead-url=no }}&amp;lt;/ref&amp;gt;。在[[挂载 (计算机)|卸载]]或以[[文件系统权限|只读]]权限重载文件系统时，系统也会将缓冲区内容写入存储介质。&lt;br /&gt;
&lt;br /&gt;
== 数据库中的应用 ==&lt;br /&gt;
&lt;br /&gt;
在对数据进行修改操作（包括增、删、改）时，被修改的数据一般仅是暂存于基于内存的写入缓存，而当掉电时这些修改便会丢失；而为保证数据的[[持久性]]，数据库必须使用某些形式的&amp;lt;tt&amp;gt;sync&amp;lt;/tt&amp;gt;，以确保修改的内容切实写入[[非易失性存储器]]，如[[PostgreSQL]]就使用了多种&amp;lt;tt&amp;gt;sync&amp;lt;/tt&amp;gt;类调用（包括&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;与&amp;lt;tt&amp;gt;fdatasync&amp;lt;/tt&amp;gt;）来达到这一目的&amp;lt;ref&amp;gt;{{Cite web |url=http://www.postgresql.org/docs/current/static/wal.html |title=PostgreSQL Reliability and the Write-Ahead Log |accessdate=2012-12-28 |archive-date=2012-12-29 |archive-url=https://web.archive.org/web/20121229192400/http://www.postgresql.org/docs/current/static/wal.html |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
但是，对于旋转寻道的硬盘来说，每次旋转只能完成一项“提交”操作以将客户端的修改写入，因此每秒最多只能完成几百次的“提交”操作&amp;lt;ref&amp;gt;{{Cite web |url=http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm |title=Tuning PostgreSQL WAL Synchronization |accessdate=2012-12-28 |archive-date=2009-11-25 |archive-url=https://web.archive.org/web/20091125043111/http://www.westnet.com/~gsmith/content/postgresql/TuningPGWAL.htm |dead-url=no }}&amp;lt;/ref&amp;gt;；而若关闭&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;的限定来放宽要求，则可大幅提升性能，但同时也会带来系统崩溃后{{Tsl|en|Data corruption|数据损毁|数据库损毁}}的潜在危险。有鉴于此，数据库也使用囊括最近修改信息的{{Tsl|en|Transaction log|事务日志|日志文件}}（一般比主题数据文件小得多）来保障可靠性：根据日志文件，系统管理员可以在系统崩溃后准确地重做修改操作，以此即可减少对主要数据文件的&amp;lt;tt&amp;gt;sync&amp;lt;/tt&amp;gt;操作。&lt;br /&gt;
&lt;br /&gt;
== 相关争议 ==&lt;br /&gt;
&lt;br /&gt;
在默认情况下，硬盘一般使用自有的易失性写入缓存以缓存要写入的数据。这一做法可以大幅提升性能，但同时也会带来写入操作丢失的潜在风险&amp;lt;ref&amp;gt;{{Cite web |url=http://www.jasonbrome.com/blog/archives/2004/04/03/writecache_enabled.html |title=Write-Cache Enabled? |accessdate=2012-12-28 |archive-date=2012-12-17 |archive-url=https://web.archive.org/web/20121217222911/http://www.jasonbrome.com/blog/archives/2004/04/03/writecache_enabled.html |dead-url=no }}&amp;lt;/ref&amp;gt;，不过开/关缓存的性能落差的确相当巨大，甚至连素来保守的[[FreeBSD]]社群为此也否决了在FreeBSD 4.3内默认关闭写入缓存（即是说，修改后直接调用&amp;lt;tt&amp;gt;sync&amp;lt;/tt&amp;gt;写入硬盘）的提案&amp;lt;ref&amp;gt;{{Cite web |url=http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-disk.html#AEN16830 |title=FreeBSD Handbook — Tuning Disks |accessdate=2012-12-28 |archive-date=2012-12-24 |archive-url=https://web.archive.org/web/20121224055809/http://www.freebsd.org///doc/en_US.ISO8859-1/books/handbook/configtuning-disk.html#AEN16830 |dead-url=no }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
另外，在[[Firefox]]引入&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;调用的目的以保证其内嵌的[[SQLite]]数据库的完整性后，便有人指出&amp;lt;tt&amp;gt;fsync&amp;lt;/tt&amp;gt;降低了Firefox 3.0的性能&amp;lt;ref&amp;gt;{{cite web|author=Mike Shaver|url=http://shaver.off.net/diary/2008/05/25/fsyncers-and-curveballs/|title=fsyncers and curveballs|accessdate=2012-12-28|archive-date=2012-12-09|archive-url=https://web.archive.org/web/20121209115158/http://shaver.off.net/diary/2008/05/25/fsyncers-and-curveballs/|dead-url=no}}&amp;lt;/ref&amp;gt;；而[[Linux基金会]]的[[首席技术官|技术总监]][[西奥多·周]]则在“Don&amp;#039;t fear the fsync!”一文中讨论了fsync的性能表现，并表示“没有必要害怕fsync”&amp;lt;ref&amp;gt;{{cite web|url=http://www.linuxfoundation.jp/news-media/blogs/browse/2009/03/don’t-fear-fsync|title=Don&amp;#039;t fear the fsync!|first=Theodore|last=Ts&amp;#039;o|date=2009-03-16|deadurl=yes|archiveurl=https://web.archive.org/web/20160403043326/http://www.linuxfoundation.jp/news-media/blogs/browse/2009/03/don%E2%80%99t-fear-fsync|archivedate=2016-04-03|accessdate=2017-09-06}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 注释 ==&lt;br /&gt;
{{notefoot}}&lt;br /&gt;
&lt;br /&gt;
== 参考资料 ==&lt;br /&gt;
{{Reflist|2}}&lt;br /&gt;
&lt;br /&gt;
[[Category:数据同步]]&lt;br /&gt;
[[Category:标准Unix程序]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Cewbot</name></author>
	</entry>
</feed>