dd를 사용하여 파일의 데이터를 다른 파일의 특정 위치로 복사하면 출력 파일이 잘립니다.

dd를 사용하여 파일의 데이터를 다른 파일의 특정 위치로 복사하면 출력 파일이 잘립니다.

fs.image단일 파일 시스템을 포함하는 루프백 파일이 있습니다 . 이를 . 여러 파티션과 여러 파일 시스템을 포함하는 훨씬 더 큰 또 다른 루프백 파일이 있습니다 disk.image. 이를 .

fs.image의 파티션 중 하나와 정확히 같은 크기입니다 disk.image. 해당 disk.image파일의 데이터를 올바른 위치에 복사하고 싶습니다 .

적절한 오프셋을 계산하고 dd. 블록 장치와 함께 작동하기 때문에 이것이 작동할 것이라고 생각했지만 그렇지 않습니다. disk.image방금 작성된 데이터 바로 다음 위치에서 잘립니다.

dd파일이 잘리지 않게 하는 방법이 있나요 ?

fs.image로 압축되었으며 fs.image.bz2, 제가 실행하는 명령은 다음과 같습니다:

bzcat fs.image.bz2 | dd of=disk.image bs=4M seek=$OFFSET

$OFFSET계산된 오프셋은 어디에 있나요?

나는 이것을 달성하는 다른 방법에 대해 생각해 보았지만 이것이 (효과가 있었다면) 가장 간단한 것 같습니다. 일단 옵션은 삽입 지점까지 데이터를 다른 파일에 복사하고, 파일 시스템을 추가하고, 마지막으로 원본 파일의 나머지 부분을 추가하는 것입니다. 그러나 실제로 필요하지 않은 많은 데이터를 복사하게 되므로 속도가 느려질 수 있습니다. 나는 다른 옵션을 선택할 수 있습니다.

답변1

GNU dd(최소 버전 8.23)에는 다음이 있습니다.변환 플래그

notrunc 출력 파일을 자르지 마십시오

당신이 원하는 것을 정확히 수행합니다. 여기에 작은 예가 있습니다:

$ cat foo
foobar
$ echo -n XX | dd of=foo bs=1c seek=1 conv=notrunc
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000283698 s, 7.0 kB/s
$ cat foo
fXXbar

관련 정보