두 개의 다른 서버(iSCSI 볼륨)에서 ext4 파일 시스템을 사용하여 동일한 디스크를 마운트하면 디스크의 데이터가 손상될 수 있다는 것을 알고 있습니다. 내 질문은서버 중 하나가 디스크를 읽기 전용으로 마운트하고 다른 서버가 디스크를 읽기-쓰기로 마운트하는 경우 어떤 차이가 있습니까?
OCFS2 또는 이와 유사한 것이 이 목적으로 사용될 수 있고 NFS를 사용하여 다른 서버가 액세스할 수 있도록 디스크를 내보낼 수 있다는 것을 알고 있지만 제안한 설정이 작동하는지 알고 싶습니다.
답변1
습관. 캐싱으로 인해 읽기 전용 클라이언트에서는 일관된 결과를 제공하지 않습니다. 확실히 이것을 위해 설계되지 않았습니다. 애플리케이션에 IO 오류가 반환되는 것을 볼 수 있습니다. 코드에 여전히 일부 감독이 있을 수 있으며, 이로 인해 커널이 충돌하거나 프로세스에서 사용하는 메모리가 손상될 수 있습니다.
그러나 가장 중요한 점은 ext4가 읽기 전용 마운트에서도 로그를 재생한다는 것입니다. 따라서 읽기 전용 마운트는 여전히 기본 블록 장치에 기록됩니다. ~ 일지라도둘 다마운트는 읽기 전용입니다 :).
답변2
이렇게 하면 데이터 손상을 방지할 수 있지만 원하는 대로 되지 않을 수도 있습니다. 다른 노드에 볼륨을 읽기 전용으로 마운트하는 데 문제가 있는 것을 본 적이 없습니다. ro 노드의 항목이 일치하지 않더라도 일반적으로 "예기치 않은 여유 inode, e2fsck를 실행하십시오." 또는 /var/log/messages와 유사한 항목이 발생합니다. 중요하지 않은 파일 시스템("/opt/mySpecialmount")에 심각한 문제가 발생하면 Linux는 일반적으로 볼륨을 읽기 전용으로 마운트합니다(이미 거기에 있었습니다). 캐싱의 영향이 매우 염려된다면 일종의 drop_caches/vfs_cache_Pressure 메커니즘을 사용해 볼 수 있습니다.
로그 재생을 방지하려면 마운트 매개변수에 "noload"를 추가하고 error=remount-ro로 실행하십시오(주의사항).
즉, 읽기 전용으로 마운트하는 데 동의하면 다른 노드에 대한 참조로 존재할 수 있으며, 이 경우 NFS 또는 smbfs가 이 문제를 해결하고 ext3/4보다 더 높은 동시성을 갖도록 설계됩니다. 성능이 필요한 경우 클러스터 파일 시스템을 고려할 수 있습니다(관리 오버헤드가 약간 더 높지만 성능이 정말로 필요한 경우에는 거기에 있습니다).