다음 진술의 의미는 무엇입니까?fsync 매뉴얼 페이지
fsync()를 호출한다고 해서 파일이 포함된 디렉터리의 항목도 디스크에 도달했는지 반드시 확인할 수는 없습니다. 이를 위해서는 디렉터리의 파일 설명자에 대한 명시적인 fsync()도 필요합니다.
이는 파일에 대해 fsync를 호출할 때 fsync가 디렉터리 메타데이터를 업데이트하지 않는다는 의미입니까?
같은 문제에 대한 또 다른 인용문은 다음과 같습니다(Robert Love의 Linux 시스템 프로그래밍 책에서 발췌).
두 기능 모두 파일이 포함된 업데이트된 디렉터리 항목이 디스크에 동기화된다는 것을 보장하지 않습니다. 이는 파일의 링크가 최근에 업데이트된 경우 파일의 데이터가 디스크에 성공적으로 도달할 수 있지만 관련 디렉터리 항목에는 도달하지 못하여 파일에 액세스할 수 없게 된다는 것을 의미합니다.
파일의 데이터가 디렉토리 링크에 도달해야 하는 이유는 무엇입니까? 내가 틀렸다면 정정하십시오. 그러나 디렉토리에는 파일 이름과 파일의 inode 번호만 포함됩니다. 실제 데이터는 파일에 있습니다. "데이터가 파일에 도달하지만 디렉터리 링크에는 도달하지 않습니다"는 무엇을 의미합니까?
답변1
그 뜻은:
파일 링크가 최근에 업데이트된 경우
파일의 데이터가 디스크에 성공적으로 도달할 수 있지만
연결된 디렉터리 항목이 디스크에 성공적으로 도달하지 못할 수 있습니다.
파일에 액세스할 수 없게 만듭니다.
새 파일을 만들 때 문제가 될 수 있습니다.
하드 링크가 생성된다는 사실을 알지 못한다면 "파일 링크"에 대한 일반화를 무시하겠습니다.
이는 파일에 대해 fsync를 호출할 때 fsync가 디렉터리 메타데이터를 업데이트하지 않는다는 의미입니까?
예. 아니면 오히려 의지할 수 없습니다. (일부 구현에서는 fsync가 반환되기 전에 항상 업데이트할 수 있습니다.)