![내 Linux 시스템이 변경 사항을 디스크에 즉시 동기화하도록 구성되어 있는지 어떻게 확인합니까?](https://linux55.com/image/109251/%EB%82%B4%20Linux%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%B4%20%EB%B3%80%EA%B2%BD%20%EC%82%AC%ED%95%AD%EC%9D%84%20%EB%94%94%EC%8A%A4%ED%81%AC%EC%97%90%20%EC%A6%89%EC%8B%9C%20%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EB%8F%84%EB%A1%9D%20%EA%B5%AC%EC%84%B1%EB%90%98%EC%96%B4%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%99%95%EC%9D%B8%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
답변1
스포일러 에 파일 시스템이 나타나는지 확인하세요 grep -w sync /proc/mounts
. 대답은 '아니오'입니다. 즉시 동기화를 통한 파일 시스템 마운트는 매우 느립니다. (또한 작은 쓰기가 많이 발생하여 플래시 장치의 수명이 단축됩니다.)
일부 애플리케이션은 다음을 호출하여 데이터를 디스크로 플러시합니다.fdatasync
. 불행하게도 Unix API는 탄력성을 고려하여 잘 설계되지 않았습니다. 애플리케이션의 관점에서 보면 애플리케이션이 변경 사항이 저장되었음을 나타내는 데이터를 원격 시스템으로 전송했기 때문에 특정 변경 사항은 복원력이 있어야 합니다. 이 경우에는 fdatasync
올바른 인터페이스입니다 . 그러나 많은 애플리케이션에는 뭔가 다른 것이 필요합니다. 즉, 1을 변경한 다음 2를 변경하고 시스템이 중간에 충돌하는 경우 변경 1이 없는 변경 2는 재부팅 후에 표시되지 않는다는 보장이 필요합니다. (예: 변경 1 = 파일 시스템의 새 버전 쓰기, 변경 2 = 이전 버전 삭제.) 파일 시스템은 성능 향상을 위해 파일 시스템 쓰기 순서를 변경합니다. 이는 일반적으로 파일 시스템에만 관련되기 때문에 애플리케이션에 표시되지 않습니다. 애플리케이션에 표시되는 것이 아니라 캐시/버퍼와 디스크 사이에서 발생합니다. 그러나 시스템 충돌이 발생하는 경우 디스크 내용은 실제 디스크 쓰기 순서를 반영합니다. "이 변경 사항은 이 변경 전에 발생해야 합니다"라고 명시하는 API가 없으므로 애플리케이션은 fdatasync
가난한 사람의 대체 역할을 합니다(변경 1을 수행하고 호출하여 fdatasync
디스크에 전파되었는지 확인한 다음 변경 2를 수행). 이는 특히 쓰기 속도가 느린 미디어(예: 플래시 메모리)의 경우 성능에 부정적인 영향을 미칠 수 있습니다.
fdatasync
과도한 사용이나 그와 유사한 이유로 시스템에서 응용 프로그램의 속도가 느려지는 경우 fsync
다음을 사용할 수 있습니다.내 데이터 먹어무효화 fsync
/ fdatasync
전화. 그러나 시스템이 중간에 충돌하면 일관성 없는 데이터가 남을 수 있다는 점에 유의하십시오.
내 대답이 Firefox 부가 기능의 설정을 기억하거나 변경하는 것과 관련이 있는지 잘 모르겠습니다. 이러한 작업은 다음과 같을 가능성이 높습니다.읽다디스크에서. 특히 생각해 보면 그 역할은 많은 데이터를 읽는 것입니다!
또한 변경 사항이 즉시 디스크에 동기화되지 않더라도 일부 데이터가 기록될 것으로 예상할 수 있습니다. 데이터가 디스크에 기록되지 않으면 메모리에 남아 있어야 하며, 메모리는 다른 유용한 용도로 사용될 수 없습니다. 게다가 디스크를 계속 사용하지 않는 것은 낭비입니다. 쓸 데이터가 있으면 애플리케이션이 계속 실행되어 더 많은 데이터를 생성하는 동안 커널은 쓰기를 시작합니다.
1 파일 시스템 설계의 맥락에서 복원력은 시스템 충돌 시 파일 시스템의 변경 사항이 보존되는지 여부에 대한 질문을 나타냅니다.