atime、mtime、ctime的区别及如何降低atime更新 mount时的option  noatime

http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3NA==&mid=400742435&idx=1&sn=d5fa0776ebce30be1de897cd7d1eb295&scene=0#wechat_redirect

一、每个文件内节点和目录内节点都有三个与之相关的时间戳:

ctime — 最后一次修改inode属性的时间
mtime — 最后一次修改文件(或者目录)数据的时间
atime — 最后一次访问文件(或者目录)数据的时间

你可以通过stat来查看文件的mtime,ctime,atime等属性,也可以通过ls命令来查看,具体如下:
stat filename

ls命令查看:
ls -lc filename 列出文件的 ctime

ls -lu filename 列出文件的 atime

ls -l filename 列出文件的 mtime  ll 查看的是mtime

二、atime更新的一些问题及解决方法

如果启用了 atime 更新,因为在 GFS2 和其它 Linux 文件系统中这是默认设置,那么每次在读取文件时都需要更新其内节点  inode

根据 POSIX 的规定,Linux 以及 Unix 等系统都要为系统中的所有文件记录文件的最后访问时间,叫做 atime。对于某些应用来说,atime 是很重要的信息。比如一些邮件程序会通过邮件文件的 atime 来判断此邮件是否已读;一些备份和清理程序会根据文件在多长时间内没有被访问,来决定是否对文件进行清理和归档。

但是对于大部分应用来说,atime 信息并不重要,而系统更新 atime 所带来的开销却是巨大的。因为系统每访问一次某个文件,就要对这个文件更新一个新的 atime 时间值。我这里所说的访问,并不是从用户角度来看的打开一个文件,而是系统底层的每一次 open 和 read 等操作。设想一下,我们每对文件进行一次读操作,都要引起一个对磁盘的写操作,即使我们要读的内容已经存在于内存的 Page Cache 中,还是要对磁盘进行一个写操作。这样引起的开销确实是巨大的,这些写操作会使磁盘更多的处于忙碌状态,这对系统性能(因为磁盘在完成一个写操作的时候会暂时阻止其他的写操作)以及电量消耗都是不利的。

有两个可用来降低 atime 更新效果的方法:

1)使用 noatime 挂载

使用 noatime 挂载,可在那个文件系统中禁用 atime 更新。

当挂载文件系统时,可指定 Linux 挂载选项 noatime,它可在那个文件系统中禁用 atime 更新。

用法

mount BlockDevice MountPoint -o noatime

BlockDevice
指定 GFS2 文件系统所在的块设备。

MountPoint
指定要挂载 GFS2 文件系统的目录。

示例

在这个示例中,GFS2 文件系统位于 /dev/vg01/lvol0,并挂载到关闭了 atime 更新的 /mygfs2 目录中。

mount /dev/vg01/lvol0 /mygfs2 -o noatime

也可以将 noatime 选项写在 /etc/fstab 文件里。

如果不想对整个文件系统禁止 atime 更新,而只是想针对某些文件或目录禁止,则可以通过 chattr 命令来完成,如下面的命令:

chattr -R +A /some/dir

可以对某个目录及其下面的所有文件禁止 atime 更新。

除了 noatime,还有两个和 atime 相关的文件系统选项。一个是 nodiratime,此选项只针对目录禁止进行 atime 更新(注意 noatime 对文件和目录都生效,是 nodiratime 的超集)。这样就可以使 ls这样的命令不会更新目录的 atime 值。

对于某些用户某些应用,atime 信息可能是必要的,比如本节一开始提到的邮件程序和备份工具。如果完全禁止 atime 更新会使这些程序无法正常工作。针对这种情况,Linux 在内核 2.6.20 中添加了一个新的 mount 选项 relatime(relative atime 的意思)。relatime 的意思是访问文件时,仅在 atime 早于文件的更改时间时对 atime 进行更新。在内核 2.6.24 中,又对 relatime 进行了扩展,在访问文件时,当 atime 已经超过某个时间(例如一天)没有更新,就对 atime 进行更新。这个扩展的意思就是调整 atime 的更新粒度。

目前 relatime 还没有被广泛的应用,因为许多 Linux 发行版的内核版本和 mount 命令还没有支持这个选项。如果你的系统支持 relatime,可以使用方法2

atime、mtime、ctime的区别及如何降低atime更新 mount时的option noatime的更多相关文章

  1. linux中文件的时间属性atime/mtime/ctime

    文件的时间属性的概念 上图第7-9是时间,默认是ctime(文件修改时间),有三种时间属性: modify time        mtime       (文件内容被修改的时间) change ti ...

  2. atime,mtime,ctime 的理解

    Linux之atime,mtime,ctime from:http://blog.sina.com.cn/s/blog_5980699f0100zkgz.html 首先可以使用stat 命令来查询文件 ...

  3. linux中文件的三种time(atime,mtime,ctime)

    linux下文件有3个时间的,分别是atime,mtime,ctime.有些博友对这3个时间还是比较迷茫和困惑的,我整理了下,写下来希望对博友们有所帮助. 1 这三个time的含义 简名 全名 中文名 ...

  4. liunx的三个时间atime,mtime,ctime详细说明与使用场景

    导航:一.文件与文件夹三个时间:atime,mtime,ctime的含义二.ll命令查看文件时间三.stat命令查看文件的时间四.测试创建/修改文件的时间五.常用命令关于文件时间相关 - - - - ...

  5. 图解atime/mtime/ctime之间的区别与联系

    补充:

  6. atime&&mtime&&ctime区别

  7. 理解shell中的atime,mtime,ctime

    所有文件都有3个时间信息,保存在文件系统中 atime (Access time)是文件最后一此读的时间 或者执行文件的时间 mtime (Modified time)是文件最后一次写的时间(是在写入 ...

  8. Linux - 文件的三种时间之atime、ctime、mtime的区别和简单用法

    在Linux中,文件或者目录中有三个时间属性 atime ctime mtime 简名 全名 中文 作用 atime Access Time 访问时间 最后一次访问文件(读取或执行)的时间 ctime ...

  9. Shell中find中的atime、ctime、mtime的区别

    Shell中find中的atime.ctime.mtime的区别 find用法: -atime n File was last accessed n*24 hours ago. 访问(读取文件或执行文 ...

随机推荐

  1. 如何通过XAMPP来实现单个服务器上建多个网站

    xampp 是一个非常方便的本地 apache + php + mysql 的调试环境,在本地安装测试 WordPress 等各种博客.论坛程序非常方便.今天我们来给大家介绍一下,如何使用 XAMPP ...

  2. meta标签整理

    meta指元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词.标签位于文档的头部,不包含任何内容. 标签的属性定义了与文档相关联的名称/值对. 一 ...

  3. mysqldump: command not found

    原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件.首先得知道mysql命 ...

  4. 下载mysql server安装包的时候,不登录oracle账号,实现下载

    需求描述: 之前下载mysql安装包的时候,都是使用oracle账号进行登录下载,最近看到可以不登录账号 就实现下载的方法,在此记录下. 操作过程: 1.选择mysql linux服务器上的安装包,点 ...

  5. html5引擎开发 -- 引擎消息中心和有限状态机 - 初步整理 一

    一 什么是有限状态机        FSM (finite-state machine),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.他对于逻辑以及 ...

  6. C语言中的文本流与二进制流的区别

    近期看到了文本流和二进制流的区别,书上讲的比较含糊,理解不透彻,于是细细琢磨了下,把心得跟大家分享一下: 一.首先回答,什么是文件,流 一个文件通常就是磁盘上的一段命名的存储区.比如 stdio.h ...

  7. linux下用gcc如何生成预处理、汇编等文件

    [gcc -E test.c -o test.i------>预处理文件生成.i 文件.] 1.c语言程序生成过程 C语言程序的生成过程可以简单的分为:编辑.预处理.编译.汇编.链接五个阶断. ...

  8. C++中的字节对齐分析

    struct A { int a; char b; short c; }; struct B { char a; int b; short c; }; #pragma pack(2) struct C ...

  9. 将display设置为inline-block之后产生间隙然后换行问题的解决方法

    在我们会用display的时候,inline-block肯定不陌生吧,我今天在做项目的时候,用了inline-block,使a标签可以自定义宽度,但是随之而来的问题就是换行的BUG,如下图 特地加了一 ...

  10. Java初学者笔记六:反射

    Java反射基础 零.基础类代码 import java.io.*; import java.lang.reflect.*; class father{ public String fName; fa ...