QEMU에서 시작하고 실행할 수 있는 IMG 파일로 Linux 시스템을 백업하려고 합니다.
노트:저는 Lubuntu와 작은 코어 Linux에서 테스트했습니다.
내가 따르는 과정은 다음과 같습니다.
sda
하드 드라이브 가 2개 있고sdb
- 파티션
sdb1
및 마운트sdb1
파티션/mnt/sdb
dd
sda
마운트된 디렉터리sdb
에 있는 IMG 파일 크기의 빈 파일입니다 .dd if=/dev/zero of=/mnt/sdb/disk.img bs=x count=1
- x의 크기sda
- 그런 다음
fdisk
on을 사용하여sda
디스크 레이아웃을 스크립트 파일로 출력한 다음 이를disk.img
파일 에 로드합니다. - 그런 다음 -losetup -P -f disk.img 내용을 마운트하고 복사합니다.
순환 장비 찾기
예를 들어 /dev/loop36 0 0 0 0 /mnt/sdb/disk.img 0 512
루프 장치의 첫 번째 파티션에 파일 시스템을 생성합니다.
mkfs.ext2 /dev/loop36p1
- 분할된 사이클링 장비 설치 -
mount /dev/loop36p1 /mnt/img
- 그런 다음 부팅 섹터를 복사하십시오.
dd if=/dev/sda of=disk.img bs=512 count=1 conv=notrunc
결국 rsync를 사용하여 파일 시스템을
/mnt/img
디렉터리에 복사했는데, 이는 다양한 성공을 거두었습니다. 사용:$ rsync -aHxv / \ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \ /mnt/img
Lubuntu를 사용하여 위에 표시된 정확한 프로세스를 시도했고 rsync
명령이 작동했지만 QEMU에서 IMG를 실행하려고 하면 하드 드라이브에서 부팅할 때 중단됩니다.
tcl에서 위 프로세스를 시도하면 rsync
명령이 실패하고 QEMU에서 부팅을 시도하면 부팅 가능한 장치가 없다는 메시지가 나타납니다.
누구든지 이것에 대한 제안이 있습니까? 아니면 이전에 비슷한 일을 해본 적이 있고 목표를 달성할 수 있는 더 나은 방법이 있습니까?
답변1
부트 섹터를 복사하면 그 안에 있는 파티션 테이블도 복사됩니다. fdisk 버전과 원본 파일
sda
과 이미지 파일을 분할할 때 사용된 정확한 옵션에 따라 파티션 제한은 정확히 동일할 수도 있고 동일하지 않을 수도 있습니다. 그렇지 않은 경우... 루프 마운트는fdisk
생성한 파티션 오프셋을 사용하지만 시작 시 VM은 원본의 파티션 오프셋을 사용합니다sda
.MBR을 복사했지만
dd
내용은 다음과 같습니다. MBR에는 다른 부트 로더 구성 요소(또는 GRUB 레거시)의 위치를 식별하는 블록 수준 오프셋이 포함되어 있습니다. 이러한 파일이 ./boot
rsync
<filesystem>_stage1.5
stage2
rsync
부트로더의 일부를 완전히 놓쳤을 수도 있습니다. GRUB Legacy는 파티션의 시작 부분, 즉 영역에 자신의 일부를 포함할 수 있습니다.파일 시스템 외부GRUB2는 거의 항상 MBR 이후의 디스크 블록에 대부분의 코어 이미지를 기록하지만첫 번째 파티션이 시작되기 전에. 디스크의 처음 512바이트만 복사하면 기존 MBR만 얻을 수 있지만 내용은 손실됩니다. 나는 이것이 당신의 스타트업이 실패한 가장 큰 이유라고 생각합니다.
계획한 가상화 방법에 따라 아마도 다음과 같은 것을 사용한 다음 mount --bind /dev /mnt/img/dev
이미지 /proc
환경 으로 이동하여 이를 사용하여 올바른 블록 오프셋이 있는 이미지 파일에 부트로더를 올바르게 다시 작성해야 합니다./sys
chroot
grub-install
또 다른 가능한 접근 방식은 단일 사용자 모드에서 원본 시스템을 시작하거나 원본 시스템에서 가능한 한 많은 데몬을 중지(즉, 시스템 정지)한 다음 dd
전체 시스템 디스크를 단일 작업으로 이미지에 넣는 것입니다. 이 방법을 fsck
사용하면 처음 부팅할 때 결과 이미지를 실행해야 하지만 MBR 및 부트로더의 모든 복잡성을 피할 수 있습니다.