2017-04-26 13 views
2

zfs 데이터 세트의 체크섬을 읽거나 액세스 할 수 있습니까? 나는 부츠 사이에 변화가 없다는 것을 확인하기 위해 그것을보고 싶다. 읽는 중 https://en.wikipedia.org/wiki/ZFS#ZFS_data_integrity : Merkle Tree의 최상위 체크섬이 사용자 공간에서 액세스 할 수있는 zfs의 체크섬 구성표입니까?cli를 통해 zfs 데이터 세트의 체크섬에 액세스

+0

시스템이 재부팅 될 때마다 ZFS가 ZFS 파일 시스템의 모든 파일의 체크섬을 다시 계산한다고 생각하지 않기를 바랍니다. 그렇게해도 체크섬을 어떻게 비교할 것입니까? 그런 다음 차이점을 발견하면 저장 한 체크섬이 올바른 값이라는 것을 어떻게 알 수 있습니까? –

+0

아니요, 지속적으로 업데이트되는 경쟁 데이터 세트의 일부 체크섬이 있기를 바랍니다. "dd if =/dev/sda of =/tmp/a; md5sum/tmp/a"의 기능을 제공 할 것이지만, 전체 hd에 대해 체크섬을 수행하는 대신 연속적으로 갱신되는 체크섬 일 수 있습니다. hirarchicaly 업데이트 된 체크섬을 보여주는 슬라이드를 기억하기 때문에이 질문을드립니다. –

+0

https://en.wikipedia.org/wiki/ZFS#ZFS_data_integrity 다음 질문은 Merkle Tree의 최상위 체크섬에 사용자 공간에서 액세스 할 수있는 날씨라고 생각합니다. –

답변

1

이 작업을 수행 할 수있는 zdb이라는 (주로 개발자 용) 도구가 있습니다. 파일 시스템이 변경되지 않았는지 확인하고 싶다면이 용도로 스냅 샷을 사용할 수 있습니다. 먼저 비교할 지점에서 나중에 zfs snapshot <pool>/<fs>@<before-reboot-snap>으로 스냅 샷을 만듭니다. 재부팅 후

  1. , zfs diff <pool>/<fs>@<before-reboot-snap> <pool>/<fs> 실행 : 그럼 나중에 스냅 샷 파일 시스템을 비교하는 두 가지 방법이 있습니다. 내가 수정 된, 그것은 살았던 디렉토리가 여전히 표시되어 새 파일을 삭제 한 후에도

    # ls /tank/hello 
    file1 file2 file3 file4 file5 
    # zfs snapshot tank/[email protected] 
    # zfs diff tank/[email protected] tank/hello 
    # touch /tank/hello/file6 
    # zfs diff tank/[email protected] tank/hello 
    M  /tank/hello/ 
    +  /tank/hello/file6 
    # rm /tank/hello/file6 
    # zfs diff tank/[email protected] tank/hello 
    M  /tank/hello/ 
    

    참고 : 이렇게하면 스냅 사진과 현재의 파일 시스템 사이의 "차이점"의 목록이 표시됩니다.

  2. 다시 부팅 한 후 다른 스냅 샷을 가지고, 다음 해당 스냅 샷 사이에 일어난 모든 변화의 흐름을 만들 수 zfs send -i @<before-reboot-snap> <pool>/<fs>@<after-reboot-snap>을 사용하고 zstreamdump라는 또 다른 도구를 사용하여 그것을 분석 : 쇼 위

    zfs send -i @snap tank/[email protected] | zstreamdump 
    BEGIN record 
         hdrtype = 1 
         features = 4 
         magic = 2f5bacbac 
         creation_time = 59036f98 
         type = 2 
         flags = 0x4 
         toguid = 2f080aca53bff68e 
         fromguid = 66a1da82cd5f1571 
         toname = tank/[email protected] 
    END checksum = 91043406e5/38f3c4043049b/ed0867661876670/1e265bea2b6c3315 
    SUMMARY: 
         Total DRR_BEGIN records = 1 
         Total DRR_END records = 1 
         Total DRR_OBJECT records = 12 
         Total DRR_FREEOBJECTS records = 5 
         Total DRR_WRITE records = 1 
         Total DRR_WRITE_BYREF records = 0 
         Total DRR_WRITE_EMBEDDED records = 0 
         Total DRR_FREE records = 17 
         Total DRR_SPILL records = 0 
         Total records = 37 
         Total write size = 512 (0x200) 
         Total stream length = 13232 (0x33b0) 
    

    WRITE, FREE, OBJECT 또는 FREEOBJECTS과 같은 내용이 원본 스냅 샷과 다른 점을 나타냅니다.

+0

좋아, 어쩌면 스냅 샷 충분한 신뢰를 제공합니다. 나는 zdb에서 유용한 정보를 얻으려고했지만 couldnt는 무언가가 쓰여졌을 때에 만 바뀔 수있는 마법의 수를 발견했다. zfs eather의 내부 구조에 대해 잘 모르기 때문에 실제로 무엇을 찾아야할지 모릅니다. –

+0

ZFS 개발자가 디스크에있는 형식으로 많은 시간을 소비하지 않는 한'zdb'는 거의 뚫을 수없는 내용입니다. 그래서 대신 스냅 샷 방법 중 하나를 사용하는 것이 좋습니다. – Dan

+0

모든 "It 's Pure Magic !!!!"을 감안할 때!"Sun이 초기에 ZFS에 대해 언급 한 과장된 사실은 zdb가 출시되었을 때 실제로 놀랐 기 때문에 아직 뚫을 수없는 것이 놀랄 일이 아닙니다. ("ZFS는 항상 디스크에 일관성이 있습니다 ***와 같은 주장을 기억하십시오. 그래서 어떤 fsck이나 디버깅 도구도 *** 필요합니다 !!!!!!!!!!! 물론, Sun/Solaris 커뮤니티의 우리 모두는 좋은 웃음을 지니고있었습니다 ...) –