답변:
체크섬을 사용하는 가장 효율적인 방법은 컴퓨터가 모든 것을 수행하도록하는 것입니다. ZFS와 같은 파일 시스템을 사용하면 모든 데이터를 쓸 때 체크섬 (실제로는 체크섬보다 강한 해시를 사용)을 사용하고 데이터를 읽을 때마다 확인합니다. 물론 단점은 ZFS가 파일을 삭제하거나 덮어 쓸 때 실수이고 정상적인 작업 일 때를 알지 못한다는 것입니다. 그러나 ZFS는 모든 항목에 COW (Copy-On-Write) 의미를 사용하기 때문에 스냅 샷 기능을 사용하여 위험을 완화 할 수 있습니다 .
ZFS는 raid5 스타일 패리티, 드라이브 미러 또는 복제본 복제 여부에 관계없이 설정 한 중복성을 사용하여 해시 검사에 실패한 데이터를 자동으로 복원 할 수 있습니다 (복사본 = N 속성을 ZFS 파일 시스템에 추가하면 N 개의 사본이 저장 됨) 당신이 쓰는 모든 데이터). 또한 해시를 Merkle 트리에 저장합니다. 여기서 파일의 해시 값은 블록의 해시에 의존하고, 디렉토리 항목의 해시는 파일 및 포함 된 디렉토리의 해시 값에 의존하며, 파일 시스템의 해시는 의존합니다 루트 디렉토리의 해시 등
어떤 솔루션을 사용하든 관계없이 프로세스는 CPU 속도가 아니라 디스크 속도에 의해 제한됩니다.
또한 디스크의 BER을 고려해야합니다. 그들은 결국 방청 녹 판일뿐입니다. 소비자 수준 드라이브는 10 ^ 14 비트를 읽을 때마다 1 개의 잘못 읽은 비트의 오류율을 가지며, 이는 11 테라 바이트마다 1 비트로 작동합니다. 11 테라 바이트의 데이터 세트가 있고 그 안에있는 모든 파일의 해시를 계산하는 경우 해당 체크섬 중 하나를 잘못 설정하여 데이터 세트에있는 파일 중 하나의 블록 하나가 영구적으로 손상되었습니다. 그러나 ZFS는 풀의 모든 디스크에 쓴 모든 블록의 해시를 알고 있으므로 손실 된 블록을 알고 있습니다. 그런 다음 풀의 중복성 (패리티, 미러 또는 추가 사본)을 사용하여 해당 블록의 데이터를 올바른 값으로 다시 쓸 수 있습니다.
그러나 벤은이 의견에 대해 좋은 지적을한다. ZFS는 사용자에게 계산되는 해시 값을 노출하지 않으므로 ZFS 시스템에 들어가거나 나가는 데이터에는 해시가 수반됩니다. 인터넷 아카이브가 아카이브의 모든 항목과 함께 제공되는 xml 파일로이 작업을 수행하는 방식이 마음에 듭니다. 예를 들어 https://ia801605.us.archive.org/13/items/fakebook_the-firehouse-jazz-band-fake-book/fakebook_the-firehouse-jazz-band-fake-book_files.xml 을 참조 하십시오 .
각 파일에 대한 체크섬을 생성합니다. 체크섬은 매우 작으며 전체 디렉토리에 대한 체크섬을 생성하려면 모든 파일을 처리해야합니다 (적어도 디렉토리 항목에서만 작성된 디렉토리 체크섬에 대해 말하지 않는 경우 데이터를 확보하지 않습니다) 삭제).
전체 아카이브에 대해 하나의 체크섬이 있다고 가정하십시오. 데이터가 손상되었다는 것을 알고 있지만이 파일이 하나의 파일인지, 더 중요한 파일인지는 알 수 없습니다. 별도의 체크섬이 있으면 유연성이 향상됩니다. 손상된 단일 파일을 감지하고 다른 백업의 파일에서 대체 할 수 있습니다 (다른 파일이 손상 될 수 있음).
그렇게하면 데이터가 더 살아남을 수 있습니다.
아마도 이것은 BagIt 을 기르기에 좋은시기 일 것 입니다. 이것은 보관, 장기 보존 및 디지털 객체 전송을위한 매우 단순하지만 강력한 파일 패키징 형식입니다. 의회 도서관과 캘리포니아 디지털 도서관이 있습니다.
BagIt 도구 (여러 프로그래밍 언어로 존재)는 파일을 특정 디렉토리 구조에 넣고 체크섬 / 해싱을 수행합니다. 그게 다야.
PS : 물론 BagIt 도구는 포함 된 체크섬 / 해시에 대해 백을 검증 할 수 있으며, 백에 메타 데이터를 추가 할 수 있습니다. 그러나 그것은 가방이 얻는 것처럼 복잡합니다.
이 답변은 @ lechlukasz 와 @ db48x 의 조합 으로, 의견과 일부 내 의견을 통합했습니다.
간단한 경로 전달은 파일 시스템과 메타 데이터 분리 방법을 결합한 것입니다.
ZFS 또는 Btrfs 와 같은 즉석 데이터 해싱 및 유효성 검사를 수행하는 파일 시스템을 사용하면 (현재로서는 Btrfs가 프로덕션 환경에서 사용할 수있는 것으로 간주되지 않음) 유의해야합니다. 운영 체제 오류없이 디스크에서 데이터를 읽을 수 있으면 파일 시스템이 의도 한 방식으로 디스크에 데이터를 읽습니다. 주기적 "스크럽 (scrub)"작업을 실행하면 파일 시스템의 아이디어를 기준으로 모든 데이터를 읽고 확인합니다.
그러나 이는 디스크상의 손상 (판독 할 수없는 블록, 하드웨어 쓰기 오류, 블록 장치에서 직접 데이터의 일부를 손상시키는 잘못된 쓰기 등) 만 방지합니다. 파일에 대한 작업을 위해 의도 된 운영 체제 기능을 통해 작동하는 소프트웨어 버그, 잘못된 사용자 작업 또는 악의적 인 소프트웨어로부터 이러한 버그가없는 것으로 가정하지 않습니다.
후자를 방지하려면 다른 보호 계층이 필요합니다. 사용자 응용 프로그램의 관점에서 데이터를 합산하거나 해싱하면 위에서 언급 한 많은 위험으로부터 보호 할 수 있지만 소프트웨어의 기본 제공 프로세스 작업 또는 완전히 별도의 프로세스로 개별적으로 수행해야합니다.
오늘날의 하드웨어와 많은 양의 데이터를 저장하기에 실용적인 기능 (솔리드 스테이트 디스크 / SSD 대신 회전 플래터 하드 디스크)을 사용하면 SHA1과 같은 복잡한 해싱 알고리즘조차도 대부분 I / O 바운드, 즉 속도 데이터가 해시되는 위치는 컴퓨터 프로세서가 해시를 계산하는 기능이 아니라 스토리지 시스템의 읽기 속도에 따라 달라집니다. 2012 년 중간 계층 소비자 PC에 대한 약 150GB의 데이터에 대해 사용자 공간 MD5 해싱 프로세스를 실행하는 실험을 수행했으며 기본적으로 약 40 분 동안 중단없이 디스크를 운동 한 후 완료되었습니다. 이 수치를 100 배로 늘리면 동일한 하드웨어에서 약 3 일 만에 15TB 컬렉션의 MD5 해시를 얻게됩니다. 읽기 전송 속도를 추가하여 (예 : 쉽게 달성 할 수 있음)예를 들어 RAID 0 은 중복성이없는 스트라이핑으로, RAID 10을 형성하는 RAID 1과 결합하여 더 높은 읽기 / 쓰기 성능을 달성하는 데 일반적으로 사용되며 동일한 양의 데이터에 대해 완료 시간을 단축 할 수 있습니다.
이 두 가지를 결합하면 두 가지 이점을 모두 얻을 수 있습니다. 파일 시스템은 파일을 읽을 때받은 내용이 실제로 기록 된 내용임을 보증하며, 전체 컬렉션에서 별도의 고 정성 검사 프로세스를 실행하여 데이터를 보장 할 수 있습니다 stored는 여전히 아카이브에 수집 된 내용과 일치합니다. 둘 사이의 불일치 (파일 시스템은 파일이 정상이고 고 정성 검사가 그렇지 않다고 표시 함)는 아카이브의 의도 된 작동 모드 외부에서 그러나 운영 체제 기능 내에서 수정 된 파일을 나타내며 2 차에서 복원하라는 메시지를 표시합니다. 복사 (백업). 따라서 고 정성 검사는 더 긴 시간 간격으로 실행될 수 있으며, 이는 매우 큰 아카이브에 필수적이지만 읽기가 성공하면 하드웨어에서 온라인 액세스가 여전히 손상되지 않도록 보장됩니다. 원칙적으로, 아카이브 소프트웨어는 파일 시스템에 의존하여 불일치를 읽기 오류로보고하고, 사용자가 파일을 작업하고 파일이 수집 된 내용과 일치하지 않음을 나타내는 적절한 메시지를 표시 할 때 백그라운드에서 별도의 고 정성 검사를 수행 할 수 있습니다. 아카이브로. 블록 해싱 파일 시스템을 사용하면 이러한 구성표는 인식 된 성능에 최소한의 영향을 미치면서 내용이 올바른지 확인합니다.
나는 대답을 겪었으며 ZFS를 사용하여 데이터 계층 오류를 처리한다는 아이디어가 마음에 들지만 실수로 또는 악의적으로 파일이 변경되는 문제가 여전히 있습니다. 이 경우 ZFS는 사용자를 보호하지 않으며 다른 사람이 언급 한 것처럼 외부 검증을 위해 사용자가 볼 수있는 "해시"를 다른 곳에 저장할 수 없습니다.
TripWire라는 Linux 응용 프로그램이 있으며 시스템 실행 파일을 모니터링하는 데 광범위하게 사용되어 공격 후에도 변경되지 않았는지 확인합니다. 이 프로젝트는 현재 중단되었지만 AIDE (Advanced Intrusion Detection Environment)
ServerFault에서 권장 되는 새로운 프로젝트가 있습니다 .
/server/62539/tripwire-and-alternatives
설치하면 x 분마다 실행되며 사용자 구성 가능하며 파일의 변경 사항을 지정하는 모든 폴더를 검사합니다. 모든 파일 해시를 계산하려면 한 번 실행 한 다음 현재 파일과 비교하여 모든 해시를 확인하고 여전히 동일한 지 확인하십시오. 사용할 해시 유형 또는 해시 조합 (SHA-256보다 약한 것을 권장하지 않음), 사용할 파일 속성 (콘텐츠, 크기, 수정 된 타임 스탬프 등), 검사 빈도, 해시 데이터베이스 저장 방법 / 위치 등
일부는이 과잉 행동을 고려할 수도 있지만 OP의 요구 사항에 따라 그가 저장 한 데이터가 특정 시점 이후에도 동일하게 유지 될 것이라는 확신을 줄 수 있습니다.
National National Archives of Australia는 GPLv3에서 무료로 사용할 수있는 [Checksum Checker] ( http://checksumchecker.sourceforge.net/ )를 개발했습니다 .
데이터베이스에서 체크섬과 알고리즘을 읽은 다음 파일의 체크섬을 다시 계산하고 두 값을 비교하여 오류가있는 경우보고합니다. MD5, SHA1, SHA2, SHA256 및 SHA512 알고리즘을 지원합니다.
디지털 저장소 [DPR] ( http://dpr.sourceforge.net/ )의 다른 소프트웨어 는 초기 체크섬을 생성하고 (다른 모든 처리 활동 수행)