zoukankan      html  css  js  c++  java
  • linux I/O stack cache 强制刷新

    linux 存储子系统作为最为复杂的子系统之一,拥有很深的模块栈(如图),其中很多模块又有自己的缓存功能(如下图)。实际应用中,用户下发的数据停留在哪个缓存中,是否已经写入磁盘,这些操作对用户来说是个黑盒。如何确保数据已经写入磁盘,可以安全的复位或掉电设备,是用户比较关心的话题。

     
    linux IO cache stack中,除了上图中的page cache, inode cache, dir cache, buffer cache,还有fs journal、disk cache2种主要的缓存机制。
    缓存操作主要分2种:1)刷新(flush,或者叫同步);2)清除(free,或者叫回收)。
    下文列举一下以上缓存的主要操作方法。
    # 同步系统或文件的page cache, inode cache, dir cache, buffer cache,但不回收。
    # 另外,对于基于文件系统(文件操作)和不基于文件系统(如dd命令)访问磁盘同一block的2种方式,数据在buffer cache中分别cache,
    # 所以基于文件系统对文件进行修改,就算sync,数据也不会同步到不基于文件系统访问磁盘同一block的buffer cache。
    # 
    sync
    fsync file
     
    # 清除系统的已同步的page cache、buffer cache、dentries和 inode cache。
    # 对于没有同步的dirty cache,drop_caches不会清除.
    #
    echo 1 > /proc/sys/vm/drop_caches   # 清除 page cache和buffer cache
    echo 2 >/proc/sys/vm/drop_caches    # 清除 dentries和 inode cach
    
    # sync + drop_caches 2个操作合并
    #
    hdparm -f /dev/sda2 
    
    # 对于有journal机制的ext3、ext4文件系统,
    # 同步日志区并清空journal数据,同时也同步文件数据
    #
    umount /datadisk/
     
    # 同步日志区并清空journal数据,但不同步文件的修改数据
    #
    mount -r -o remount /dev/sda2 /datadisk/
     
    # 同步 disk buffer
    #
    hdparm -F /dev/sda2 

    --EOF--

  • 相关阅读:
    CentOS6.5配置MySQL主从同步
    CentOS6.5安装telnet
    linux 下安装Google Chrome (ubuntu 12.04)
    jdk w7环境变量配置
    JDBCConnectionException: could not execute query,数据库连接池问题
    注意开发软件的版本问题!
    linux mysql命令行导入导出.sql文件 (ubuntu 12.04)
    linux 下root用户和user用户的相互切换 (ubuntu 12.04)
    linux 下 vim 的使用 (ubuntu 12.04)
    linux 下安装配置tomcat-7 (ubuntu 12.04)
  • 原文地址:https://www.cnblogs.com/wahaha02/p/5919438.html
Copyright © 2011-2022 走看看