임베디드 시스템의 일부 디스크 문제를 해결하고 있는데 재부팅할 때 SATA 드라이브가 누락되는 경우가 절반 정도입니다. 장치는 ZFS 이미지를 루트 파티션으로 사용하고 SATA 드라이브 1개와 NVME 드라이브 1개를 포함합니다. 분명히 재부팅했는데 SATA 드라이브가 있었을 때 새 루트 콘텐츠로 드라이브를 업데이트하려면 미러를 다시 동기화해야 했습니다.
ZFS는 복사할 블록/파일을 어떻게 선택합니까? 타임스탬프 기반입니까, 아니면 새 데이터가 이전 데이터로 덮어쓰여지지 않도록 하기 위해 사용되는 일종의 내부 카운터가 있습니까?
답변1
ZFS는 주로 체크섬에 의존한다고 생각합니다. 블록이 작성되면 SHA256 체크섬도 저장됩니다. 일반적으로 비트 손상이나 논리 문제를 감지하여 올바른 체크섬을 사용하여 블록에서 원본 블록을 복구합니다.
귀하의 경우에는 데이터가 전혀 누락된 것처럼(또는 적어도 감지되지 않은 것처럼 보이기 때문에) 절반의 시간이 더 간단할 것이라고 확신합니다.
vdev_uberblock_compare
편집: 디스크가 감지되지 않는 동안 데이터가 수정되면 C 소스에서 최신 슈퍼블록을 결정하고 재동기화하기 위해 타임스탬프를 직접 확인하는 것처럼 보입니다 .