BS 옵션으로 인해 데이터가 dd와 일치하지 않게 됩니까?

BS 옵션으로 인해 데이터가 dd와 일치하지 않게 됩니까?

dd를 사용하여 백업한 노트북 파티션(truecrypt)이 있습니다. 원시 비트 단위 복사본 외에는 다른 것으로 백업하는 것이 불가능하기 때문입니다. 예를 들면 다음과 같습니다.

dd if=/dev/sda of=imagefile.img

물론 성공적으로 복원할 수도 있지만 기본 bs(512)를 사용하면 복원 시간이 매우 깁니다.

BS 크기를 1MB로 늘리면 불일치가 발생합니까? 머신에는 8GB의 RAM이 있으므로 디스크에 쓰기 전에 1MB, 10MB 또는 100MB를 메모리로 읽는지는 중요하지 않습니다. 하지만 이미지 파일의 끝과 파일의 끝에 도달하면 어떻게 되는지 궁금합니다. 분할. 다음 디스크 영역의 데이터를 덮어쓰려고 하지 않나요?

마지막 읽기에서 이미지에 512바이트만 남아 있다고 가정하면 512바이트 + 나머지 0.00048828125MB를 디스크에 쓰려고 시도합니까?

dd if=imagefile.img of=/dev/sda1 bs=1M

감사해요

답변1

좋은 질문입니다. 살펴보겠습니다. 임의의 데이터를 만드세요.

dd if=/dev/urandom of=/tmp/rand1Mx10.dat bs=1M count=10

여러 가지 방법으로 복제하세요.

$ dd if=rand1Mx10.dat of=1Mx10copy_3M.dat bs=3M status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0196387 s, 534 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_1M.dat bs=1M status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0176384 s, 594 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_nbs.dat  status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.083932 s, 125 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_333.dat bs=333 status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0649439 s, 161 MB/s

$ dd if=rand1Mx10.dat of=1Mx10copy_pi.dat bs=314159265 status=progress
10485760 bytes (10 MB, 10 MiB) copied, 0.0103404 s, 1.0 GB/s

나가:

$ shasum /tmp/*.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_1M.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_333.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_3M.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_nbs.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/1Mx10copy_pi.dat
9303b1c6a72ab0ed4c6d7f091ec9f16b8c5ecda1  /tmp/rand1Mx10.dat


$ ls -l *.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:15 1Mx10copy_1M.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:16 1Mx10copy_333.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:14 1Mx10copy_3M.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:15 1Mx10copy_nbs.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:17 1Mx10copy_pi.dat
-rw-rw-r-- 1 mike mike 10485760 Feb 15 09:11 rand1Mx10.dat

모든 것이 확인되었습니다. dd동일한 바이트 수를 보고합니다. 파일 크기가 일치합니다. 해시 값이 대기열에 들어갑니다. dd입력 파일이 소진되거나 공간이 모두 소모되면 쓰기를 중지하는 방법을 알아두세요. 철저하게 하기 위해 다시 한 번 더 작은 크기의 파일 시스템을 생성하겠습니다.

10MB 파일을 만듭니다.

$ dd if=/dev/zero of=/tmp/myfs.img bs=1M count=10 

파일 시스템으로 전환:

$ mkfs.ext4 myfs.img 

마운트(루트 사용)

$ sudo mount myfs.img /mnt/myfs
$ sudo chown -R $USER:$USER /mnt/myfs

공간을 살펴보세요(메타데이터, inode 등으로 인해 파일 크기보다 작습니다).

$ df -h /mnt/myfs 
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      8.7M   92K  7.9M   2% /mnt/myfs 

10MB를 쓰세요:

$ dd if=rand1Mx10.dat of=/mnt/myfs/1Mx10copy_pi.dat bs=314159265 status=progress
dd: error writing '/mnt/myfs/1Mx10copy_pi.dat': No space left on device
0+1 records in
0+0 records out
8269824 bytes (8.3 MB, 7.9 MiB) copied, 0.205584 s, 40.2 MB/s

공간이 충분하지 않지만 커널의 관점에서 볼 때 쓸 곳이 없기 때문에 "그 이상으로 쓸 수 없습니다". 이전 파일과 다릅니다(잘랐기 때문에).

$ shasum /mnt/myfs/1Mx10copy_pi.dat 
2c7330b75e1fa573de4d13ce3c7cbcad8139454d  /mnt/myfs/1Mx10copy_pi.dat

그러나 전체 "장치"를 복제하는 경우(더 큰 블록 크기에 유의)

$ dd if=myfs.img of=myfs2.img bs=1G status=progress
0+1 records in
0+1 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0255448 s, 410 MB/s
$ sudo mkdir -p /mnt/myfs2     
$ sudo mount myfs2.img /mnt/myfs2
$ shasum /mnt/myfs2/1Mx10copy_pi.dat
2c7330b75e1fa573de4d13ce3c7cbcad8139454d  /mnt/myfs2/1Mx10copy_pi.dat
 

우리는 원본을 얻었습니다.

답변2

가장 좋은 방법은 백업하기 전에 모든 파일에 대해 MD5 해시를 실행한 다음 해당 MD5 ​​해시를 복원하고 확인하는 것입니다.

dd if=imagefile.img of=/dev/sda1 bs=4M

16M 이상을 사용해 볼 수도 있습니다. 가끔 MD5 해시를 확인하세요.

데이터 불일치는 여러 가지 이유로 발생할 수 있습니다. BS 옵션 자체가 문제를 일으키는 것으로 의심됩니다. 일반적으로 이는 백업 중에 시스템이 수행하는 작업에 따라 달라지며, 이는 데이터 불일치를 일으킬 수 있습니다.

관련 정보