어떤 파일 시스템 메타데이터 작업이 실제로 ext4 및 xfs 파일 시스템 로그에 저장되는지에 대한 간단하고 직접적인 대답을 찾을 수 없습니다. 참고해주세요 저는아니요POSIX에게 "atomic"이 무엇인지 선언하도록 요청하세요. 나는 원자 파일 시스템 작업의 하위 집합이 무엇인지에 더 관심이 있습니다.효과적으로fsync(2)
통나무를 활성화한 상태에서 실행하면 항상 뒤로 몸을 구부릴 필요가 없으므로 내구성이 뛰어납니다.
내가 확신하는 것:
creat(2)
link(2)
unlink(2)
rename(2)
mkdir(2)
rmdir(2)
완전히 확신할 수 없는 작업:
symlink(2)
이 상황은 심볼릭 링크의 내용을 저장하는 직접적인 방법 이나 기본 데이터 블록 symlink(2)
이 없는 것 같기 때문에 가장 혼란스럽습니다 . 저널이 나를 위해 이 문제를 처리해 줄 것이라는 사실을 알게 되어 다행입니다.fsync(2)
fdatasync(2)
답변1
나는 항상 fsync(2)를 사용하여 뒤로 구부릴 필요 없이 로그 실행을 활성화함으로써 원자 파일 시스템 작업의 어떤 하위 집합이 효과적으로 지속되는지에 더 관심이 있습니다.
전혀. 충돌 후에도 변경 사항이 지속되도록 하려면 fsync를 수행해야 합니다. 로그는 충돌 발생 시 귀하가 나열한 작업 중 어떤 작업도 수행되지 않음을 보장할 뿐입니다.반완벽한.
답변2
성능상의 이유로 ext4는 기본적으로 저널을 통해서만 파일 시스템 메타데이터를 작성합니다.
파일 시스템을 조정하지 않는 한 XFS는 모든 메타데이터 트랜잭션도 기록한다고 생각합니다.
답변3
알잖아ext4 로그연산이 아닌 블록번호로 연산을 하게 되겠죠? "메타데이터"는 관련 블록을 수정하는 데 사용하는 작업에 관계없이 특정 inode에 대한 실제 데이터 블록이 아닌 다른 것일 수 있습니다.
답변4
xfs 테스트나타나다요청된 디렉터리의 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).