转:
1. 谁和谁同步?
2. 为什么要同步? 复制移动的过程不是同步的吗, 都发生了什么事情?
3. 内存和硬盘?
数据同步写入磁盘: sync
在 Linux 系统中, 为了加快数据的读取速度, 所以在默认的情况中, 某些已经加载内存中的数据将不会直接被写回硬盘, 而是先缓存在内存当中, 如此一来, 如果一个数据被你重复的改写, 那么由于他尚未被写入硬盘中, 因此可以直接由内存当中读取出来, 在速度上一定是快上相当多的!
不过, 如此一来也造成些许的困扰, 那就是万一你的系统因为某些特殊情况造成不正常关机 (例如停电或者是不小心踢到 power) 时, 由于数据尚未被写入硬盘当中, 哇! 所以就会造成数据的升级不正常啦! 那要怎么办呢? 这个时候就需要 sync 这个命令来进行数据的写入动作啦! 直接在文字接口下输入 sync, 那么在内存中尚未被升级的数据, 就会被写入硬盘中! 所以, 这个命令在系统关机或重新启动之前, 很重要喔! 最好多运行几次 (2-4 次)!
虽然目前的 shutdown/reboot/halt 等等命令均已经在关机前进行了 sync 这个工具的呼叫, 不过, 多做几次总是比较放心点~呵呵~
- [root@hotapply home]# sync
- [root@hotapply home]# sync
sync 命令 Linux 同步数据命令
格式: sync
用途: 更新 i-node 表, 并将缓冲文件写到硬盘中.
功能: sync 命令是在关闭 Linux 系统时使用的. 用户需要注意的是, 不能用简单的关闭电源的方法关闭系统, 因为 Linux 象其他 Unix 系统一样, 在内存中缓存了许多数据, 在关闭系统时需要进行内存数据与硬盘数据的同步校验, 保证硬盘数据在关闭系统时是最新的, 只有这样才能确保数据不会丢失. 一般正常的关闭系统的过程是自动进行这些工作的, 在系统运行过程中也会定时做这些工作, 不需要用户干预. sync 命令是强制把内存中的数据写回硬盘, 以免数据的丢失. 用户可以在需要的时候使用此命令.
sync 命令运行 sync 子例程. 如果必须停止系统, 则运行 sync 命令以确保文件系统的完整性. sync 命令将所有未写的系统缓冲区写到磁盘中, 包含已修改的 i-node, 已延迟的块 I/O 和读写映射文件.
Sync 命令
在用 reboot 命令启动 unix 系统 http://www.2cto.com/os/ 后, 系统提示出错信息, 部分应用程序不能正常工作. 经仔细检查系统文件, 并和初始的正确备份进行比较, 发现某些文件确实被破坏了, 翻来覆去找不到文件遭破坏的原因, 最后想到了写缓存命令 --sync, 在 reboot 前没有运行 sync 命令, 导致了系统文件的改变而不能正常工作. www.2cto.com
sync 命令的作用是, 将有关文件系统的存储器常驻信息送入物理介质内. 在暂停系统之前, 比如要重新启动机器, 一定要去执行 sync 命令. unix 系统运行经验表明, 为确保可靠起见, 应执行两遍 sync 命令, 这是因为 sync 命令完成时, 并不保证信息实际写到了磁盘上, 虽然已经执行了一遍这个命令. 在执行 sync 命令以后, 要等待磁盘工作灯灭了 (假定有系统工作指示灯的话), 再去真正暂停机器的运行或启动机器.
unix 系统遭受破坏是随时都可能发生的事情, 因此在启动机器或关机之前一定要运行 sync 命令. 记住在任何情况下, 慎重地执行 sync 命令决不会有任何坏处 www.2cto.com
umount 时间过长, sync 命令的使用
有一个问题, 比如 cp 一个文件到 SD 卡上, 是不是首先先将这个文件写到 SDRAM 上, 然后 umount 的时候再将 SDRAM 中的内容真正写 SD 卡上? 我 umount 的时候会过多一会才出现终端的提示符, 根据写入文件的大小确定 umount 的时间?
后来查了一下资料, Linux http://www.2cto.com/os/linux/ 文件系统更新是一个复杂的过程, 当用户程序对文件系统进行修改以后, 例如进行了写操作, 文件数据把修改记录在内核缓冲中, 在数据没有写到磁盘的时候, 依然能够执行用户进程, 所有数据的改变都在 inode 的内容中得到反映. 磁盘的数据更新实际上是异步进行的, 很有可能在写操作已经完成很长时间以后才真正对磁盘的数据进行更新.
sync 命令强制把磁盘缓冲的所有数据写入磁盘, 如果在没有把磁盘缓冲区的信息写入磁盘之前终止系统, 则磁盘的文件系统就会处在一个不稳定的状态. 而在正常模式下即使没有对分区进行 umount 的操作, 在重启之前系统会调用 sync 命令强制把磁盘缓冲的所有数据写入磁盘, 而在急救模式下必须对所挂的分区进行 umount 的操作, 系统才会调用 sync 命令强制把磁盘缓冲的所有数据写入磁盘, 请在急救模式下的朋友注意这个问题. 其实 "reboot -n(Don't sync before reboot or halt)" 在重启之前不用 sync 命令强制把磁盘缓冲的所有数据写入磁盘, 就很能说明问题. www.2cto.com
所以要 cp 完之后要执行 sync 命令将缓冲区的内容写到磁盘中, 然后再 umount 就不会出现延时了.
经验证, 采用此方法, 延迟写入问题可以解决
来源: http://www.bubuko.com/infodetail-2946419.html