FAT32 파일 시스템이 설치되어 있습니다. 파일을 변경한 후 다시 읽을 수 있지만 여전히 이전 버전이 표시됩니다. 파티션을 마운트 해제했다가 다시 마운트할 때까지 변경 사항이 실제로 유지되지 않습니다. 이 동작이 정상인가요? 그렇다면 왜 의미가 있고 왜 필요한가요? 변경 사항이 자동으로 표시되도록 설정하는 방법이 있습니까?
답변1
대부분의 다른 운영 체제와 마찬가지로 Linux는 디스크 IO 작업을 캐시합니다. sync
이 명령을 사용하면 파일 수정을 수행한 후 커널이 버퍼를 플러시하도록 강제할 수 있습니다. 그러나 이 명령을 사용하면 현재 "더티" 버퍼가 모두 디스크로 플러시되므로 전반적인 시스템 성능이 저하됩니다. 또는 fsync
C 라이브러리 함수를 사용하여 특정 파일에 대한 변경 사항을 새로 고칠 수 있지만 이 함수는 전체 파일 시스템이 미디어에서 일관된 상태임을 보장하지 않습니다.
답변2
제거한 후에도 파일 시스템이 반드시 동일한 위치에 새 파일을 저장할 필요는 없기 때문에 동일한 파일의 이전 버전을 찾을 수 있습니다. 따라서 새 파일을 다른 여유 위치에 저장하더라도 반드시 이전 파일을 덮어쓰지는 않습니다.
성능상의 이유로 파일 시스템에서 변경한 사항은 디스크에 즉시 기록되지 않습니다. 운영 체제가 백그라운드에서 작업을 수행하도록 할 수 있는데 파일이 실제로 완전히 물리적으로 기록될 때까지 프로그램을 기다리게 하는 이유는 무엇입니까? 때때로 이러한 비동기식 동작은 파일이 삭제되거나 생성 직후 덮어쓰기되어 물리적 저장소가 전혀 필요하지 않은 경우와 같이 쓰기를 완전히 저장할 수도 있습니다.
마운트 옵션을 사용하면 대부분의 파일 시스템에서 이 동작을 비활성화할 수 있습니다 sync
. sync
마운트를 해제하지 않고 데이터를 디스크에 강제로 기록하는 명령 도 있습니다 .
그러나 파일 시스템의 원시 데이터에 액세스해서는 안 됩니다. /dev/sdb1을 마운트한 다음 다른 시스템을 사용하여 완전히 동일한 파일 시스템을 마운트하는 경우(네트워크 블록 장치 또는 기타 수단을 통해) 두 시스템 모두 동시에 동일한 파일 시스템 데이터를 사용하므로 결국 충돌이 발생합니다. 특수(클러스터형) 파일 시스템만 이 방식으로 작동합니다. 다른 모든 경우에는 네트워크 파일 시스템이 필요합니다(단 하나의 시스템만 디스크를 마운트하고 해당 파일을 네트워크를 통해 투명하게 노출함).