저는 상대적으로 큰 파일을 보관하기 위해 SATA-USB 브리지를 통해 Mac에 연결된 SSD를 사용하고 있습니다. SSD로 옮긴 후 마운트를 해제하고 플러그를 뽑습니다.
이 SSD에는 DRAM 캐시가 있습니다. 제가 이해한 바로는 이 캐시는 쓰기를 캐시하고 파일 매핑의 복사본을 저장하는 데 사용됩니다. 마운트를 해제하지 않거나 현재 작성 중일 때 플러그를 뽑으면 DRAM에 캐시된 데이터가 손실될 가능성이 매우 높으며 매핑에서 변경된 데이터에 대한 포인터도 손실되기 때문에 파일도 손실될 수 있다고 가정합니다.
내 질문은 다음과 같습니다드라이브를 마운트 해제하고 성공적으로 마운트 해제한 후 즉시 플러그를 뽑으면 DRAM에 있는 모든 내용을 디스크에 쓰기가 완료되기 전에 SSD에서 전원을 끌 가능성이 있습니까?
OS/APFS가 DRAM을 관리하고 DRAM이 마운트 해제되기 전에 플러시되도록 보장합니까, 아니면 SSD의 펌웨어가 이를 수행합니까?
답변1
SSD의 DRAM은 펌웨어에 의해 관리되지만 OS는 "barrier" 함수 호출을 사용하여 보류 중인 모든 데이터를 안정적인 저장소로 플러시하도록 펌웨어에 지시할 수 있습니다. 또한 OS는 쓰기 캐싱을 활성화해야 하는지 여부를 SSD에 알려줄 수도 있습니다.
드라이브를 완전히 마운트 해제하면 OS는 모든 데이터가 완전히 기록되었는지 확인하기 위해 필요한 함수 호출을 실행합니다.
완전히 마운트를 해제하지 않고 쓰기 도중에 플러그를 뽑으면 모든 것이 무효가 되며 결과는 SSD 펌웨어, 파일 시스템 및 기타 다양한 요인에 따라 달라집니다.
답변2
운영 체제에 의해 제어되는 호스트와 SSD의 펌웨어에 의해 제어되는 SSD 내부 DRAM 모두에 DRAM이 관련되어 있습니다.
다른 답변에서 언급했듯이 제대로 꺼내면 호스트와 SSD 간의 작업을 동기화하기 위해 SATA 및 USB 프로토콜의 일부인 잘 정의된 메커니즘으로 모든 작업을 처리해야 합니다.
쓰기 도중에 꺼내면 호스트의 DRAM과 SSD의 데이터가 모두 기록되지 않은 상태로 유지될 가능성이 높으며, 기록되지 않은 데이터가 호스트의 DRAM이나 SSD의 DRAM에 있었다면 문제가 될 수 있습니다. , 어느 쪽이든 손실되기 때문입니다. 그런 상황에서는 아마도 데이터도 있을 겁니다.~에호스트에서 전송했지만 아직 SSD에서 수신하지 못한 버스입니다.