해당 디스크(소스)의 전체 파일 시스템을 동일한 용량의 연결된 디스크(대상)를 기반으로 하는 가상 블록 장치(devicemapper/cryptsetup)에 복제하여 디스크의 데이터를 암호화하고 싶습니다. 대상 디스크에 LUKS 장치를 설정했습니다.
소스 디스크가 다음으로 초기화되었습니다.파티션 없는 파일 시스템. 즉, 추가 LUKS2 헤더를 처리하기 위해 파일 시스템을 2MiB(4096블록 또는 4096바이트)만큼 축소한 다음 dd
소스 디스크의 파일 시스템에서 LUKS 장치로 데이터를 전송해야 합니다.
내가 하나 만들었어
resize2fs /dev/sda <newsize>
<newsize>
총 블록 수는 마이너스 4096이며 예상대로 작동하는 것 같습니다.
그러나 소스 디스크는 분할되지 않았으므로 dd
파일 시스템이 축소된 4096개 블록을 포함하여 전체 디스크가 계속 복사됩니다.
resize2fs
이제 내 질문은 다음과 같습니다. 작업의 사용 가능한 블록이 물리적 장치(소스)의 끝에 있다고 안전하게 가정 하고 count=<newsize> bs=4096
이를 매개변수로 dd에 전달할 수 있습니까? 이 복제/복사는 전체 파일 시스템을 복제합니까? 아니면 제가 고려하지 않은 다른 함정이 있나요?
보너스 질문: 다시 한 번 확인하자면, 블록당(파일 시스템의 파일당이 아닌) 디스크의 md5sum을 계산하는 도구가 이미 있습니까?
답변1
이제 내 질문은: resize2fs 작업의 사용 가능한 블록이 물리적 장치의 끝에 있다고 안전하게 가정할 수 있습니까?
예, 그것이 파티션이고 축소하려는 경우에도 가정해야 할 사항입니다.
따라서 ?
count=<newsize> bs=4096
에 매개변수로 전달됩니다 .dd
아마 그럴 겁니다.
dd
dd count=N bs=M
조금 이상하다아니요이는 각각 M 바이트의 N 읽기와 각 쓰기에 대해 해당 쓰기를 발행한다는 점을 제외하고 N*M 바이트가 복사된다는 것을 의미합니다. 읽기는 요청한 것보다 적은 바이트를 반환할 수 있으며, 이 경우 총 읽기 및 쓰기가 원하는 것보다 적습니다.
실제로 Linux 블록 장치가 부분 읽기를 반환하는 것을 본 적이 없으므로 제대로 작동할 것입니다. 출력을 확인해야 하며 "N+M records"와 같은 내용이 표시되어야 합니다. 여기서 첫 번째 숫자는 읽은 전체 블록 수이고 두 번째 숫자는 읽은 부분 블록 수입니다. GNU dd는 불완전한 읽기에 대해서도 경고해야 합니다.
어쨌든 head -c $(( nblocks * 4096 ))
.
바라보다:dd vs cat - dd는 오늘날에도 여전히 의미가 있나요?그리고dd는 언제 데이터 복사에 적합합니까? (또는 read() 및 write()가 부분적인 경우)
(어쨌든 인터넷에 낯선 사람의 게시물을 기반으로 작업하기 전에 숫자를 다시 확인하십시오. 이는 파일 시스템이므로 다른 사람의 철자 실수로 인해 혼란스러워지고 싶지 않을 것입니다. 아마도 이미 알고 있지만 상관 없습니다. )
다시 한 번 확인하자면, 블록별로 디스크 블록의 md5sum을 계산할 수 있는 도구가 이미 있습니까?
md5sum /dev/sdx
또는 을 실행할 수 있어야 합니다 head -c $bytes /dev/sdx | md5sum
.
MD5는 실수로 손상되거나 잘린 복사본을 검사하는 데는 문제가 없지만 일반적으로 손상된 것으로 간주됩니다. 동일한 해시를 가진 다른 파일을 쉽게 생성할 수 있습니다. 엄격하게 사용하려면 SHA-2 해시(예: sha256sum
또는 ) 를 대신 사용하세요 sha512sum
.