어떤 파일 시스템 메타 데이터 작업이 실제로 ext4 및 xfs로 저널링됩니까?


9

어떤 파일 시스템 메타 데이터 작업이 실제로 ext4 및 xfs 파일 시스템 저널에 유지되는지에 대한 간단하고 직접적인 대답을 찾을 수 없습니다. 내가 참고 하지 POSIX는 "원자"로 선언 무엇인지에 대해 문의. 나는 항상 뒤로 구부리지 않고 저널을 활성화하여 실행함으로써 원자 파일 시스템 작업의 하위 집합이 효과적으로 내구성 이 있는지에 대해 더 걱정 fsync(2)하고 있습니다.

나는 상당히 확실하다.

  • creat(2)
  • link(2)
  • unlink(2)
  • rename(2)
  • mkdir(2)
  • rmdir(2)

확실하지 않은 작업 :

  • symlink(2)

symlink(2)경우입니다 어떤 간단한 방법이있을 것 같지 않기 때문에 대부분의 열세 fsync(2)또는 fdatasync(2)심볼릭 링크의 내용을 저장하는 기본 블럭 (datablocks). 저널이 나를 위해 이것을 처리한다는 것을 아는 것은 안도감이 될 것입니다.

답변:


1

성능상의 이유로 기본적으로 ext4는 저널을 통해 파일 시스템 메타 데이터 만 작성합니다.

파일 시스템을 조정하지 않은 한 XFS는 모든 메타 데이터 트랜잭션도 저널링한다고 생각합니다.


네,하지만 "메타 데이터"란 무엇입니까? 디렉토리의 블록 : 물론. 아이 노드 자체 : 예. 아이 노드 자체에 들어갈만큼 작은 대상을 가진 심볼릭 링크 : 아마도? 대상이 보조 블록으로 쏟아지는 심볼릭 링크 : ??????

링크 도움이 될 것입니다
asdmin

1

나는 뒤로 역으로 굽히지 않고 fsync (2)를 사용하지 않고 저널을 사용하여 실행함으로써 원자 파일 시스템 작업의 하위 집합이 효과적으로 내구성에 대해 더 걱정하고 있습니다.

없음 충돌 후에도 변경 사항이 지속되도록하려면 fsync 기간을 지정해야합니다. 저널링은 충돌 발생시 나열된 작업 중 절반도 수행 되지 않는다는 것을 보장합니다 .


내가 돌보면 블록이 회전하는 녹에 부딪쳤다는 것을 알기 위해 파일과 디렉토리를 fsync해야한다는 것을 알고 있지만, 유출 된 경우 symlink를 뒷받침하는 블록을 fsync 할 수있는 방법이 없습니다 아이 노드. 이 시점에서 저의 유일한 수단은 저널에 의존하거나 중요한 일에 대해 다시는 심볼릭 링크를 사용하지 않는 것입니다.
rboyer

@naelyn, fsync ()는 비 고속 심볼릭 링크를 포함하여 파일과 관련된 모든 블록을 플러시합니다.
psusi

1
고속이 아닌 심볼릭 링크의 블록을 플러시하는 fsync에서 사용하기 위해 적절한 파일 디스크립터를 어떻게 열 수 있습니까?
rboyer

@naelyn, 오 예 ... 좋은 지적 ... linux-fsdevel 메일 링리스트에서 그것에 대해 물어볼 필요가있을 것입니다 ... 하드 링크가 있습니다. 하드 링크가 포함되어있는 디렉토리를 열고 동기화한다고 생각하면 symlinks가 동일하게 작동합니까?
psusi

0

ext4 저널 은 블록 번호로 작동하지만 작동하지 않는다는 것을 알고 있습니까? "메타 데이터"는 문제의 블록을 수정하는 데 사용한 작업에 관계없이 주어진 inode에 대한 실제 데이터 블록 이외의 다른 것입니다.


0

xfstests 는 디렉토리의 fsync ()가 포함 된 모든 심볼릭 링크를 유지해야한다고 주장하는 것 같습니다 .

나는 이것을 확인하지 않았다. 내가 뭔가를 놓쳤을 가능성이 있습니다.

xfstests는 많은 Linux 파일 시스템 개발자가 사용합니다. 이 테스트는 "generic"디렉토리에 있습니다. 모든 Linux 파일 시스템에 적용되어야 함을 의미합니다. (또는 적어도 모든 블록 장치 파일 시스템. 테스트는 특수한 가상 블록 장치를 사용하여 작동합니다).

https://github.com/kdave/xfstests/blob/master/tests/generic/348

# Test creating a symlink, fsync its parent directory, power fail and mount
# again the filesystem. After these steps the symlink should exist and its
# content must match what we specified when we created it (must not be empty
# or point to something else).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.