일반적으로, 귀하의 질문에 대한 직접적인 대답으로, 쓰기 캐싱이 활성화 된 올바른 드라이브와 관련하여 드라이브 자체에 버그가 있음을 나타내는 주요 SATA 드라이브 브랜드를 알지 못합니다. 즉, 드라이브 관점에서만 드라이브는 캐싱 관점에서 수행해야하는 작업을 수행합니다. 또한 쓰기 캐싱 이 활성화 된 경우에도 SATA 케이블의 디스크 쓰기에서 물리적으로 업데이트되는 회전 미디어로의 지연이 여전히 매우 짧습니다 (일반적으로 ~ 50 ~ 100ms). 더티 캐시 데이터가 한 번에 몇 초 동안 그대로있는 것과 같지 않습니다. 드라이브가 계속 캐시 에서 더티 데이터를 가져 오려고 합니다.가능한 빨리 물리적 매체에. 이는 데이터 안전 문제 일뿐 아니라 지연없이 향후 쓰기를 수용 할 준비가되어있는 것 중 하나입니다 (예 : 쓰기 게시).
캐싱이 활성화 될 때 발생하는 문제는 SATA 케이블을 통한 드라이브의 쓰기 순서와 회전하는 미디어의 쓰기 순서가 동일하지 않다는 것입니다. 캐시의 모든 내용이 디스크에 저장되기 전에 전원이 꺼 지거나 시스템이 충돌하지 않는 한 이로 인해 문제가 발생하지 않습니다. 왜? ->
여기서 발생할 수있는 문제는 파일 시스템 및 / 또는 데이터베이스 파일 내용의 트랜잭션 견고성과 순서가 잘못된 쓰기 손실과 관련이 있습니다. 실제로, 비 순차적 쓰기 손실이 발생하면 이론적으로 미디어에 대한 매우 특정한 순서로 발생하는 디스크 쓰기에 의해 보장되었던 트랜잭션 논리의 무결성을 이론적으로 손상시킬 수 있습니다.
물론, 파일 시스템, 데이터베이스, RAID 컨트롤러 등의 디자이너는 쓰기 캐싱과 관련하여이 현상을 알고 있거나 반드시 알고 있어야합니다. 쓰기 캐싱은 대부분의 임의 액세스 유형 I / O 시나리오의 성능 관점에서 매우 바람직합니다. 실제로 쓰기 캐싱을 사용할 수있게하는 것은 고급 기본 명령 큐 ( NCQ)는 최신 SATA 및 마지막 몇 세대의 PATA 구현에서 지원됩니다. 따라서, 이러한 특정 중요 시간에 물리 매체에 대한 순서를 보장하기 위해, 파일 시스템 및 / 또는 애플리케이션 등은 매체에 대한 쓰기 캐시의 플러시를 구체적으로 요청할 수있다. 이 동기화 요청이 완료되면 (잠재적으로) 파일 버퍼, OS 디스크 캐싱, 물리 디스크 캐싱 등에서 보류중인 모든 것이 올바른 중요 작업에서 트랜잭션 시스템 설계에 따라 실제로 미디어에 표시됩니다. 즉, 프로그래머가 맨 위에 올바른 전화를 걸고이 소프트웨어 및 하드웨어 계층의 모든 요소가 올바르게 작업 한 경우에 올바르게 발생합니다. 즉, 드라이브, RAID 컨트롤러, 디스크 드라이버, OS 캐시, 파일 시스템, 데이터베이스 엔진 등에는 이와 관련된 버그가 없습니다. 이것은 모두 정확하게 작동해야하는 많은 소프트웨어입니다. 또한 거의 모든 상황에서 일반적으로 쓰기 순서는 전혀 중요하지 않으며 정전 및 충돌 시나리오는 테스트하기 어려운 테스트이기 때문에 이와 관련하여 정확성을 확인하는 것은 매우 어렵습니다. 따라서 결국이 용어의 다양한 계층 및 / 또는 의미 중 하나 이상에서 "쓰기 캐싱 해제"는 특정 종류의 문제를 "고정"하는 것으로 유명합니다. 실제로, RAID 컨트롤러, OS 디스크 캐시 또는 드라이브 등의 쓰기 캐싱 동작을 종료하면 시스템 및 버그의 원인이되는 하나 이상의 버그가 발생하지 않습니다. 정전 및 충돌 시나리오는 테스트하기 어려운 테스트입니다. 따라서 결국이 용어의 다양한 계층 및 / 또는 의미 중 하나 이상에서 "쓰기 캐싱 해제"는 특정 종류의 문제를 "고정"하는 것으로 유명합니다. 실제로, RAID 컨트롤러, OS 디스크 캐시 또는 드라이브 등의 쓰기 캐싱 동작을 종료하면 시스템 및 버그의 원인이되는 하나 이상의 버그가 발생하지 않습니다. 정전 및 충돌 시나리오는 테스트하기 어려운 테스트입니다. 따라서 결국이 용어의 다양한 계층 및 / 또는 의미 중 하나 이상에서 "쓰기 캐싱 해제"는 특정 종류의 문제를 "고정"하는 것으로 유명합니다. 실제로, RAID 컨트롤러, OS 디스크 캐시 또는 드라이브 등의 쓰기 캐싱 동작을 종료하면 시스템 및 버그의 원인이되는 하나 이상의 버그가 발생하지 않습니다.
어쨌든, 문제의 핵심으로 돌아 가기 : SATA에서는 모든 디스크 읽기 / 쓰기 명령과 플러시 캐시 명령의 특정 처리가 SATA 사양에 의해 잘 정의되어 있습니다. 또한 드라이브 제조업체는 Seagate Barracuda 드라이브에 대한이 예와 같이 이러한 규칙의 구현 및 준수를 설명하는 각 드라이브 모델 또는 드라이브 제품군에 대한 자세한 문서를 가지고 있어야 합니다. 특히 SATA 세트 기능에 대한 자세한 내용을 참조하십시오드라이브 작동 모드를 제어하는 명령과 특히 옵션 82h를 사용하면 드라이브 수준에서 디스크 캐싱을 비활성화 할 수 있습니다. 기본값은 내가 알고있는 모든 드라이브에서 쓰기 캐싱이 가능하기 때문입니다. 캐시를 실제로 비활성화하려면이 명령은 각 드라이브 재설정 또는 전원을 시작할 때 수행해야하며 일반적으로 운영 체제의 디스크 드라이버에서 제어합니다. OS 드라이버가 IOCTL 및 / 또는 레지스트리 설정 유형을 통해이 모드를 설정하도록 권장 할 수 있지만 이는 매우 다양합니다.