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

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

전체 파티션을 백업하고 싶습니다공들여 나열한 것해당 레이아웃을 다른 디스크에 복원할 수 있는 논리 드라이브를 포함한 하드 드라이브. 그래요아니요파티션의 내용을 복사하려면 레이아웃만 복사하세요. 기본 및 확장 파티션의 경우 간단합니다.

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나머지 작업을 수행하기 때문입니다. 모든 것을 (아마도) 빈 디스크에 다시 넣어서 동일한 레이아웃을 복원할 수 있어야 한다는 점을 명심하십시오. fdisk또는 같은 분할 도구를 사용하는 것은 좋지만 parted사용(스크립트)을 자동화할 수 있어야 하며 X 관련 패키지에 의존해서는 안 됩니다. 명령줄에만 의존해야 합니다.

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

답변1

당신은 그것을 사용할 수 있습니다플로피 디스크이 작업은 GPT 파티션 디스크에서도 수행할 수 있습니다*.

구하다:

sfdisk -d /dev/sdX > part_table

복원 시 동일한 디스크 및 파티션 ID를 유지하십시오**:

sfdisk /dev/sdX < part_table

복구 시 새 디스크 및 파티션 ID가 생성됩니다**:

grep -v ^label-id part_table | sed -e 's/, *uuid=[0-9A-F-]*//' | sfdisk /dev/sdY

노트

*: 을 위한GPT 파티션 테이블, sfdiskutil-linux 2.26 이상이 필요합니다. 그것libfdisk 위에 처음부터 다시 작성됨.

**: 기본적으로 sfdisk디스크 및 파티션 ID는 새 ID를 생성하는 대신 그대로 복사됩니다. 따라서 새 디스크는 동일한 레이아웃을 가진 다른 디스크가 아니라 원본 디스크의 복제본이 됩니다. Linux는 /dev/disk/by-uuid/파티션 테이블의 UUID가 아닌 파일 시스템 UUID를 확인합니다. sfdisk파티션 ID()에 대한 참조와 디스크 ID()에 대한 참조가 덤프에서 제거되면 , uuid=...새 UUID가 생성됩니다.label-id: ...

답변2

때에 따라 다르지소스 디스크가 다음을 사용하는 경우막 생물 반응기(일명 "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 디스크의 경우

정답이 주어졌습니다.여기그리고여기통과크리스 하퍼.

당신은해야합니다GPT 디스크. 저것 좀 봐(이거다운로드 페이지또는 실행하십시오 sudo apt-get install gdisk.

그런 다음 사용sgdisk주문하다:

# Save GPT 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를 무작위로 지정합니다. 이는 디스크가 동일한 머신에서 사용되는 경우에만 필요하며, 그렇지 않으면 필요하지 않습니다.

답변3

오래됐지만 여전히 흥미롭다파이파티드그리고파이썬 LVM제본.

고쳐 쓰다:

sfdisk 매뉴얼 페이지에 따르면 위의 내용은 많은 최신 상황에서 작동하지 않기 때문에 이전 내용을 게시합니다.

sfdisk는 GPT(GUID 파티션 테이블)를 이해하지 못하며 대규모 파티션용으로 설계되지 않았습니다. 특별한 경우에는 고급 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;

답변4

최신 sfdisk는 mbr 및 gpt 파티션 테이블에서 작동하는 것 같습니다.

내가 선호하는 방법은 다음과 같습니다.

sfdisk -d /dev/nvme0n1 | sfdisk /dev/nvme1n1

여기서 /dev/nvme0n1은 소스 디스크이고 /dev/nvme1n1은 대상 디스크입니다.

관련 정보