답변1
잡지의 목적을 잘못 이해하신 것 같습니다. 이는 애플리케이션이 수행한 작업에 대한 로그가 아니며, 어떤 애플리케이션이 변경을 야기했는지 기록하지 않습니다. 사용자나 관리자에게는 적용되지 않습니다. 이는 파일 시스템용 내부 도구로 사용됩니다.
성능상의 이유로 디스크 쓰기가 항상 실행된 순서대로 발생하는 것은 아닙니다. 모든 내용이 기록되기 전에 정전이나 시스템 충돌로 인해 시스템이 중단되면 파일 시스템이 일관되지 않은 상태로 남을 수 있습니다. 예를 들어, 한 디렉터리에서 다른 디렉터리로 파일을 이동하는 경우 이전 디렉터리의 내용이 포함된 디스크 블록은 기록되었을 수 있지만 새 디렉터리의 내용이 포함된 디스크 블록은 아직 기록되지 않았습니다. 이 시점에서 시스템이 중지되면 파일은 더 이상 두 디렉터리에서 참조되지 않으며 실제로 손실됩니다.
이 문제를 방지하기 위한 몇 가지 기술이 있습니다(종종탄력파일 시스템 설계에서). NTFS를 포함한 많은 파일 시스템이 사용됩니다.잡지이 목적을 위해. 로그는 수행된 순서대로 작업을 기록하고 각 작업을 추가합니다.원자적으로이므로 로그를 읽으면 항상 일관된 상태가 생성됩니다. 다음과 같은 파일 시스템이 있습니다.로그 구조 파일 시스템, 여기서 로그는 파일 시스템의 내용에 대한 모든 정보가 기록되는 곳입니다. 다른 시스템(NTFS 포함)에서는 결국 모든 정보가 로그 외부에 기록됩니다. 로그에는 "정상" 위치에 기록되지 않은 최신 정보만 포함됩니다. 파일을 읽으면 로그에 액세스하지 않고 일반 위치에 있는 데이터에 직접 액세스합니다. 로그는 아직 수행되지 않은 작업을 완료하기 위해 시작 시(보다 정확하게는 파일 시스템이 마운트될 때)에만 읽혀집니다.
일반적으로 로그 구조가 아닌 로그 파일 시스템의 경우 로그에는 가장 최근 작업만 포함됩니다. 로그는 일반적으로 공간이 제한되어 있으며 해당 작업이 디스크에 기록되면 이전 항목을 덮어쓸 수 있습니다. 이 작업은 일반적으로 몇 초 이내에 완료됩니다. 다이어리의 크기에 비해 활동량이 많지 않았다면 여전히 오래된 다이어리 항목을 볼 수 있지만 이는 믿을 수 있는 것이 아닙니다.
일부 Linux 파일 시스템(예: ext4)은 저널링을 사용합니다. 그러나 Btrfs는 그중 하나가 아닙니다. Btrfs는 다음과 같은 방법으로 복원력을 달성합니다.쓰기 중 복사. 사용 중인 디스크 블록을 덮어쓰지 않습니다. 업데이트하려면 새 데이터로 새 블록을 생성한 다음 업데이트해야 하는 블록의 위치가 포함된 위치에 대해 새 블록을 생성한 다음 해당 위치를 포함하는 위치에 대해 새 블록을 생성하는 식입니다. 루트에 도달하면 모든 하위 블록이 기록되었는지 확인한 다음 루트를 업데이트합니다. 이런 식으로 루트는 항상 유효한 블록을 참조합니다.
Linux 또는 Windows에서 파일 작업을 추적하려는 경우 파일 시스템 로그는 이를 수행하는 방법이 아닙니다. Linux의 주요 도구는 다음과 같습니다.로깅 파일 시스템그리고감사 하위 시스템. 바라보다어떤 프로그램이나 스크립트가 특정 파일을 생성했는지 알아내는 것이 가능합니까?그리고프로그램에서 액세스하는 파일 나열.
1 이는 디렉토리 트리의 루트가 아닌 블록 트리의 루트입니다. 이 세부 수준에서는 차이가 명확하지 않습니다.
답변2
btrfs는 COW 파일 시스템이므로 문제가 발생하지 않는 한 항상 올바른 상태에 있어야 합니다.
로깅은 데이터를 덮어쓸 때만 필요하므로 쓰기 순서가 파일 시스템을 빠르게 만든다는 생각을 따르면 파일 시스템이 일관성이 없게 될 수 있습니다. 로깅은 COW가 아닌 파일 시스템이 안정성에 영향을 주지 않고 빠르게 실행되도록 하는 방법입니다.