원시 블록 장치의 비교


12

두 개의 블록 장치를 비교할 수있는 유틸리티 (또는 일부 마법)가 있습니까?

세부 정보 : dd를 사용하여 약간 더 큰 SATA 장치에 백업 한 하나의 큰 (0.5TB) RAID 장치가 있습니다. 장치에는 여러 개의 파티션이 있지만 파티션 된 장치 노드가 아닌 '부모'장치에서 복사합니다 (예 : / dev / hda는 복사하지 않고 / dev / hda를 복사합니다).

백업이 올바른지 확인하고 싶습니다.

각 장치에서 md5sum을 실행하는 것에 대해 생각했지만 두 번째 장치가 첫 번째 장치보다 약간 커서 여분의 바이트가 해시를 변경하므로 정확한 결과를 얻지 못합니다.

답변:


13

나는 명령을 사용할 것이다

cmp /dev/hda /dev/hdb

첫 번째 다른 바이트에서 중지하고 오프셋을 쓰거나 짧은 EOF에서 EOF에 기록합니다.


맨 페이지에는 EOF에서 멈추는 것에 대해 아무것도 보지 못합니다. 어딘가에 기록되어 있습니까?
Kevin

실제로 종료 상태는 다음과 같습니다. "1 : 파일이 다릅니다. 한 파일이 다른 파일의 첫 번째 부분과 동일한 경우도 포함됩니다." 이것은 그들이 더 짧은 경우에 그것들을 동일하다고보고하지 않는 것을 암시하는 것으로 보인다.
Kevin

@Kevin : from info cmp: " 'cmp'명령은 두 파일을 비교하고, 서로 다르면 첫 번째 바이트와 행 번호를 알려줍니다."
enzotib

1
당신은 사용할 수 있습니다 --bytes=LIMIT, 설정, 옵션을 LIMIT하지 않고 작은 드라이브 (또는 파티션 경계)의 끝에서 중지하는 작은 장치의 bytesize에 값을 cmp비 제로 상태로 종료.
rozcietrzewiacz

/ dev / sda의 / dev / loop0 복사본이 있고 / dev / loop0을 변경하면 / dev / sda에 새로운 변경 사항을 어떻게 추가 할 수 있습니까 ?? 감사합니다
Milor123

2

드라이브의 실제 용량에 따라 파일 시스템을 마운트하고 수행하는 것이 가장 빠를 수 있습니다

diff -qr /mnt/root1 /mnt/root2

그렇지 않으면 다음과 같이 말할 것입니다.

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

작은 드라이브의 끝에서 ( bs그리고 count훨씬 더 편리한 경우 직전에) 얼마나 크게해야하고 멈추어야 하는지 정확히 파악 하십시오.

또는 enzotib의 의견 덕분에을 사용할 수있는 것처럼 보이지만 바이트 수를 두 드라이브 중 더 짧은 것으로 제한하려면 플래그가 cmp필요 -n합니다.

cmp /dev/sda /dev/sdb -n 500GB

불행히도 장치를 NTFS 볼륨으로 마운트 할 수 없으며 올바른 드라이버가없는 LiveCD가 있습니다. 두 번째 명령의 경우 사용하는 서브 쉘은 diff로 공급하기 전에 전체 장치를 메모리로 빨아들이려고하지 않습니까?
alanxz

1
@alanxz 아니오, diff서브 쉘은 디바이스를 작성하기 전에 전체 디바이스를 읽지 않습니다. 바이트 ddbs읽은 직후 (또는 여기에 지정되지 않은 경우 처리 된 경우 ) 바이트를 쓰고 fifos에 쓰며 읽을 때까지 블록합니다.
Kevin

나는 쉘 수준 (또는 FIFO를 구현하는 모든 것)에서 더 많이 생각하고있었습니다. 그러나 그것은 내 질문에 대답합니다!
alanxz

2

바이너리 diff 소프트웨어를 찾고 있습니다

rdiff
는 백업 및 네트워크 전송을 위해 설계되었으며 백업 propuse에 대한 rdiff-backup 및 이중성을 살펴 봅니다.

xdelta3
은 오픈 소스 바이너리 diff 차등 압축 도구 인 VCDIFF (RFC 3284) 델타 압축입니다.

bsdiff
도! 배고픈 메모리는 블록 장치에 적합하지 않습니다.


1

bsdiff 라는 유틸리티가 있습니다.이 유틸리티 는 정확히 이런 종류의 일을합니다. 정말 빠르며 필요한 경우 바이너리 패치를 생성 할 수 있습니다.

주변에 대한 설명 은 이 게시물 을 참조하십시오 .


bsdiff작업은 단순히 두 파일을 비교하는 것보다 더 복잡하므로 더 간단한 것보다 빠를 수는 없습니다 cmp.
enzotib

링크가 끊어졌습니다.
Owen Pauling

1

다음과 같이 두 가지 다른 크기의 블록 장치를 비교할 수 있습니다 md5sum.

(더 작은 장치가 있다고 가정 /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

0

fsck백업 실행 을 고려하십시오 . losetup백업에 포함 된 파티션에 루프백 장치를 설정하기 위해 몇 가지 트릭을 수행해야 할 수도 있지만 파일 검사에서 파일 구조가 일관성이 있으면 데이터 자체가 양호 할 수 있습니다.

전체 체크섬을 원할 경우 오프셋이있는 루프백 장치를 사용하여 백업의 내부 '파티션'과 md5sum을 각각 개별적으로 볼 수 있지만, 강제 fsck로 바이트 비교 또는 체크섬 계산을 위해 바이트보다 훨씬 빠른 기본 아이디어를 제공 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.