dd를 사용하여 파티션 데이터를 오른쪽으로 이동


2

나는 도움이 필요해. DD 내 파티션을 오른쪽으로 blockwise 이동하는 명령 줄.

나는 몇몇 PC를 이미지화하기위한 도구를 사용할 때 오류가 발생하여 데이터를 잃지 않고 해당 기계를 다시 분할해야합니다. 이것은 gparted 0.18.0에서 꽤 잘 작동합니다. 79MB의 오프셋으로 두 번째 파티션을 오른쪽으로 옮깁니다. 그런 다음 79MB의 첫 번째 파티션을 만듭니다. 모든 것이 완벽하게 작동합니다. 그러나 약 35 대의 기계가 있기 때문에 그 작업을 수행하는 스크립트를 만들고 싶었습니다.

크기 조정 및 모든 것이 매우 쉽습니다. 내 머리 속에 들어 가지 않는 것은 파티션을 오른쪽으로 옮기는 것입니다. 기본적으로 나는 DD 명령 줄. 내 생각은 내가 뒤에서 시작해서 앞쪽으로 나아가 야한다는 것이다. 그래서 나는 생각했다.

  • if와 of는 같은 파티션입니다 (이미 오프셋 데이터에 맞게 기억됩니다) / dev / sda2
  • bs는 16MiB 일 수 있습니다. 그 이유는 벤치마킹 된 gparted
  • 데이터를 덮어 쓰지 않도록 오른쪽에서 왼쪽으로 복사를 수행하는 매개 변수는 무엇입니까?

나는 gparted의 유지 보수 담당자와 이야기를 나눴고 그는 dd가이를 달성하는데 사용되었다고 말했다. 그러나 나는 방법을 이해할 수 없다.

답변:


2
  • 데이터를 덮어 쓰지 않도록 복사를 오른쪽에서 왼쪽으로 보관하는 매개 변수는 무엇입니까?

존재하지 않으며, 존재하지 않습니다. 한 명령으로 DD 솔루션

또한 나는 당신이 사용하는 것을 경고한다. DD 왜냐하면 무언가가 실패하면 백업없이 데이터를 복구 할 기회가 없기 때문입니다. 하지만 백업이 있다면 작업은 쉽지 않습니다. 그래서 기권 .

이제 재미있는 방법 (나는 당신의 질문을 흥미롭게 생각한다). 나는 그런 식으로 파티션을 움직이지는 않았지만 작동 할 수 있습니다. 따라서 테스트 파일에 개념 증명이 있습니다.

perl -e 'foreach $i (0..1023) { printf "%0.7i\n", $i; }' >test.dat

그냥 실험용 테스트 파일 만들기.

우리는 또한 필요합니다. pv 명령 이는 우리의 데이터를위한 버퍼처럼 행동 할 수 있습니다. pv -B buffer_size_in_bytes

dd if=test.dat | pv -B 1024 | dd of=test.dat seek=2

태만 DD 블록 크기는 512 바이트입니다. 데이터를 2dd 블록만큼 이동하므로 1024 바이트의 버퍼로 충분합니다.

dd if=/div/sda bs=512*device block size* skip=111111*much blocks until sda2 begins*
| pv -B 90000000 *have_to_fit_shift size+*
| dd of=/div/sda seek=(blocks until sda2 begins + amount of blocks we shift that for)

그 후 모든 것이 정상적으로 진행되면 파티션 테이블을 수정해야합니다.

하지만 아마 더 일반적인 방법 - 청크에 의해 dd 청크와 데이터를 이동하는 것입니다

dd if=/div/sda bs=1M count=100 skip=PosToRead seek=PosToWrite
PosToRead -= dd_count
PosToWrite -= dd_count
repeat if not done

또한 그곳에 반대 방향으로 움직이는 dd, dd 명령 처리 및 오프셋 결정에 흥미


+1에 대해 pv - 그것에 대해 알기에 매우 편리합니다!
starfry

0

dd_rescue 옵션이있다. -r 방향을 반대로하기 위해서.

사용 예 :

partition=/dev/vdc1
disk=/dev/vdc
sector_size=512
new_start_sector=4096
# opos is right after the new partition and given in bytes
opos=$(($new_start_sector * $sector_size + `blockdev --getsize64 $partition`))
dd_rescue -v -r -S $opos $partition $disk

그런 다음 파티션 테이블을 업데이트하는 것을 잊지 마십시오. 전에 업데이트하지 마세요!

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