표준 도구를 사용하여 전체 디스크의 파티션 레이아웃을 복사하는 방법


81

논리 드라이브를 포함하여 하드 드라이브 의 전체 파티션 레이아웃 을 백업 하여 해당 레이아웃을 다른 디스크로 복원 할 수 있습니다. 파티션의 내용을 복사 하지 않고 레이아웃 만 복사하고 싶습니다. 기본 및 확장 파티션의 경우 다음과 같이 쉽습니다.

dd if=/dev/sda of=partitiontable.bin bs=1 skip=446 count=64 # backup
dd if=partitiontable.bin of=/dev/sda bs=1 seek=446 count=64 # restore

그러나 논리 파티션의 레이아웃과 관련하여 표준 도구 중에 레이아웃을 저장하는 비슷한 방법이 있는지 궁금합니다. 주된 문제는 EBR의 위치에 대한 오프셋을 찾는 dd것입니다. 왜냐하면 EBR의 위치가 나머지를 수행 하기 때문입니다 . 모든 것을 다시 빈 디스크에 다시 넣고 동일한 레이아웃을 복원 할 수 있어야합니다. fdisk또는 같은 분할 도구를 사용하는 parted것이 좋지만 사용 (스크립트)을 자동화 할 수 있어야하며 X 관련 패키지 (명령 줄 만)에 의존해서는 안됩니다.

내 백업 계획은 struct 모듈을 사용하여 작은 파이썬 스크립트에서 수동으로 수행하지만 더 쉬운 방법이 있기를 바랍니다.

답변:


89

이 작업에 sfdisk 를 사용할 수 있습니다 .

저장하기:

sfdisk -d /dev/sda > part_table

복원:

sfdisk /dev/sda < part_table

GPT 파티션 테이블의 경우 sfdiskutil-linux 2.26 이상 이 필요합니다 . 그것은 libfdisk 위에 처음부터 다시 작성되었습니다 .

그러면 새 UUID가 생성되지 않고 UUID가 변경되지 않습니다. 따라서 새 디스크는 레이아웃이 동일한 다른 디스크 만이 아니라 원본의 복제본입니다. 리눅스 /dev/disk/by-uuid/는 파티션 테이블의 UUID가 아니라 파일 시스템 UUID를 살펴 본다는 점에 유의 하십시오. sfdisk덤프에서 UUID를 편집하면 새 UUID가 생성됩니다 (파일의 시작 부분 근처에있는 파티션 테이블 자체의 파티션 및 UUID).


1
확실하지는 않지만 msdos 파티션 테이블 구성표에 의해 부과되는 파티션의 2TB 크기 제한입니다. 이 한계를 극복하기 위해 대신 GPT를 사용할 수 있지만 AFAIK sfdisk는 GPT에서 작동하지 않습니다. 다른 제한이 있는지 또는 sfdisk가 대처할 수 없는지를보고하는지 여부는 알 수 없습니다.
Petr Uzel

2
sfdisk대량으로 작동하지 않거나 GPT를 지원하지 않습니다.
dhchdhd

1
@Barry와 "대형"이라고 말할 때 @Petr이 말하는 2TB 제한을 말하는 것입니까?
Lauritz V. Thaulow

5
올바른 방법은 다음과 같습니다 sudo는 헤어진는 / dev / sda를 -lm> sda.parted
dhchdhd

1
때때로 DOS 전용 문제를 무시하고 -L 또는 --linux 옵션 을 추가하는 것이 유용합니다 .sfdisk -L /dev/sda < part_table
Diego

50

소스 디스크가 MBR (일명 "dos"또는 "msdos") 또는 GPT (일명 "GUID") 파티션 테이블을 사용 하는지 여부에 따라 다릅니다 .

2TB가 넘는 디스크는 MBR을 사용할 수 없으므로 GPT입니다.

2TB 미만의 디스크는 두 가지를 모두 사용할 수 있으므로 먼저 어느 디스크인지 확인해야합니다.

Linux를 사용한다고 가정하면 다음 명령 중 하나를 사용하여 소스 디스크가 사용하는 파티션 테이블을 찾으십시오.

disk=/dev/sda

# Always available, but old versions may not recognize gpt
fdisk -l $disk | grep type

# `apt-get install gdisk` or equivalent on non-Debian systems
gdisk -l $disk | grep -A4 'scan'

# `apt-get install parted`
parted $disk print | grep Table

주어진

source=/dev/sda
dest=/dev/sdb

MBR 디스크

sfdiskPetr Uzel의 답변 또는이 변형에서 제안한대로 사용하십시오 .

# Save MBR disks
sfdisk -d $source > /partitions-backup-$(basename $source).sfdisk
sfdisk -d $dest   > /partitions-backup-$(basename $dest).sfdisk

# Copy $source layout to $dest
sfdisk -d $source | sfdisk $dest

GPT 디스크의 경우

정답은 여기여기Kris Harper에 의해 주어졌습니다 .

GPT fdisk 가 필요합니다 . 상기 봐 다운로드 페이지 또는 실행 sudo apt-get install gdisk.

그런 다음 sgdisk 명령을 사용하십시오 .

# Save MBR disks
sgdisk --backup=/partitions-backup-$(basename $source).sgdisk $source
sgdisk --backup=/partitions-backup-$(basename $dest).sgdisk $dest

# Copy $source layout to $dest and regenerate GUIDs
sgdisk --replicate=$dest $source
sgdisk -G $dest

마지막 명령은 디스크와 모든 파티션에서 GUID를 무작위 화합니다. 디스크를 동일한 시스템에서 사용해야하는 경우에만 필요합니다. 그렇지 않으면 필요하지 않습니다.


10
나는 항상 두 가지 매개 변수를 혼합 할까봐 두려워서 --backup=File소스 드라이브에서 파티션 테이블을 내보내고 --load-backup=File대상 드라이브에서 복원하는 것이 좋습니다.
zidarsk8

파티션 테이블을 이동 한 다음 위에서 설명한대로 디스크 및 파티션의 GUID를 무작위화할 때 디스크 및 후속 파티션의 기존 데이터에 위험이 있습니까? 감사!
EngBIRD

@EngBIRD : $ source와 $ dest를 혼합하지 않는 한 대상에 데이터가 없기 때문에 데이터에 위험이 없습니다. 파티션 레이아웃 만 복사하고 나중에 데이터를 포맷하고 복사해야합니다.
mivk

내가 요청한 이유는 사실 빈 디스크에서 시작하지 않고, 두 개의 디스크를 교체하는 것입니다.
EngBIRD

5

오래되었지만 여전히 흥미로운 pypartedpython-lvm 바인딩.

최신 정보:

위의 내용은 sfdisk 매뉴얼 페이지 당 많은 현대 상황에서 작동하지 않기 때문에 게시되었습니다.

sfdisk는 GUID 파티션 테이블 (GPT)을 이해하지 못하며 큰 파티션 용으로 설계되지 않았습니다. 특히 고급 GNU parted (8)를 사용하십시오.

그러나이 명령은 2TB 이상의 파티션과 LVM을 지원합니다.

# parted -ms /dev/sda print > sda.parted

샘플 출력 :

BYT;
/dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk;
1:1049kB:12.9GB:12.9GB:::boot, lvm;

14
저장된 sda.parted파일에서 새 디스크로 어떻게 복원 합니까?
에이버리 찬

4
이 답변은 파티션 레이아웃을 새 드라이브로 복사하는 것에 관한 문제이기 때문에 쓸모가 없습니다. 답은 덤핑에 관한 것입니다. 수입하는 방법? 개선하십시오.
itsafire

분명히 현재로서는 정답이 없습니다 : serverfault.com/questions/709582/…
테우스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.