저는 항상 동일한 파티션 레이아웃을 갖는 드라이브를 생성해야 하는 애플리케이션을 개발하고 있습니다. 나의 초기 아이디어는 sfdisk를 사용하여 원래 드라이브의 파티션 테이블을 덤프하는 것이었습니다.
sfdisk -d /dev/sdX > parttable
그런 다음 이를 다른 모든 드라이브에 적용합니다.
sfdisk /dev/sdX < parttable
하지만 이 방법은 통하지 않는 것 같습니다. USB 드라이브에서 올바른 파티션 테이블을 덤프한 다음 gparted를 사용하여 임의의 파티션을 만든 다음 초기 파티션 테이블을 드라이브에 다시 작성해 보았습니다.
그런데 문제는 파티션이 인식되지 않는다는 것입니다. 예를 들어 Gparted는 파티션을 알 수 없음으로 나열합니다. 파티션 테이블에는 파일 시스템에 대한 정보가 저장되지 않기 때문에 내가 만든 파티션을 포맷해야 할 수도 있겠다는 생각이 들었습니다.
이제 내 질문은: 어떻게든 파티션 테이블과 파티션에 대한 정보(파일 시스템 등)를 저장하고 이 방법으로 새 드라이브를 만들 수 있습니까(최대 하나의 명령 사용)입니다.
그런데: msdos 파티션 테이블
편집: 또 다른 접근 방식은 드라이브에 대한 모든 데이터(예: 부분 테이블, 파일 시스템)를 직접 수집하고 명령을 수동으로 생성하는 것입니다. 하나의 명령으로 파티션 테이블을 생성하고 여러 파티션을 포맷하는 것이 가능합니까(아마도 parted를 사용하여)?
답변1
다음 조건에서 작동합니다.
- 복사할 원본 디스크는
/dev/sdx
- 원시 디스크가 올바르게 분할/표시/태그 지정되었습니다.
- 원본 디스크의 파일 시스템 내용은 무시됩니다.
- 복사할 대상 디스크는 다음과 같습니다.
/dev/sdy
- 스왑 파티션은 다음과 같습니다.
/dev/sdy4
- 부팅 파티션은 최종 시스템의 파일 시스템과 함께
/dev/sdy1
마운트됩니다./boot
ext3
- 루트 파티션은 파일 시스템을 통해 최종 시스템에
/dev/sdy2
마운트됩니다./
ext4
- 사용자 파티션은 파일 시스템을 통해 최종 시스템에
/dev/sdy3
마운트됩니다./home
ext4
- 복사하려는 데비안 시스템은 다음과 같이 압축되었습니다.
master_system.tar.gz
- 스크립트를 포함한 모든 파일은 작업 디렉터리에 저장됩니다.
- 스크립트는 동일한 작업 디렉터리에서 실행됩니다.
root
스크립트는 다음으로 실행되지만 루트 또는 터미널sudo
로 로그인됩니다.su
dupe_mnt
작업 디렉토리에 디렉토리가 있습니다
원본 디스크의 파티션 구조를 "복사"하려면 구조가 변경되지 않는 한 한 번만 수행하면 됩니다.
sfdisk --dump /dev/sdx > master_table
문제의 시스템 사용자만이 데비안 시스템에서 마스터 시스템으로 무엇을 복사할지 결정할 수 있으므로 이에 대해서는 깊이 논의하지 않겠습니다. /proc
, /dev/
및 디렉토리를 복사하지 않을 것이라는 것을 알고 있지만 /sys
제외할 다른 디렉토리가 있어야 합니다. 원하는 방식으로 아카이브를 생성하고 이름을 지정합니다 master_system.tar.gz
. 여기에는 그 안에 및 디렉토리가 포함되어야 합니다 /boot
. /home
복사하려는 데비안 시스템이나 디스크 파티션을 변경할 때까지 설치가 완료됩니다.
생성될 스크립트는 다음과 같습니다 sys_replicate.sh
.
#!/bin/sh
target=$1;
sfdisk /dev/${target} < master_table;
# Format the swap partition
mkswap /dev/${target}4;
# Format the data partitions
mkfs.ext3 /dev/${target}1;
mkfs.ext4 /dev/${target}2;
mkfs.ext4 /dev/${target}3;
# Mount the target root filesystem and its parts
mount /dev/${target}2 dupe_mnt;
mount /dev/${target}1 dupe_mnt/boot;
mount /dev/${target}3 dupe_mnt/home;
# Copy the master system to the target
cd dupe_mnt;
tar -zxvpf ../master_system.tar.gz;
cd ..;
# Unmount the new system
cd ..
umount /dev/${target}3;
umount /dev/${target}1;
umount /dev/${target}2;
#done
이 파일에는 sys_replicate.sh
비트를 설정해야 합니다 execute
.chmod +x sys_replicate.sh
이 절차를 사용하려면 설정 후 대상 디스크를 연결하세요. USB인 경우 시스템에서 이를 사용 가능한 것으로 인식하는지 확인하세요. 내부 하드 드라이브인 경우 재부팅이 필요하며 시스템이 자동으로 이를 찾아야 합니다. 연결 후,매우/dev
디스크를 추가하면 문자가 재정렬될 수 있으므로 그것이 무엇인지 확인하십시오 . 준비가 되면 root
셸에서 실행합니다.
./sys_replicate.sh sdy
장치 이름은 운영 체제에 맞게 변경되어야 합니다 /dev/sdy
. /dev/sdx
게다가,sfdisk
할 수 있는GPT 디스크와 확장 파티션을 처리하므로 이전 의견 질문은 필요하지 않습니다. 원본보다 큰 디스크를 복사본으로 사용하면 모든 것이 여전히 잘 작동합니다. 할 수 없이 공간을 낭비하게 됩니다.용이하게그러나 복제할 기본 디스크를 선택하기 전에 이를 재활용하는 것이 좋습니다.
파티션 구조 생성과 데비안 시스템 복제는 독립적이므로, 하나를 변경해도 다른 것을 업데이트할 필요가 없습니다.
답변2
의견에서 언급했듯이 dd는 데이터, 파티션 레이아웃 등을 복사합니다. 유일한 문제는 원본 디스크와 대상 디스크가 동일해야 한다는 것입니다(실린더, 헤드, 섹터 등).
더 나은 옵션은 다소 하드웨어 중립적이 되는 옵션은 clonezilla를 사용하는 것입니다.http://clonezilla.org/
답변3
MBR 파티션은 디스크의 섹터 0이며 dd를 사용하여 복제합니다.
sudo dd if=/dev/sda of=/dev/sdb bs=512 count=1
참고: 대상 디스크의 데이터가 손상되었을 수 있습니다. 새 파티션을 활성화하려면 kpartx를 실행해야 합니다.