파일 atime 미 변 문제 연구
5078 단어 time
이 세 명 사 는 파일 / 폴 더 의 속성 으로 inode 데이터 구조 에 존재 합 니 다.
시스템 호출 stat 를 통 해 stat 구 조 를 얻 을 수 있 습 니 다. 그 중에서 atime (accesstime), ctime (create time) 과 mtime (modify time) 의 정보, man stat 후의 정 보 를 포함 합 니 다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
atime: The field st_atime is changed by file accesses, e.g. byexecve, mknod, pipe, utime and read (of more than zero bytes).
ctime: The field st_ctime is changed by writing or by settinginode information (i.e., owner, group, link count, mode, etc.).
mtime: The field st_mtime is changed by file modifications, e.g.by mknod, truncate, utime and write (of more than zero bytes). Moreover, st_mtime of a directory is changedby the creation or deletion of files in that directory. The st_mtime field isnot changed for changes in owner, group, hard link count, or mode.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
주의해 야 할 것 은 엄격 한 의미 에서 ctime 은 파일 을 만 드 는 시간 이 아 닙 니 다.
마찬가지 로 우 리 는 ls 명령 을 통 해 파일 의 atime, ctime, mtime 를 가 져 올 수 있 습 니 다.
atime:ls –lu [filename]
ctime:ls –lc [filename]
mtime:ls –l [filename]
2. atime 변 함 없 는 상황
Centos 6 또는 Redhat 6 플랫폼 에서 제품 이 파일 을 스 캔 한 후에 파일 의 atime 이 변 하지 않 았 음 을 발 견 했 고 이 어 자신 도 명령 'cat [filename]' 을 사용 한 후에 atime 도 변 하지 않 았 다.이 작업 들 은 모두 파일 을 읽 기 작업 을 하 는데, 왜 atime 은 변 하지 않 았 습 니까?
그러나 이런 조작 은 Redhat 5 등 플랫폼 에서 atime 을 정상적으로 바 꿀 수 있다.그런데 왜 Centos 6 / Redhat 6 에서 변 하지 않 았 을 까?
3. 근본 원인
처음에 저 는 OS 의 bug 로 인 한 것 이 아니 냐 고 의심 한 적 이 있 습 니 다. 나중에 kernel 버 전 2.6.30 전에 Liux 의 핵심 개발 자 들 은 Ext 3 / Ext 4 파일 시스템 의 성능 에 대해 토론 을 했 습 니 다. 그 중에서 atime 을 포함 합 니 다.kernel 2.6.30 이전에 파일 시스템 에서 기본적으로 atime 를 신속하게 업데이트 합 니 다. 그러면 두 가지 문 제 를 가 져 올 수 있 습 니 다.
(1) 시스템 에 대량의 파일 접근 을 통 해 atime 을 디스크 에 기록 하고 시간 을 소모 하여 성능 을 떨 어 뜨 립 니 다.
(2) 이런 조작 도 전기 에 너 지 를 소모 할 수 있다.
리 눅 스에 서 실행 되 는 매우 적은 응용 프로그램 은 정확 한 atime 시간 을 가 져 야 한다. 또한 리 눅 스 핵심 개발 자 는 Ext 3 / Ext 4 파일 시스템 의 성능 측면 에서 2.6.30 버 전의 커 널 에서 atime 의 업데이트 방식 을 수정 하기 로 결정 했다. 다음 세 가지 상황 중 하나 만 atime 을 업데이트 할 수 있다.
(1) 파 티 션 mount 를 마 운 트 할 때 비 relatime 방식 (기본적으로 relatime 방식) 을 지정 합 니 다. 예 를 들 어 strictatime.
보충: OS 가 시 작 될 때 각 파 티 션 을 다른 디 렉 터 리 에 마 운 트 하고 마 운 트 (mount) 인자 에서 strictatime 을 사용 하여 atime 를 제때에 업데이트 하 는 것 을 표시 합 니 다.2.6.30 이후 mount 에 'relatime' 과 'strictatime' 두 가지 옵션 을 추 가 했 습 니 다. 자세 한 것 은 'man mount' 를 통 해 볼 수 있 습 니 다.
(2) atime 이 ctime 보다 작 거나 mtime 보다 작 을 때
(3) 이번 access time 과 지난번 atime 은 24 시간 이 넘 습 니 다.
이 방법 은 잦 은 업데이트 atime 를 피하 고 파일 시스템 의 성능 을 향상 시 켰 다.역시 리 눅 스 커 널 을 만 드 는 큰 소 는 모든 디 테 일 에서 잡 을 수 있 습 니 다. 존경 합 니 다.
그리고 제 가 사용 하 는 CentOS 6 과 Redhat 6 의 kernel 버 전 은 2.6.32 이 고 제 가 사용 하 는 Redhat 5 는 2.6.30 전의 커 널 버 전 입 니 다. 아니 나 다 를 까. 그리고 2.6.32.22 의 kernel 코드 를 다운로드 하여 atime 를 업데이트 하기 전에 호출 된 검사 함수 relatime 을 보 았 습 니 다.need_update:
/*
*With relative atime, only update atime if the previous atime is
*earlier than either the ctime or mtime or if at least a day has
*passed since the last atime update.
*/
static int relatime_need_update(structvfsmount *mnt, struct inode *inode,
struct timespec now)
{
if(!(mnt->mnt_flags & MNT_RELATIME))
return1;
/*
* Is mtime younger than atime? If yes, updateatime:
*/
if(timespec_compare(&inode->i_mtime, &inode->i_atime) >= 0)
return1;
/*
* Is ctime younger than atime? If yes, updateatime:
*/
if(timespec_compare(&inode->i_ctime, &inode->i_atime) >= 0)
return1;
/*
* Is the previous atime value older than aday? If yes,
* update atime:
*/
if((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
return1;
/*
* Good, we can skip the atime update:
*/
return0;
}
4. 정확 한 atime 시간 획득
하지만 커 널 2.6.30 이후 제품 이 atime 의 정확 한 시간 을 가 져 야 한다 면?
OS 가 시 작 될 때 / etc / fstab 파일 을 읽 고 디스크 파 티 션 을 마 운 트 합 니 다. strictatime 옵션 을 추가 할 수 있 습 니 다.
UUID=d2a07167-d979-4cb8-a50e-dde36f4c7139/ ext4 defaults,strictatime 1 1
그러나 이 방법 은 OS 를 다시 시작 해 야 합 니 다. OS 를 다시 시작 하지 않 으 면 reount (마 운 트 된 파일 시스템 을 예 로 들 면) 을 사용 할 수 있 습 니 다.
mount -o remount,rw,strictatime /
"/" 디 렉 터 리 에 마 운 트 된 파일 시스템 은 atime 를 제때에 업데이트 할 수 있 습 니 다.
5. 참고
1. http://stackoverflow.com/questions/15547649/is-it-necessary-to-enable-atime-in-etc-fstab-to-get-the-correct-last-accessed
2. http://www.h-online.com/open/news/item/Kernel-Log-What-s-coming-in-2-6-30-File-systems-New-and-revamped-file-systems-741319.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
시간. 깃허브 히스토리. 2000년부터 커밋. 어떻게 과거에 복종했는가.짧지만 신나는 이 사건은 크리스마스 이브 전에 이스탄불에서 두바이로 갔다가 토론토로 돌아왔을 때 일어났습니다. 12월 24일 마감일인 사소한 최종 과제가 하나 있었는데 제출하기에 충분한 시간이라고 생각했습니다. 비행...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.